Hallo Schleifchen !
@SW_HIDE am Ende das die Konsole dabei nicht angezeigt wird.
Diese Antwort ist 100% OK !
Falls Du Dir den Inhalt der Konsole aber mal anzeigen lassen möchtest, dann sind folgende Hilfsfunktionen ggf. nützlich (speziell wenn man viel 'rumtestet)
AutoIt
#include <WinAPIFiles.au3>
; Hier den gewünschten Befehl eingeben, z.B. :
; 'dir' , 'net user' , 'netsh wlan disconnect' etc.
; Falls Parameter übergeben werden, dann mit "" umgeben, z.B. :
; 'dir "' & @WindowsDir & '"'
Global $sCommand = 'dir'
Global $sSTDOUT = _GetCMDOutput($sCommand)
; als Konsolenmeldung :
ConsoleWrite(_ConvertOEMtoANSI($sSTDOUT) & @CRLF)
; alternativ als MessageBox :
MsgBox(0, "Meldung : ", _ConvertOEMtoANSI($sSTDOUT) & @CRLF)
; ========== Hilfsfunktionen ===========================================================================
; ------------------------------------------------------------------------------------------------------
; Funktion : _ConvertOEMtoANSI
; Beschreibung : Konvertiert einen OEM-String zu ANSI
; Hintergrund : Auswertung des Ausgabestreams für Befehle der Eingabeaufforderung (cmd.exe).
; Normalerweise erfolgt die Anzeige, z.B. von 'net user' oder 'dir', im Konsolenfenster.
; Häufig startet man die Konsole aber versteckt(@SW_HIDE), und wertet den Konsolenstream
; in AutoIt mittels 'StdoutRead' aus.
; Problem : Sonderzeichen wie Umlaute werden im Konsolenfenster korrekt, im Stream aber fehlerhaft
; dargestellt. Diese Funktion konvertiert den Konsolenstream nach ANSI.
; ------------------------------------------------------------------------------------------------------
Func _ConvertOEMtoANSI($sOEM)
Local $aDLLReturn, $sAnsi
$aDLLReturn = DllCall('user32.dll', 'Int', 'OemToChar', 'str', $sOEM, 'str', '')
If @error Then
$sAnsi = $sOEM ; im Fehlerfall den Originalstring unkonvertiert zurückgeben
Else
$sAnsi = $aDLLReturn[2]
EndIf
Return $sAnsi
EndFunc ;==>_ConvertOEMtoANSI
; ------------------------------------------------------------------------------------------------------
; Funktion : _GetCMDOutput
; Beschreibung : Ausführen eines Befehls über die Konsole (für Standardbefehle)
; - StdoutRead : Liest STDOUT-Stream eines 'Run' Childprozess.
; Benötigt die Prozess-ID des Childprozesses (also von 'Run').
; Returns : StdoutRead als TextString(auch mehrzeilig)
; ------------------------------------------------------------------------------------------------------
Func _GetCMDOutput($sCommand)
Local $iPID ; ProcessID des Childprozesses
Local $sText = "" ; Text aus StdoutRead
; WICHTIG : 'Run' verwenden, nicht 'RunWait' !
; -> 'Run' liefert eine ProcessID zurück (wird für StdoutRead benötigt)
; -> 'RunWait liefert einen ExitCode zurück (STDOUT-Stream wäre damit leer)
$iPID = Run(@COMSPEC & ' /c ' & $sCommand, "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
If Not @error Then
ProcessWaitClose($iPID)
$sText = StdoutRead($iPID)
EndIf
Return StringStripWS($sText, BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING))
EndFunc ;==>_GetCMDOutput
Alles anzeigen
Gruß Musashi