; #SCRIPT# ----------------------------------------------------------------------------------------------------------------------------------------------
;	Script Name		:	WLAN umschalten Win XP_2.au3
;	Beschreibung	:	Script zum ein- oder aus-schalten (aktivieren/deaktivieren) des W-LAN-Adapters unter Windows XP.
;
;	Includes		:	"ButtonConstants.au3", "GUIConstantsEX.au3", "StaticConstants.au3"
;	AutoIt Version	:	3.3.8.1
;	Script Autor	:	BigRox
;
;	Anmerkung(en)	;			! ! ! DAS SCRIPT FUNKTIONIERT NUR UNTER WINDOWS XP ! ! !
;
; -------------------------------------------------------------------------------------------------------------------------------------------------------
; Sonstiges für dieses Script festlegen.
#RequireAdmin

; Dateien einbinden.
#include-once
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

; Die Optionen für dieses Script festlegen.
Opt("MustDeclareVars", 1)
Opt("GUICoordMode", 2)

; Variablen deklarieren.
Local $Button_1, $Button_2, $Geraet, $GUI_Msg, $Label_1

; Der Variablen die Hardwareerkennung des W-LAN Adapters (Device-ID) zuweisen (steht im Gerätemanager unter "Details | Hardwareerkenungen").
$Geraet = '"PCI\VEN_168C&DEV_0013&SUBSYS_2051168C&REV_01"'

; Das GUI-Fenster erstellen.
GUICreate("W-LAN Status umschalten.", 280, 128, -1, 200)
;	Die Buttons in der GUI erstellen.
$Button_1 = GUICtrlCreateButton("Adapter deaktivieren", 10, 30, 105, -1, $BS_CENTER)
$Button_2 = GUICtrlCreateButton("Adapter aktivieren", 50, -1, 105, -1, $BS_CENTER)
;	Das Label in der GUI erstellen (ohne Text, da dieser später eingtragen und aktualisiert wird).
$Label_1 = GUICtrlCreateLabel("", -250, 30, 240, -1, $SS_CENTER)
;	Die GUI anzeigen.
GUISetState()
; Das Label aktualisiere, um den momentanen Status richtig anzuzeigen.
GUICtrlSetData($Label_1, _Status($Geraet))

; Schleife zum auswerten der Aktionen innerhalb der GUI (die Schleife wiederholt sich, bis der Benutzer eine Beenden-Aktion auslöst=
While 1
	$GUI_Msg = GUIGetMsg()
	Select
		Case $GUI_Msg = $GUI_EVENT_CLOSE
			ExitLoop
		Case $GUI_Msg = $Button_1
			;	Den W-LAN-Adapter deaktivieren.
			RunWait(@COMSPEC & ' /c "devcon disable "' & $Geraet, "", @SW_HIDE)
			;	Das Label wieder aktualisieren, danach Sleep(), damit man den Text auch lesen kann und dann die GUI schließen.
			GUICtrlSetData($Label_1, _Status($Geraet))
			Sleep(5000)
			ExitLoop
		Case $GUI_Msg = $Button_2
			;	Den W-LAN-Adapter aktivieren.
			RunWait(@COMSPEC & ' /c "devcon enable "' & $Geraet, "", @SW_HIDE)
			;	Das Label wieder aktualisieren, danach Sleep(), damit man den Text auch lesen kann und dann die GUI schließen.
			GUICtrlSetData($Label_1, _Status($Geraet))
			Sleep(5000)
			ExitLoop
	EndSelect
WEnd

Exit


; Funktion zum auslesen des Status des W-LAN-Adapters.
Func _Status($Device)

	Local $Message, $State
	; Den Status des Adapters auslesen und den Rückgabewert der Variablen $State zuweisen.
	$State = Run(@COMSPEC & ' /c "devcon status "' & $Device, @SystemDir, @SW_HIDE, 2)
	; Eine Endlosschleife zum suchen des Textes in dem Rückgabewert starten (der Rückgabewert enthält auch Leerzeilen).
	While 1
		$Message = StdoutRead($State)
		;	Die Endlosschleife verlassen, wenn eine Textzeile gefunden wurde, oder keine weiteren Zeilen mehr vorhanden sind.
		If @error Or $Message <> "" Then
			ExitLoop
		EndIf
	WEnd

	; Die Länge des zurückgegebenen Textes ermitteln, um festzustellen, ob das Gerät überhaupt gefunden wurde.
	If StringLen($Message) < 30 Then
		Return "! ! ! Der W-LAN Adapter ist nicht vorhanden ! ! !"
	Endif

	;	In der gefundenen Textzeile nach der Zeichenfolge "runing" suchen, den Rückgabestring entsprechend anpassen und die Funktion verlassen.
	If StringRegExp($Message, "(\Qrunning\E)") Then
		Return "Der W-LAN Adapter ist aktiviert."
	Else
		Return "Der W-LAN Adapter ist deaktiviert."
	EndIf

EndFunc

; Aktivieren mit: devcon.exe enable "PCI\VEN_168C&DEV_0013&SUBSYS_2051168C&REV_01"
; In AutoIt mit: RunWait(@COMSPEC & ' /c "devcon enable PCI\VEN_168C&DEV_0013&SUBSYS_2051168C&REV_01"', "", @SW_HIDE)

; Deaktivieren mit: devcon.exe disable "PCI\VEN_168C&DEV_0013&SUBSYS_2051168C&REV_01"
; In AutoIt mit: RunWait(@COMSPEC & ' /c "devcon disable PCI\VEN_168C&DEV_0013&SUBSYS_2051168C&REV_01"', "", @SW_HIDE)

; Status auslesen mit "devcon status PCI\VEN_168C&DEV_0013&SUBSYS_2051168C&REV_01"'
; In AutoIt mit: Run(@COMSPEC & ' /c "devcon status PCI\VEN_168C&DEV_0013&SUBSYS_2051168C&REV_01"', @SystemDir, @SW_HIDE, 2)