Hallo
Ich möchte in einen Formular verschiedene Input-felder per Checkbox auf enable stellen, genauer gesagt:
In meinen Formular will ich die Ip-Adressen zu einer Netzwerkverbindung einstellen. Den Namen der Netzwerkverbindung lese ich als Variable ein und gebe sie in einen Inputfeld aus.Da der Name in der Regel nicht geändern werden soll hab ich mit GUICtrlSetState(-1, $GUI_DISABLE) Das Input-feld auf Disable(grau hinterlegt) gesetzt. Falls der Name aber doch geändert werden soll, sollte jetzt einfach durch klicken auf die daneben stehende Checkbox, die Inputbox auf enable gesetzt werden
Hab mir das in etwa so gedacht:
Funktioniert halt leider noch nicht
$LabelVerbindungOnboard = GUICtrlCreateLabel("Verbindung (Onboard)", 30, 152, 108, 17)
$CheckboxOnboard = GUICtrlCreateCheckbox("", 433, 153, 16, 17)
$InputVerbindungOnboard = GUICtrlCreateInput($VerbindungOnboard, 140, 152, 280, 21)
if BitAND (GUICtrlRead($CheckboxOnboard), $GUI_CHECKED) <> $GUI_CHECKED Then GUICtrlSetState(-1, $GUI_DISABLE)
Hier der bisherige code des gesammten Projektes
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.2.12.0
Author:
Installation Maschenenspezifischer Software
Version 0.0
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit];;;;Hauptfenster
#Region ### START Koda GUI section ### Form=U:\Eigene Dateien\AutoIt\Test Installationstool\Form20.kxf
$FormMaschienenspezifisch = GUICreate("Maschienenspezifische Einstellungen", 413, 305, 245, 180)
$LabelEquipmentnr = GUICtrlCreateLabel("Equipmentnr. :", 72, 40, 72, 17)
$InputEquipmentnr = GUICtrlCreateInput("", 176, 40, 121, 21)
$ButtonOk = GUICtrlCreateButton("Ok", 296, 264, 75, 25, 0)
$ComboMaschTyp = GUICtrlCreateCombo("AD2390", 177, 5, 121, 25)
GUICtrlSetData(-1, "AD2391|AD8320|AD8330|AM2185|AM2186|AM8115|AM8125|ARCOMAT")
$LabelMaschTyp = GUICtrlCreateLabel("Maschienentyp", 72, 7, 76, 17)
$CheckboxSetIP = GUICtrlCreateCheckbox("Netzwerkverbindungen einstellen", 16, 72, 185, 17)
$CheckboxComputername = GUICtrlCreateCheckbox("Computername einstellen", 16, 100, 178, 17)
GUISetState(@SW_SHOW,$FormMaschienenspezifisch)
#EndRegion ### END Koda GUI section ###
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $ButtonOK ; OK Button gedrückt
$Equipmentnr = GUICtrlRead ($InputEquipmentnr)
$Maschtyp = GUICtrlRead ($ComboMaschTyp)
if BitAND (GUICtrlRead($CheckboxSetIP), $GUI_CHECKED) = $GUI_CHECKED Then ; Haken Netzwerkverbinungen einstellen gesetzt
SetIp($Maschtyp,$Equipmentnr)
EndIf
if BitAND (GUICtrlRead($CheckboxComputername), $GUI_CHECKED) = $GUI_CHECKED Then ; Haken Computername einstellen gesetzt
Computername($Maschtyp,$Equipmentnr)
EndIf
Case $Msg = $GUI_EVENT_CLOSE ;Schließen (x) gedrückt
Exit
Exit
EndSelect
WEnd
[/autoit] [autoit][/autoit] [autoit]Func SetIp($Maschiene,$Nr) ;Setzt die Verschiedenen Ip-Adressen
$Mask = "255.255.255.0"
$Gateway = "172.16.200.1"
$VerbindungOnboard = Netzwerkverbindung("(Onboard)"); Gibt den Namen der Netzwerkverbindung zurück die den angegebenen String enthält
$Verbindung1X = Netzwerkverbindung("(1X)")
$Verbindung2X = Netzwerkverbindung("(2X)")
$Verbindung3X = Netzwerkverbindung("(3X)")
$Verbindung4X = Netzwerkverbindung("(4X)")
;IpAdresseOnboard berechnet sich wie folgt aus der Equipmentnr
$hex = Hex($Nr, 4) ; Berechnet aus der Equipmentnr eine 4 stellige Hex-zahl
;MsgBox(0,"Hexzahl",$hex)
$hexsplit = StringSplit($hex,"") ; Teilt die Hex-Zahl
$dec1 = Dec($hexsplit[1] & $hexsplit[2]) ; Macht aus den ersten Beiden Hexzahlen wieder eine Dezimalzahl
$dec2 = Dec($hexsplit[3] & $hexsplit[4])
$IpAdresseOnboard = "172.16."& $dec1 & "." & $dec2
;MsgBox(0,"IP Nr. :",$IpAdresseOnboard)
;;;
;IpAdresse1X und IpAdresse2X sind vom Maschienentyp abhängig AD2390|AD2391|AD8320|AD8330|AM2185|AM2186|AM8115|AM8125|ARCOMAT
If $Maschiene = "AD2390" Then $IpAdresse1X = "192.168.2.20"
If $Maschiene = "AD2391" Then $IpAdresse1X = "192.168.2.20"
If $Maschiene = "AD8320" Then $IpAdresse1X = "192.168.2.20"
If $Maschiene = "AD8330" Then $IpAdresse1X = "192.168.2.20"
If $Maschiene = "AM2185" Then $IpAdresse1X = "192.168.2.10"
If $Maschiene = "AM2186" Then $IpAdresse1X = "192.168.2.10"
If $Maschiene = "AM8115" Then $IpAdresse1X = "192.168.2.10"
If $Maschiene = "AM8125" Then $IpAdresse1X = "192.168.2.10"
If $Maschiene = "ARCOMAT" Then $IpAdresse1X = "192.168.2.30"
;IpAdresse2X
If $Maschiene = "AD2390" Then $IpAdresse2X = "192.168.50.32"
If $Maschiene = "AD2391" Then $IpAdresse2X = "192.168.50.32"
If $Maschiene = "AD8320" Then $IpAdresse2X = "192.168.50.32"
If $Maschiene = "AD8330" Then $IpAdresse2X = "192.168.50.32"
If $Maschiene = "AM2185" Then $IpAdresse2X = "192.168.50.1"
If $Maschiene = "AM2186" Then $IpAdresse2X = "192.168.50.1"
If $Maschiene = "AM8115" Then $IpAdresse2X = "192.168.50.1"
If $Maschiene = "AM8125" Then $IpAdresse2X = "192.168.50.1"
If $Maschiene = "ARCOMAT" Then $IpAdresse2X = "192.168.1.x" ;IP Adresse ist im Kundenbetrieb anzupassen
;;;
$IpAdresse3X = "x.x.x.x"
$IpAdresse4X = "x.x.x.x"
;;;;;Fenster Netzwerkeinstellungen
#Region ### START Koda GUI section ### Form=U:\Eigene Dateien\AutoIt\Test Installationstool\FormNetzwerkverbindungen.kxf
$FormNetzwerkverbindungen = GUICreate("Netzwerkverbindungen", 480, 534, 292, 208)
$LabelNetzwerkverbindungen = GUICtrlCreateLabel("Netzwerkverbindungen", 128, 16, 114, 17)
$LabelAllgemein = GUICtrlCreateLabel("Allgemein", 118, 50, 49, 17)
$LabelGateway = GUICtrlCreateLabel("Gateway", 30, 72, 46, 17)
$LabelMask = GUICtrlCreateLabel("Subnet Mask", 30, 97, 67, 17)
$LabelVerbindungOnboard = GUICtrlCreateLabel("Verbindung (Onboard)", 30, 152, 108, 17)
$LabelIpOnboard = GUICtrlCreateLabel("Ip Adresse", 30, 177, 54, 17)
$LabelVerbindung1X = GUICtrlCreateLabel("Verbindung (1X)", 30, 212, 80, 17)
$LabelIp2 = GUICtrlCreateLabel("Ip Adresse", 30, 237, 54, 17)
$LabelVerbindung2X = GUICtrlCreateLabel("Verbindung (2X)", 30, 272, 80, 17)
$LabelIp3 = GUICtrlCreateLabel("Ip Adresse", 30, 297, 54, 17)
$LabelVerbindung3X = GUICtrlCreateLabel("Verbindung (3X)", 30, 332, 80, 17)
$LabelIp4 = GUICtrlCreateLabel("Ip Adresse", 30, 357, 54, 17)
$LabelVerbindung4X = GUICtrlCreateLabel("Verbindung (4X)", 30, 392, 80, 17)
$LabelIp5 = GUICtrlCreateLabel("Ip Adresse", 30, 417, 54, 17)
$CheckboxOnboard = GUICtrlCreateCheckbox("", 433, 153, 16, 17)
$Checkbox1 = GUICtrlCreateCheckbox("", 433, 213, 16, 17)
$Checkbox2 = GUICtrlCreateCheckbox("", 433, 272, 16, 17)
$Checkbox3 = GUICtrlCreateCheckbox("", 433, 334, 16, 17)
$Checkbox4 = GUICtrlCreateCheckbox("", 433, 394, 16, 17)
$Labelaendern = GUICtrlCreateLabel("Ändern", 420, 126, 38, 17)
$InputGateway = GUICtrlCreateInput($Gateway, 140, 72, 280, 21)
$InputMask = GUICtrlCreateInput($Mask, 140, 96, 280, 21)
$InputVerbindungOnboard = GUICtrlCreateInput($VerbindungOnboard, 140, 152, 280, 21)
if BitAND (GUICtrlRead($CheckboxComputername), $GUI_CHECKED) = $GUI_CHECKED Then GUICtrlSetState(-1, $GUI_DISABLE)
$InputIpOnboard = GUICtrlCreateInput($IpAdresseOnboard, 140, 177, 280, 21)
$InputVerbindung1X = GUICtrlCreateInput($Verbindung1X, 140, 212, 280, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$InputIp1X = GUICtrlCreateInput($IpAdresse1X, 140, 237, 280, 21)
$InputVerbindung2X = GUICtrlCreateInput($Verbindung2X, 138, 270, 280, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$InputIp2X = GUICtrlCreateInput($IpAdresse2X, 140, 297, 280, 21)
$InputVerbindung3X = GUICtrlCreateInput($Verbindung3X, 140, 332, 280, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$InputIp3X = GUICtrlCreateInput($IpAdresse3X, 140, 357, 280, 21)
$InputVerbindung4X = GUICtrlCreateInput($Verbindung4X, 140, 392, 280, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$InputIp4X = GUICtrlCreateInput($IpAdresse4X, 140, 417, 280, 21)
$ButtonAbbrechen = GUICtrlCreateButton("Abbrechen", 140, 453, 100, 25, 0)
$ButtonUebernehmen = GUICtrlCreateButton("Übernehmen", 322, 453, 100, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
#EndRegion ### END Koda GUI section ###
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW,$FormNetzwerkverbindungen)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Select
Case $nMsg = $ButtonUebernehmen
$IpAdresseOnboard = GUICtrlRead ($InputIpOnboard)
$IpAdresse1X = GUICtrlRead ($InputIp1X)
$IpAdresse2X = GUICtrlRead ($InputIp2X)
$IpAdresse3X = GUICtrlRead ($InputIp3X)
$IpAdresse4X = GUICtrlRead ($InputIp4X)
MsgBox(0,"IP Nr. :",'interface ip set address name = "'&$VerbindungOnboard&'"' & " source=static addr="& $IpAdresseOnboard & " mask= " & $Mask & " gateway=" & $Gateway & " gwmetric=1")
if StringInStr($IpAdresseOnboard, "x") = 0 Then _ ;Wenn kein X in IpAdresseOnboard vorhanden ist
Run('netsh interface ip set address name = "'&$VerbindungOnboard&'"' & " source=static addr="& $IpAdresseOnboard & " mask= " & $Mask & " gateway=" & $Gateway & " gwmetric=1" )
ProcessWaitClose ( "netsh.exe" ) ; Wartet bis Netsh wieder beendet wurde
if StringInStr($IpAdresse1X, "x") = 0 Then _ ;Wenn kein X in IpAdresse1X vorhanden ist
Run('netsh interface ip set address name = "'&$Verbindung1X&'"' & " source=static addr="& $IpAdresse1X & " mask= " & $Mask & " gateway=" & $Gateway & " gwmetric=1" )
ProcessWaitClose ( "netsh.exe" ) ; Wartet bis Netsh wieder beendet wurde
if StringInStr($IpAdresse2X, "x") = 0 Then _ ;Wenn kein X in IpAdresse2X vorhanden ist
Run('netsh interface ip set address name = "'&$Verbindung2X&'"' & " source=static addr="& $IpAdresse2X & " mask= " & $Mask & " gateway=" & $Gateway & " gwmetric=1" )
ProcessWaitClose ( "netsh.exe" ) ; Wartet bis Netsh wieder beendet wurde
if StringInStr($IpAdresse3X, "x") = 0 Then _ ;Wenn kein X in IpAdresse3X vorhanden ist
Run('netsh interface ip set address name = "'&$Verbindung3X&'"' & " source=static addr="& $IpAdresse3X & " mask= " & $Mask & " gateway=" & $Gateway & " gwmetric=1" )
ProcessWaitClose ( "netsh.exe" ) ; Wartet bis Netsh wieder beendet wurde
if StringInStr($IpAdresse4X, "x") = 0 Then _ ;Wenn kein X in IpAdresse4X vorhanden ist
Run('netsh interface ip set address name = "'&$Verbindung4X&'"' & " source=static addr="& $IpAdresse4X & " mask= " & $Mask & " gateway=" & $Gateway & " gwmetric=1" )
ProcessWaitClose ( "netsh.exe" ) ; Wartet bis Netsh wieder beendet wurde
ExitLoop
Case $nMsg = $GUI_EVENT_CLOSE ; Schließen (x) gedrückt
ExitLoop
Case $nMsg = $ButtonAbbrechen
[/autoit] [autoit][/autoit] [autoit]ExitLoop
EndSelect
WEnd
GUISetState(@SW_HIDE,$FormNetzwerkverbindungen)
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func Computername($Maschiene,$Nr)
Run("control.exe sysdm.cpl,,1") ;Startet Systemeinstellungen die 1 besagt welcher Reiter geöffnet werden soll, in diesem Fall Computer Name
;$error = ProcessWait("rundll32.exe",20000) ;wartet bis zu 20sek bis Einstellungen geöffnet
;if $error = 0 then MsgBox(1,"Error","Zeitüberschreitung beim Starten der Systemeinstellungen")
sleep(1000)
ControlClick ( "System Properties", "", 115 ); 115 ist control ID des change Buttons
sleep(1000)
ControlSetText ( "Computer Name Changes", "", 1002, "EQ" & $Equipmentnr) ;
sleep(1000)
ControlCommand("Computer Name Changes","",1004,"Check","") ; Setz den Radiobutton Workgroup auf Check (gesetzt)
sleep(1000)
ControlSetText ( "Computer Name Changes", "", 1007, "WORKGROUP") ;
sleep(1000)
ControlClick ( "Computer Name Changes", "", 1 ); 1 ist control ID des Ok Buttons
sleep(1000)
ControlClick ( "Computer Name Changes", "", 2 ); 2 ist control ID des Ok Buttons des Popup windows
sleep(1000)
;MsgBox(1,"","EQ" & $Equipmentnr)
ControlSetText ( "System Properties", "", 122, "EQ" & $Equipmentnr);
sleep(1000)
ControlClick ( "System Properties", "", 1 ); 1 ist control ID des Ok Buttons
sleep(1000)
ControlClick ( "Computer Settings Change", "", 7 ); 7 ist control ID des No Buttons, Auf die Frage nach dem Restart
sleep(1000)
EndFunc
Func Netzwerkverbindung($a) ; Gibt die gefundene Netzwerkverbindung zurück deren Name den angegebenen String enthält.
Dim $Verbindung[10] ;Dimensioniert ein Array für die gefundennen Verbindungen
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\microsoft\homenet")
$colItems = $objWMIService.ExecQuery("Select * from HNet_Connection")
$i = 0
For $objItem In $colItems
$Verbindung[$i] = $objItem.Name ; Speichert jedes mal wenn eine Netzwerkverbindung gefunden wird den Namen dieser in den Array
$i = $i + 1
;MsgBox(1,"",$i)
Next
$gefundenneVerbindung ="" ; $gefundenneVerbindung wird als leerer String deklariert
For $j = 0 to $i-1 Step 1
if StringInStr($Verbindung[$j], $a) <> 0 then $gefundenneVerbindung = $Verbindung[$j] ; Durchsucht die Namen der Verbindungen des Array´s ob sie die gewünschte zeichenkette enthalten
next
Return $gefundenneVerbindung ;gibt die gefundene Verbindung zurück
EndFunc