Hallochen, eine Frage an die Profis: mit "C:\>netsh wlan disconnect" Eingabe wird in der Windows Eingabeaufforderung die WLAN-Verbindung getrennt. Wie kann das in AutoIt umgesetzt werden? Oder gibt es andere Lösungen?
Danke
Stefan
Hallochen, eine Frage an die Profis: mit "C:\>netsh wlan disconnect" Eingabe wird in der Windows Eingabeaufforderung die WLAN-Verbindung getrennt. Wie kann das in AutoIt umgesetzt werden? Oder gibt es andere Lösungen?
Danke
Stefan
Hallo,
dies kannst du mit dem Run oder RunWait Befehl erledigen.
@ComSpec & ' /c ' übermitteln das der Befehl über CMD ausgeführt werden soll.
@SW_HIDE am Ende das die Konsole dabei nicht angezeigt wird.
Alles weitere zu Run und RunWait ist in der Autoit Hilfe zu finden.
Grandios, danke - läuft
Gibt es auch einen Weg nicht die gesamte WLAN-Verbindung zu kappen sondern nur die Verbindung mit einer bestimmten SSID zu unterbrechen?
Stefan
Wie viele gleichzeitige WLAN Verbindungen hast du denn?
Hallo, da besteht nur eine Verbindung. Es ist alles bestens - ich war der Meinung das der WLAN-Adapter deaktiviert wird. Aber dem ist nicht so...daher alles bestens.
Danke
Stefan
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)
#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
Krass, schaue ich mir heute Abend an, danke...
Ein paar Anmerkungen zu _GetCMDOutput.au3
#include <WinAPIFiles.au3> ; ab AutoIt v3.3.14.3 #include <WinAPIConv.au3>
...ist überflüssig, weil du OemToChar direkt via DllCall aufrufst.
Run(@COMSPEC & ' /c ' & $sCommand, ...
@COMSPEC wird nur benötigt, wenn mit $sCommand auch interne Befehle wie echo, if, for oder goto aufgerufen werden, für die es keine *.exe gibt. Bei netsh ist dies nicht der Fall.
c:\>where netsh
C:\Windows\System32\netsh.exe
If Not @error Then
Wir wollen wissen, ob es funktioniert hat... und nicht, ob kein Fehler aufgetreten ist.
If $iPID Then
Seit einiger Zeit benutze ich aber nicht mehr OemToChar, sondern _WinAPI_WideCharToMultiByte. Das hat den Vorteil, dass Textausgaben in SciTE und in der Eingabeaufforderung auch UTF-8-Zeichen enthalten dürfen. Dafür müssen allerdings drei Einstellungen geändert werden. Kleiner Nachteil dabei ist, dass bereits vorhandene Scripte von ANSI nach UTF-8 konvertiert werden müssen. Dafür habe ich aber auch ein Script.
SciTEUser.properties:
code.page=65001
output.code.page=65001
Eingabeaufforderung:
Eigenschaften ==> Schriftart ==> hier eine TrueType-Schriftart auswählen, die UTF-8-Zeichen enthält. Ich habe bei mir z.B. NSimSun ausgewählt.
Hier nun meine Funktionen für die Textausgabe in UTF-8:
#include <WinAPIFiles.au3> ; ab AutoIt v3.3.14.3 #include <WinAPIConv.au3>
Func _CW($sText)
ConsoleWrite(StringFormat(_WideCharToMultiByte($sText)) & @CRLF)
EndFunc ;==>_CW
; Konvertiert den Text, damit Umlaute und Sonderzeichen in SciTE und in der Eingabeaufforderung korrekt dargestellt werden!
Func _WideCharToMultiByte($vText, $iCodePage = 65001, $bRetString = True)
$vText = String($vText) ; Damit _WinAPI_WideCharToMultiByte nicht abstürzt, wenn kein String übergeben wurde!
; SciTE output.code.page = 65001 (UTF-8), Eingabeaufforderung = 65001 (UTF-8) + Schriftart, die UTF-8-Zeichen enthält!
;~ Return _WinAPI_WideCharToMultiByte($vText, $iCodePage, $bRetString)
; SciTE output.code.page = 65001 (UTF-8), Eingabeaufforderung = 1 (OEM 850) + Schriftart, die UTF-8-Zeichen enthält! (Default)
Return _WinAPI_WideCharToMultiByte($vText, @Compiled ? 1 : $iCodePage, $bRetString)
EndFunc ;==>_WideCharToMultiByte
Alles anzeigen
Erst einmal 'Danke' für deine Anmerkungen
#include <WinAPIFiles.au3> ; ab AutoIt v3.3.14.3 #include <WinAPIConv.au3>
Ich benutze aktuell die Ver. 3.3.14.0.
Bei mir geht es mit WinAPIFiles.au3 . Dein Beispiel wirft damit einen Fehler (bei mir).
Mit #include <WinAPI.au3> gehen beide. Lass' uns hier aber bitte kein großes Fass aufmachen - ich wollte Schleifchen lediglich auf eine mögliche Konsolenausgabe hinweisen.
Gruß Musashi