Aktionen

AutoIt:Batchdatei beim Ausführen verstecken

Aus znilwiki

Version vom 21. Januar 2012, 21:51 Uhr von BLinz (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.

Download: HideBatchWindow.exe
Siehe auch: HideBatchWindow.exe - Batch Dateien (.cmd / .bat) ohne sichtbares DOS-Fenster ausführen


Diese Tool startet eine Batch-Datei ohne das sich dabei ein DOS-Fenster öffnet.

HideBatchWindow-001.gif



und das ist der Quellcode hierzu (mit hoffentlich ausreichend Kommentaren): (HideBatchWindow.au3)

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\znil.ico
#AutoIt3Wrapper_Res_Description=Batch versteckt starten
#AutoIt3Wrapper_Res_Fileversion=1.0.0.14
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=2011 von Bernhard Linz - http://znil.net
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;HideBatchWindow.exe
;
;Programm zum versteckten ausführen von Batchdateien
;
;Aufruf:  hidebatchwindow.exe [/wait] [Laufwerk:][Pfad][Batchdatei]
;
;2011 Bernhard Linz
;Email: Bernhard.Linz@datagroup.de
;Email: Bernhard@znil.net
;
;beim Compilen darf "Create CUI instead of GUI" NICHT (NICHT!) gestezt werden - sonst gibt es doch ein sichtbares Fenster!
;
#Include <WinAPI.au3>
;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $Header =    @CRLF & _
				 @CRLF & _
				 "HideBatchWindow.exe - 2011 von Bernhard Linz für http://znil.net" & @CRLF & _
                 "Kontakt: Bernhard@znil.net" & @CRLF & _
				 @CRLF

;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $HilfeText = "Startet eine Batchdatei versteckt, also ohne ein DOS-Fenster zu zeigen." & @crlf & _
				 @CRLF & _
				 "Aufruf:" & @CRLF & _
                 @ScriptName & " [/wait] [Laufwerk:][Pfad][Batchdatei] [Parameter]" & @CRLF & _
				 @CRLF & _
				 "/wait                         : Auf das Beenden der Batchdatei warten" & @CRLF & _
				 "                                (sonst selbst beenden)" & @CRLF & _
				 "[Laufwerk:][Pfad][Batchdatei] : Pfad zur Batchdatei" & @CRLF & _
				 "[Parameter]                   : eventuelle Parameter für die Batchdatei" & @CRLF & _
				 "                                (die diese Verarbeitet)" & @CRLF & _
				 @CRLF & _
				 "zum Beispiel:  " & @ScriptName & " test.cmd" & @CRLF & _
				 "               " & @ScriptName & " C:\Scripte\test.cmd" & @CRLF & _
				 "               " & @ScriptName & " \\server\freigabe\test.cmd" & @CRLF & _
				 "               " & @ScriptName & " /wait \\server\freigabe\test.cmd" & @CRLF & _
				 "               " & @ScriptName & " \\server\freigabe\test.cmd par1 par2" & @CRLF & _
				 @CRLF & _
				 "Bei Leerzeichen im Pfad bitte in Anführungszeichen setzen!" & @CRLF & _
				 @CRLF

Dim $Befehlzeile
Dim $ZeigerConsole

Func _HilfeAusgeben()
	_WinAPI_AttachConsole()
	$ZeigerConsole = _WinAPI_GetStdHandle(1)
	_WinAPI_WriteConsole($ZeigerConsole,$Header)
	_WinAPI_WriteConsole($ZeigerConsole,$HilfeText)
	Send("{Enter}")
EndFunc



;testen ob wir überhaupt mit einem parameter gestartet wurden - sonst Hilfe ausgeben
If $CmdLine[0] = 0 Then
	_HilfeAusgeben()
	Exit
EndIf

;testen ob der Parameter 1 ist auf "/?" testen und ebenfalls Hilfe ausgeben
If $CmdLine[1] = "/?" Then
	_HilfeAusgeben()
	Exit
EndIf

;testen ob nur 1 Parameter gesetzte wurde und ein Schlauberger hier nur /wait angebene hat - dann Hilfe ausgeben
If StringCompare($CmdLine[1], "/wait", 0) = 0 And $CmdLine[0] = 1 Then
	_HilfeAusgeben()
	Exit
EndIf

;testen ob der /wait Parameter gesetzt wurde oder nicht und ;testen ob es die übergebene Datei überhaupt gibt:
If StringCompare($CmdLine[1], "/wait", 0) = 0 Then
	If FileExists($CmdLine[2]) Then
		$Befehlzeile = ""
		For $i = 2 To $CmdLine[0]
			$Befehlzeile = $Befehlzeile & $CmdLine[$i] & " "
		Next
		RunWait(@ComSpec & " /c " & $Befehlzeile, "", @SW_HIDE)
	EndIf
Else
	If FileExists($CmdLine[1]) Then
		$Befehlzeile = ""
		For $i = 1 To $CmdLine[0]
			$Befehlzeile = $Befehlzeile & $CmdLine[$i] & " "
		Next
		Run(@ComSpec & " /c " & $Befehlzeile, "", @SW_HIDE)
	EndIf
EndIf
Loading comments...