Bitte setze den Status im Startpost auf 'Gelöst' ![]()
Beiträge von BugFix
-
-
Aber wenn ich das richtig lese, dann hilft es einem, falls Fehler auftreten. In meinem Fall läuft das Script ja "fehlerfrei" durch.
Sicher?
Hast du den Return geprüft?Return Value
Success: the PID of the process that was launched. Failure: 0 and sets the @error flag to non-zero. Eventuell musst du tatsächlich für die Ausführung des Befehls im *.exe - Verzeichnis sein.
Run ( "program" [, "workingdir" [, show_flag [, opt_flag]]] )
Gib dort mal dein Verzeichnis mit an. -
Leider hilft das nicht weiter, da diese Menüs nicht mehr in der Form existieren (der Beitrag ist von 2011). Aber Danke für die Mühe.
EDIT:
Die Anleitung war nur zu ungenau. Der Knackpunkt ist: Shut down XP guest. Genauer sollte es heißen: Ausschalten per ACPI.
Jetzt hat man im Netzwerkmenü der VM auch Zugriff auf die entscheidende Position: Adapter Type
Nun klappt es!
-
Das Problem bei Befehlen für die Konsole ist die korrekte Einbettung in Anführungszeichen. Da Parameter dort zusätzliche Anführungszeichen enthalten können, ist es am Einfachsten die Strings zu splitten und erst beim Aufruf zusammenzuführen.
Probier mal so:AutoIt
Alles anzeigenFunc Yadis() If WinExists("[CLASS:VMwareUnityHostWndClass]") Then Sleep(50000) Call("Yadis") Else MsgBox(0,"","Yadis ist nicht aktiv") ;~ Run("C:\vmware.bat") $sPathVMRun = 'C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe' $sParam = ' -T player stop "D:\Windows 8 VM\Windows 8 x64.vmx"' Run(@ComSpec & " /c " & $sPathVMRun & $sParam, "", @SW_HIDE) EndIf EndFunc -
Hi,
ich habe ein seltsames Problem.
Auf der VM habe ich WinXP installiert. Die VM-Gasterweiterungen sind auch aktiv, Netzwerkbrücke eingerichtet und zeigt 'verbunden' an. Aber ich kann mich nicht ins INet verbinden.
Installiere ich z.B. ein Win7 in der VM oder ein Linux habe ich sofort Internetzugang.
Hat jemand dafür eine Erklärung, bzw. besser - einen Lösungsansatz?Falls von Bedeutung: Ich nutze die Oracle VM in der Portable Version.
-
Mangels Serverumgebung kann ich das Problem für mich nicht nachstellen.
Solltest du keine probate Lösung finden, könntest du eine Alternativlösung schaffen:
- auf dem Zielrechner einen Ordner (z.B. MsgToSend) erstellen (als Freigabe)
- auf dem Zielrechner startest du ein Endlosskript, dass diesen Ordner auf Inhalt prüft (Intervall nach deinem Geschmack, 5...10 Sekunden)
- auf dem Fernsteuerungsrechner erstellst du die Triggerdatei mit den Daten (Window=Window-Titel; Send-String=... etc.)
- nun kopierst du die Datei auf den Zielrechner
- das Skript auf dem Zielrechner liest den Inhalt der Datei und löscht danach die Datei
- mit den Daten aus der Datei wird lokal der ControlSend-Befehl ausgeführt -
-
Wie wär es denn mit einer Rekursiven Suche?
AutoIt
Alles anzeigen;=============================================================================== ; Function Name: _SearchTreeForFile($sRootPath, $sFileName) ; Description:: Search for file in a folder with all subfolders ; Parameter(s): $sRootPath Path to start ; $sFileName Name of file to search ; Return Value(s): found Full path of the file ; not found Empty string ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _SearchTreeForFile($_sRootPath, $_sFileName) $_sRootPath = StringRegExpReplace($_sRootPath, '\\, '') & '\' Local $aRet = DllCall("imagehlp", 'long', 'SearchTreeForFile', 'str', _ $_sRootPath, 'str', $_sFileName, 'str', '') If $aRet[0] = 1 Then Return $aRet[3] Return '' EndFunc ;==>_SearchTreeForFile -
Also unabhängig von Eigeninitiative (die ich bei jedem voraussetze) habe ich das Schulungsangebot auch deshalb unterbreitet, weil ich beim Durchführen einer mehrtägigen Schulung bemerkt habe, dass es für die Teilnehmer ein völlig anderer Lernprozeß ist als im Selbsstudium. Das gemeinsame Lösen von Problemen führt zu Synergieeffekten und bringt somit einen wesentlich höheren Wissenszuwachs als bei alleiniger Arbeit.
Ich hatte mir auch überlegt, AutoIt-Webinare zu einem festen Bestandteil unserer Forenarbeit werden zu lassen.
Das könnte man in wiederkehrende Webinare für Anfänger und für Fortgeschrittene sowie zusätzlich mit wechselnden Themengebieten zu speziellen Problemen gliedern.
Wir haben ein enormes Potenzial an "Wissenden" hier im Forum. Wenn sich mehrere an diesem Projekt beteiligen würden, hätten wir auch das Plus, Problemlösungen aus unterschiedlichen Blickwinkeln zu erleben. Denn wenn ihr mal zurückblickt zu unseren Wettbewerben, zeigte sich doch, dass bei identischer Aufgabenstellung völlig unterschiedliche Wege zum Ziel führten, mit sehr interessanten Lösungsansätzen.
Eine solche "Webinar-Kultur" aufzubauen passiert natürlich nicht von heute auf morgen. Dank dem Angebot von Gun-Food, ist ja schonmal die technische Abwicklung gesichert.
Ich würde mich freuen, wenn wir solch ein Projekt bei uns integrieren könnten. -
Wenn es mal in der VHS in Stuttgart einen Kurs zu Autoit geben sollte, wäre ich ganz sicher einer der ersten Kursteilnehmer.
Wenn da echt Bedarf besteht, würde ich mich bereit erklären eine "Online-School" zu realisieren. Kann man mit mehreren Teilnehmern (für einen allein wär das ineffizient) gleichzeitig über Teamviewer abhalten oder für größere Anzahl mit einer Webinar-Software. Müßte aber erst schauen, ob es da eine Freeware gibt. Cisco ist glaub ich lizenzpflichtig.
Also mal umschauen wer echten Bedarf hat und Themenschwerpunkte zusammenstellen. Ich würde daraus ein Schulungsprogramm erstellen, hatte mir mal für eine Schulung eine Darstellungssoftware geschrieben. Also Handwerkszeug ist da.
Aber nur, wenn es wirklich ernst gemeint ist. Und eines vorneweg: Wer ernsthaft Koda zum Designen benutzt sollte danach keine Fragen stellen. Ich bin der Meinung, dass Koda zum Nicht-Denken verleitet und das ist kontraproduktiv. Nur wer in der Lage ist, das Modell seiner GUI im Kopf zu erstellen, kann auch ordentlich strukturiert programmieren. -
Gebt bitte Bescheid, wenn ich mich mit der Problemstellung zu undeutlich ausgedrückt habe oder so.
Ja, du hast nicht aufgezeigt, wie die korrekte Datei aussehen muß. Also nicht speziell diese, sondern das Muster einer korrekten *.docx.
Ich habe z.B. noch nie eine *docx benutzt, weil die bei mir automatisch schon beim Abholen aus dem Postfach auf ordentliches *.doc umformatiert werden. Nicht abwärtskompatible Datenformate zu nutzen ist echt das letzte, aber bei M$ leider Standard. 90% aller User können bequem alle ihre Office-Aufgaben auch mit den Versionen vor MSO-2007 lösen.
Also zeig mal, wie die Struktur richtig aussehen muss. -
Hier mal aus meiner Bsp-Kiste, umgesetzt mit Checkboxen:
AutoIt
Alles anzeigen; Muster Checkbox-Bearbeitung ; Ziel: einfache Abfrage, welche CB aktiviert sind #include <GUIConstants.au3> Opt('GUIOnEventMode', 1) Opt("MustDeclareVars", 1) Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB For $i = 0 To UBound($arCB) -1 $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert Next Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf, ; Startstatus für alle: UNCHECKED Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2 Global $top = -10 $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t) GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende') For $i = 0 To UBound($arCB) -1 $top += 30 $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120) GUICtrlSetOnEvent(-1, '_ClickCB') Next $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21) GUICtrlSetOnEvent(-1, '_CheckAll') $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21) GUICtrlSetOnEvent(-1, '_UnCheckAll') GUISetState() While 1 Sleep(100) WEnd Func _Ende() Exit EndFunc Func _ClickCB() For $i = 0 To UBound($arCB) -1 If $arCB[$i][0] = @GUI_CtrlId Then $Checked = BitXOR($Checked, $arCB[$i][1]) _ReadCB() ExitLoop EndIf Next EndFunc Func _CheckAll() For $i = 0 To UBound($arCB) -1 If Not BitAND($Checked, $arCB[$i][1]) Then ;~ GUICtrlSetState($arCB[$i][0], $GUI_CHECKED) GUICtrlSetState($arCB[$i][0], BitOR($GUI_CHECKED, $GUI_DISABLE)) ; markieren und disablen $Checked = BitXOR($Checked, $arCB[$i][1]) EndIf Next _ReadCB() EndFunc Func _UnCheckAll() For $i = 0 To UBound($arCB) -1 If BitAND($Checked, $arCB[$i][1]) Then ;~ GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED) GUICtrlSetState($arCB[$i][0], BitOR($GUI_UNCHECKED, $GUI_ENABLE)) ; Markierung aufheben und enablen $Checked = BitXOR($Checked, $arCB[$i][1]) EndIf Next _ReadCB() EndFunc Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind Local $str = 'Markiert: ' For $i = 0 To UBound($arCB) -1 If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', ' Next WinSetTitle($GUI, '', StringTrimRight($str, 2)) EndFunc -
Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax
Das verweist auf fehlerhafte Syntax. Du hast vor dem Kompilieren keinen Syntaxcheck ausgeführt und da die Syntax grundlegende Fehler aufweist, wurde der standardmäßige AU3-Check beim Kompilieren übersprungen.
Also schau in dein Skript, was du da verbockt hast.
-
$aSize = WinGetPos($id_slot_1)
Wenn du die Abfrage für die Position (inkl. Abmessungen) eines Fensters auf ein Control anwendest, bekommst du natürlich ein Ergebnis, das nicht passt.
Also nicht blind einsetzen, zumal ich ja auch kommentiert hatte WARUM diese Abfrage erfolgt.
-
Wenn ich jedoch nur das Handle des Edits habe komme ich damit leider nicht auf das "richtige" Handle zurück.
?? - Na klar, Edit ist Child vom Combo. Somit bekommst du über die Parentabfrage auch das Combo-Hwnd
AutoItIf _GUICtrlComboBox_GetComboBoxInfo($idCombo, $tInfo) Then MemoWrite("Handle to the ComboBox .....: " & DllStructGetData($tInfo, "hCombo")) MemoWrite("Handle to the Edit Box .....: " & DllStructGetData($tInfo, "hEdit")) MemoWrite("Handle to the drop-down list: " & DllStructGetData($tInfo, "hList")) EndIf $hParent = _WinAPI_GetParent(DllStructGetData($tInfo, "hEdit")) ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $hParent --> " & $hParent & @LF)Und was bitte meinst du mit echten Handle? Gibt es denn unechte? - Klär mich mal auf.

-
wie ich das umsetze, dass sie "versteckt" und oder deaktiviert werden.. und soll ich sie schon vorher "erstellen" und dann direkt verstecken? wie setze ich das am besten um
Du könntest sie bereits vorher erstellen, aber die GUI-Größe so definieren, dass diese Ctrl nicht sichtbar sind. Erst nach Button-Klick wird die GUI "ausgeklappt".
Wichtig - Für jedes Ctrl muß der Resizing-Befehl gesetzt werden, sonst spielen die Ctrl verrückt. Kannst den Befehl ja mal weglassen, dann siehst du den Unterschied.
Hier ein Bsp.AutoIt
Alles anzeigenGlobal $iW = 230, $iH_small = 40, $iH_full, $iH, $iX, $iY Global $fSwitch = False $hGui = GUICreate('Test', $iW, $iH_small) $idButton = GUICtrlCreateButton('Show/Hide Other Ctrl', 10, 10, 150, 20) GUICtrlSetResizing(-1, 802) ;~ $GUI_DOCKALL = 802 ; diese Ctrl werden nachher ein/ausgeblendet $idInput1 = GUICtrlCreateInput('', 10 , 40, 100, 20) GUICtrlSetResizing(-1, 802) ;~ $GUI_DOCKALL = 802 $idInput2 = GUICtrlCreateInput('', 120 , 40, 100, 20) GUICtrlSetResizing(-1, 802) ;~ $GUI_DOCKALL = 802 ; jetzt die wirklichen Abmaße des Fensters auslesen und speichern, brauchen wir für Resizing $aSize = WinGetPos($hGui) $iX = $aSize[0] $iY = $aSize[1] $iW = $aSize[2] $iH_small = $aSize[3] $iH_full = $iH_small +30 GUISetState() While True Switch GUIGetMsg() Case -3 Exit Case $idButton $fSwitch = Not $fSwitch $iH = $fSwitch ? $iH_full : $iH_small WinMove($hGui, '', $iX, $iY, $iW, $iH) EndSwitch WEnd -
Gibt genau dafür ein Bsp. in der Hilfe:
AutoIt
Alles anzeigen#include <GuiComboBox.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> Global $g_idMemo Example() Func Example() Local $tInfo, $idCombo ; Create GUI GUICreate("ComboBox Get ComboBox Info", 400, 296) $idCombo = GUICtrlCreateCombo("", 2, 2, 396, 296) $g_idMemo = GUICtrlCreateEdit("", 2, 32, 396, 266, 0) GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") GUISetState(@SW_SHOW) ; Add files _GUICtrlComboBox_BeginUpdate($idCombo) _GUICtrlComboBox_AddDir($idCombo, @WindowsDir & "\*.exe") _GUICtrlComboBox_EndUpdate($idCombo) If _GUICtrlComboBox_GetComboBoxInfo($idCombo, $tInfo) Then MemoWrite("Handle to the ComboBox .....: " & DllStructGetData($tInfo, "hCombo")) MemoWrite("Handle to the Edit Box .....: " & DllStructGetData($tInfo, "hEdit")) MemoWrite("Handle to the drop-down list: " & DllStructGetData($tInfo, "hList")) EndIf ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>Example ; Write a line to the memo control Func MemoWrite($sMessage) GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) EndFunc ;==>MemoWrite -
da wenn ich ein neues fenster öffnen lassen würde, ich das problem hätte, dass sich das ganze programm schließen würde sobald ich "X" auf dem fenster drücken würde.
Nöö, dem ist nur so, wenn du das in deinem Skript festlegst.

Hier mal ein einfaches Bsp., wie nur das Hauptfenster das Skript beendet. Beim Schliessen des zweiten Fensters wird zurückgekehrt zum Hauptfenster.
Da das also das Hauptproblem war, hättest du vielleicht gleich mal in dieser Richtung fragen sollen...
AutoIt
Alles anzeigen#include<GUIConstantsEx.au3> Local $gui1, $gui2, $btn1, $btn2, $msg $gui1 = GUICreate('GUI 1') $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20) $gui2 = GUICreate('GUI 2') $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20) GUISetState(@SW_SHOW, $gui1) While 1 $msg = GUIGetMsg(1) Switch $msg[1] ; Window Handle Case $gui1 Switch $msg[0] ; Event Case $GUI_EVENT_CLOSE ExitLoop Case $btn1 GUISetState(@SW_HIDE, $gui1) GUISetState(@SW_SHOW, $gui2) EndSwitch Case $gui2 Switch $msg[0] Case $GUI_EVENT_CLOSE GUISetState(@SW_SHOW, $gui1) GUISetState(@SW_HIDE, $gui2) Case $btn2 MsgBox(0, '', 'Button 2 geklickt') EndSwitch EndSwitch WEnd GUIDelete($gui1) GUIDelete($gui2)Edit:
Hier mal noch ein Hinweis, wie du durch die Verwendung von Arrays (s. auch mein Array-Tut in der Signatur) deinen Code deutlich straffen kannst.
Betrifft das If-Statement aus der Funktion um die Ctrl zu verschieben.AutoIt
Alles anzeigenIf $slot_1check Then GUICtrlSetState (@SW_HIDE, $id_slot_1) ; << schau mal hier und dann zwei Zeilen weiter, dort ist es richtig angewendet GUICtrlDelete ($id_slot_1) GUICtrlSetState ($password_slot_1, $GUI_HIDE) GUICtrlSetState ($market_slot_1, $GUI_HIDE) GUICtrlSetState ($leveling_slot_1, $GUI_HIDE) GUICtrlSetPos ( $slot_2, 8, 40, 75, 25) GUICtrlSetPos ( $slot_3, 8, 72, 75, 25) GUICtrlSetPos ( $slot_4, 8, 104, 75, 25) GUICtrlSetPos ( $slot_5, 88, 8, 75, 25) GUICtrlSetPos ( $slot_6, 88, 40, 75, 25) GUICtrlSetPos ( $slot_7, 88, 72, 75, 25) GUICtrlSetPos ( $slot_8, 88, 104, 75, 25) Else $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) GUICtrlSetPos ( $slot_2,8,152 , 75, 25) GUICtrlSetPos ( $slot_3,8,184 , 75, 25) GUICtrlSetPos ( $slot_4,8,216 , 75, 25) GUICtrlSetPos ( $slot_5,136,8 , 75, 25) GUICtrlSetPos ( $slot_6,136,40 , 75, 25) GUICtrlSetPos ( $slot_7,136,72 , 75, 25) GUICtrlSetPos ( $slot_8,136,104, 75, 25) EndIf #cs ; Wenn mehrfach dasselbe durchgeführt wird (GUICtrlSetPos) empfiehlt es sich mit Schleifen und Arrays zu arbeiten ; Im Array speicherst du: [[ID,x-Pos-1,y-Pos-1,x-Pos-2,y-Pos-2]] ; Sollte dann aber als Globales Array ausserhalb der Funktion erstellt werden, würde sonst bei jedem Aufruf neu erstellt werden Local $aSlots[7][5] = [ _ [$slot_2,8,40,8,152], _ [$slot_3,8,72,8,184], _ [$slot_4,8,104,8,216], _ [$slot_5,88,8,136,8], _ [$slot_6,88,40,136,40], _ [$slot_7,88,72,136,72], _ [$slot_8,88,104,136,104]] ; In der Funktion dann nur die Schleife ; Spalten-Index im Array für x1 ist 1, für x2 ist er 3. Der y-Index ist immer x-Index +1 Local $iX = 1 If Not $slot_1check Then $iX = 3 ; oder ternär: Local $iX = $slot_1check ? 1 : 3 For $i = 0 To UBound($aSlots) -1 GUICtrlSetPos($aSlots[$i][0], $aSlots[$i][$iX], $aSlots[$i][$iX+1], 75, 25) Next #ce -
Zitat von ManuelB.95
...jedoch stoße ich auf ein nächstes problem. wenn ich ich nochmal auf den button drücke, möchte ich gerne die zuvor generierten inputboxen sowie die radioboxen unsichtbar machen oder entfernen, ich weiß wieder nicht was ich falsch mache denn GUICtrlDelete oder GUICtrlSetState (@SW_HIDE, INPUTBOX) funktionieren beide nicht. anbei der code
Du hattest mich wegen weiterer Fragen zu diesem Thema per PN angeschrieben. - Warum?
Wir diskutieren die Fragen hier im Forum, dazu ist es da. Und dann haben auch andere User einen Nutzen davon.
Es wäre nützlich, wenn du mal dein kpl. Skript zeigst, dann könnte man genauer auf die Schwachstellen eingehen.Hier mal die Funktion, die du mir geschickt hattest. Ich habe meine Anmerkungen rein geschrieben.
AutoIt
Alles anzeigen; Grundsätzlich solltest du dir angewöhnen, alle GUI-Ctrl am Skriptanfang zu erstellen. ; Dann kannst du in Abhängigkeit von deinem Programmablauf die einzelnen Ctrl anzeigen ($GUI_SHOW) oder verstecken ($GUI_HIDE) ; oder auch deaktivieren/aktivieren ($GUI_DISABLE/$GUI_ENABLE) Func _slot_1check() Local Static $slot_1check = True $slot_1check = Not $slot_1check ; jetzt erstellst du ein Input und liest es SOFORT aus - wann bitte soll der User da eine Eingabe machen?? $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $id_slot_1r = GUICtrlRead ($id_slot_1) ; hier dasselbe nochmal $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $password_slot_1r = GUICtrlRead ($password_slot_1) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) ; Ausserdem werden jetzt bei JEDEM Aufruf der Funktion diese Inputs und Radios erstellt. ; Es passt auch nicht, dass im selben Aufruf, indem das Input erstellt/gezeigt wird, dieses gelesen wird. ; Das kann logischerweise erst im nächsten Aufruf erfolgen. Hier solltest du dringend deine Programmlogik überarbeiten If $slot_1check Then GUICtrlSetState (@SW_HIDE, $id_slot_1) ; << schau mal hier und dann zwei Zeilen weiter, dort ist es richtig angewendet GUICtrlDelete ($id_slot_1) GUICtrlSetState ($password_slot_1, $GUI_HIDE) GUICtrlSetState ($market_slot_1, $GUI_HIDE) GUICtrlSetState ($leveling_slot_1, $GUI_HIDE) GUICtrlSetPos ( $slot_2, 8, 40, 75, 25) GUICtrlSetPos ( $slot_3, 8, 72, 75, 25) GUICtrlSetPos ( $slot_4, 8, 104, 75, 25) GUICtrlSetPos ( $slot_5, 88, 8, 75, 25) GUICtrlSetPos ( $slot_6, 88, 40, 75, 25) GUICtrlSetPos ( $slot_7, 88, 72, 75, 25) GUICtrlSetPos ( $slot_8, 88, 104, 75, 25) Else $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) GUICtrlSetPos ( $slot_2, 8, 152, 75, 25) GUICtrlSetPos ( $slot_3, 8, 184, 75, 25) GUICtrlSetPos ( $slot_4, 8, 216, 75, 25) GUICtrlSetPos ( $slot_5, 136, 8, 75, 25) GUICtrlSetPos ( $slot_6, 136, 40, 75, 25) GUICtrlSetPos ( $slot_7, 136, 72, 75, 25) GUICtrlSetPos ( $slot_8, 136, 104, 75, 25) EndIf EndFunc -
Nun, dazu haben findige Programmierer die Funktionen erfunden.

Edit: Ich habe mal für dich noch ein paar Kommentare eingefügt, dann wird klar warum das funktioniert.
AutoIt
Alles anzeigenWhile 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $slot_1 _Switch() EndSwitch WEnd Func _Switch() Local Static $slot_1check = True ; statische Variable: wird beim ersten Aufruf erstellt und bleibt nach Funktionsende erhalten (Verhalten wie Globale Variable, aber nur in der Funktion gültig) $slot_1check = Not $slot_1check ; Wert der Variablen wird negiert: aus True wird False und umgekehrt, je nachdem, welchen Wert die Variable beim letzten Aufruf hatte If $slot_1check Then ; Abhängig ob True oder False wird das jeweilige Statement ausgeführt GUICtrlSetPos ( $slot_1, 162, 8, 75, 25) Else GUICtrlSetPos ( $slot_1, 8, 8, 75, 25) EndIf ; Bei Verwendung von AutoIt ab v3.3.12 kann man das If-Statement auch in einen Einzeiler stecken (Ternärer Operator) ;~ GUICtrlSetPos ( $slot_1, ($slot_1check ? 162 : 8), 8, 75, 25) EndFunc