(Wahrscheinlich) While Problem

  • Hi, also ich hab ein Problem wenn ich zB "While 1" benutze, was ich aber muss, da ich ein Menu erstellen muss/will.

    Ich denke das hängt mit den Arrays zusammen aber ich zeig euch einfach mal das Script.

    Was passiert ist entweder, das TrayIcon wird gestartet, aber das Fenster nicht ODER er macht 300+ Prozesse von zB Settings.exe (Die in der While Schleife ist.)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1); Den OnEvent-Mode benutzen

    [/autoit] [autoit][/autoit] [autoit]

    Global $iCount = 4 ; Anzahl der Buttons
    Global $ahButton[$iCount], $abOnOff[$iCount], $aPID[$iCount], $aProg[$iCount], $aProgName[$iCount], $ahIcon[$iCount]

    [/autoit] [autoit][/autoit] [autoit]

    $aProg[0] = 'farm\job.exe'
    $aProg[1] = 'beta\Alert_HP.exe'
    $aProg[2] = 'beta\Alert_MP.exe'
    $aProg[3] = 'beta\Alert_SP.exe'

    [/autoit] [autoit][/autoit] [autoit]

    $aProgName[0] = '[*~JobLevel~*]'
    $aProgName[1] = '[~*Alarm.HP*~]'
    $aProgName[2] = '[~*Alarm.MP*~]'
    $aProgName[3] = '[~*Alarm.SP*~]'

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $aPos[$iCount][4] = [ _
    [002, 040, 080, 020], _
    [490, 220, 080, 025], _
    [490, 250, 080, 025], _
    [490, 280, 080, 025] _
    ]
    Global $aIconPath[2] = [@ScriptDir & '\mats\off.ico', @ScriptDir & '\mats\on.ico']

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate('PC_Crapper', 640, 422)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("*~Crappy~*", 260, 10)
    GUICtrlCreateLabel("<=200 Targets p.sec.", 115, 45)
    GUICtrlCreateLabel("(Close / return ", 215, 255)
    GUICtrlCreateLabel("(Close / return", 215, 290)
    GUICtrlCreateLabel("<BETA", 600, 223.5)
    GUICtrlCreateLabel("<BETA", 600, 253.5)
    GUICtrlCreateLabel("<BETA", 600, 283.5)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $iCount - 1
    $ahButton[$i] = GUICtrlCreateButton($aProgName[$i], $aPos[$i][0], $aPos[$i][1], 80, 20)
    GUICtrlSetOnEvent(-1, '_Switch')
    $abOnOff[$i] = False
    $ahIcon[$i] = GUICtrlCreateIcon($aIconPath[0], -1, $aPos[$i][0] + 85, $aPos[$i][1] - 2, 24, 24)
    Next
    GUICtrlCreateButton('[~*new choise*~]', 505, 10, 120, 20)
    GUICtrlSetOnEvent(-1, '_StopAll2')
    GUICtrlCreateButton('[~*restart*~]', 505, 30, 120, 20)
    GUICtrlSetOnEvent(-1, '_restart')
    GUICtrlCreateButton('[~*Standart*~]', 20, 10, 120, 20)
    GUICtrlSetOnEvent(-1, '_Main')
    GUICtrlCreateButton('[~*Exit VisiBot*~]', 240, 270, 120, 20)
    GUICtrlSetOnEvent(-1, '_StopAll')
    ;***************HIERUM GEHT ES*******************
    $MainMenu = GUICtrlCreateMenu("Main")
    $MainMenuSettings = GUICtrlCreateMenuItem("Options", $MainMenu)
    $MainMenuUpdate = GUICtrlCreateMenuItem("Update", $MainMenu)
    GUICtrlCreateMenuItem("", $MainMenu)
    $MainMenuQuit = GuiCtrlCreateMenuItem("Quit", $MainMenu)
    $helpmenu = GuiCtrlCreateMenu ("?")
    $aboutitem = GuiCtrlCreateMenuitem ("About",$helpmenu)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    select
    Case $MainMenuSettings
    run("settings.exe")
    Case $MainMenuUpdate
    run("updater.exe")
    Case $MainMenuQuit
    ExitLoop
    Exit
    Case $aboutitem
    msgbox (0,"About","?")
    EndSelect
    WEnd
    ;***************************************************************************
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Sleep(20)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    _StopAll2()
    run("overlay_int.exe")
    exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _restart()
    _StopAll2()
    run("farm_int.exe")
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartAll()
    For $i = 0 To $iCount - 1
    If Not $aPID[$i] Then $aPID[$i] = Run($aProg[$i])
    $abOnOff[$i] = True
    GUICtrlSetImage($ahIcon[$i], $aIconPath[1])
    soundplay("sound\ac.wav")
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopAll()
    For $i = 0 To $iCount - 1
    If $aPID[$i] Then
    ProcessClose($aPID[$i])
    $aPID[$i] = 0
    EndIf
    If $abOnOff[$i] Then
    $abOnOff[$i] = False
    GUICtrlSetImage($ahIcon[$i], $aIconPath[0])
    soundplay("sound\de_ac.wav")
    EndIf
    Next
    exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopAll2()
    For $i = 0 To $iCount - 1
    If $aPID[$i] Then
    ProcessClose($aPID[$i])
    $aPID[$i] = 0
    EndIf
    If $abOnOff[$i] Then
    $abOnOff[$i] = False
    GUICtrlSetImage($ahIcon[$i], $aIconPath[0])
    soundplay("sound\de_ac.wav")
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Switch()
    Local $i = (@GUI_CtrlId - $ahButton[0]) / 2
    $abOnOff[$i] = Not $abOnOff[$i]
    Switch $abOnOff[$i]
    Case True
    GUICtrlSetImage($ahIcon[$i], $aIconPath[1])
    $aPID[$i] = Run($aProg[$i])
    soundplay("sound\ac.wav")
    Case False
    GUICtrlSetImage($ahIcon[$i], $aIconPath[0])
    ProcessClose($aPID[$i])
    $aPID[$i] = 0
    soundplay("sound\de_ac.wav")
    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von vism (6. Januar 2009 um 14:12)

    • Offizieller Beitrag

    Hab dein Script mal kurz überflogen. Du erstellst in deiner Gui ein Menü, und fragst es falsch ab. Bein GuiOnEventMode mußt du auch für die Menüeintrage mit GuiCtrlSetOnEvent eine Func aufrufen. Deine Abfrage in de While Schleife ist übrigen total falsch , würde auch bei GuiGetMsg abfrage nicht gehen .

    Edit : @mehrsolala Auch wenn die Gui für einen Bot zu sein scheint, das Script selbst ist keine Bot .

    EDIt2: Deine Gui wird nicht angezeigt, weil du nicht über die 1. While wend schleife hinwegkommst . Dein GuiSetState wird erst nach abarbeiten der schleife aufgerufen .

  • Du rufst die GUI nicht auf und die zweite while Schleife kannste löschen.

    [autoit]

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    switch $msg
    Case $MainMenuSettings
    run("settings.exe")
    Case $MainMenuUpdate
    run("updater.exe")
    Case $MainMenuQuit
    ExitLoop
    Exit
    Case $aboutitem
    msgbox (0,"About","?")
    EndSwitch
    WEnd

    [/autoit]
  • Najoa also wenigstens schmierts jetzt nichtmehr ab, allerdings lässt sich kein Prozess über das Menu starten, selbst die Messagebox net. *~mhhh

    Edit: Also, wenn ich

    [autoit]

    Opt('GUIOnEventMode', 1)

    [/autoit]

    von 1, auf 0 setz. Geht das Menu. Allerdings funzen dann die Action-Momente nicht. (Icon-switch usw.)

    Einmal editiert, zuletzt von vism (6. Januar 2009 um 11:53)

  • Zitat

    If the GUIOnEventMode option is set to 1 then the return from GUIGetMsg is always 0 and the @error is set to 1.


    Dann musst du sie auch mit in der Schleife abfragen es geht immer bloß eins von beiden.

  • Also heißt das jetz ich hab keine Chance Menu und die Action-Momente zu nutzen? Oder muss ich da irgendwas so umschreiben, das es funktioniert. Wie in der Schleife abfragen? Da bräucht ich mal kurz Nachhilfe. :D

    • Offizieller Beitrag

    Ist das so Schwer ? Wenn du nicht soviel Zeit für das Botcoding verwenden würdest und lieber mal dich auf die GUI konzentrieren würdest wäre besser.

    Da ich aber heute meinen Sozialen habe , bitteschön :

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1); Den OnEvent-Mode benutzen

    [/autoit] [autoit][/autoit] [autoit]

    Global $iCount = 4 ; Anzahl der Buttons
    Global $ahButton[$iCount], $abOnOff[$iCount], $aPID[$iCount], $aProg[$iCount], $aProgName[$iCount], $ahIcon[$iCount]

    [/autoit] [autoit][/autoit] [autoit]

    $aProg[0] = 'farm\job.exe'
    $aProg[1] = 'beta\Alert_HP.exe'
    $aProg[2] = 'beta\Alert_MP.exe'
    $aProg[3] = 'beta\Alert_SP.exe'

    [/autoit] [autoit][/autoit] [autoit]

    $aProgName[0] = '[*~JobLevel~*]'
    $aProgName[1] = '[~*Alarm.HP*~]'
    $aProgName[2] = '[~*Alarm.MP*~]'
    $aProgName[3] = '[~*Alarm.SP*~]'

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $aPos[$iCount][4] = [ _
    [002, 040, 080, 020], _
    [490, 220, 080, 025], _
    [490, 250, 080, 025], _
    [490, 280, 080, 025] _
    ]
    Global $aIconPath[2] = [@ScriptDir & '\mats\off.ico', @ScriptDir & '\mats\on.ico']

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate('PC_Crapper', 640, 422)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("*~Crappy~*", 260, 10)
    GUICtrlCreateLabel("<=200 Targets p.sec.", 115, 45)
    GUICtrlCreateLabel("(Close / return ", 215, 255)
    GUICtrlCreateLabel("(Close / return", 215, 290)
    GUICtrlCreateLabel("<BETA", 600, 223.5)
    GUICtrlCreateLabel("<BETA", 600, 253.5)
    GUICtrlCreateLabel("<BETA", 600, 283.5)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $iCount - 1
    $ahButton[$i] = GUICtrlCreateButton($aProgName[$i], $aPos[$i][0], $aPos[$i][1], 80, 20)
    GUICtrlSetOnEvent(-1, '_Switch')
    $abOnOff[$i] = False
    $ahIcon[$i] = GUICtrlCreateIcon($aIconPath[0], -1, $aPos[$i][0] + 85, $aPos[$i][1] - 2, 24, 24)
    Next
    GUICtrlCreateButton('[~*new choise*~]', 505, 10, 120, 20)
    GUICtrlSetOnEvent(-1, '_StopAll2')
    GUICtrlCreateButton('[~*restart*~]', 505, 30, 120, 20)
    GUICtrlSetOnEvent(-1, '_restart')
    GUICtrlCreateButton('[~*Standart*~]', 20, 10, 120, 20)
    GUICtrlSetOnEvent(-1, '_Main')
    GUICtrlCreateButton('[~*Exit VisiBot*~]', 240, 270, 120, 20)
    GUICtrlSetOnEvent(-1, '_StopAll')
    ;***************HIERUM GEHT ES*******************
    $MainMenu = GUICtrlCreateMenu("Main")
    $MainMenuSettings = GUICtrlCreateMenuItem("Options", $MainMenu)
    GUICtrlSetOnEvent(-1,"MEintrag1")
    $MainMenuUpdate = GUICtrlCreateMenuItem("Update", $MainMenu)
    GUICtrlSetOnEvent(-1,"MEintrag2")
    GUICtrlCreateMenuItem("", $MainMenu)
    $MainMenuQuit = GuiCtrlCreateMenuItem("Quit", $MainMenu)
    GUICtrlSetOnEvent(-1,"MEintrag3")
    $helpmenu = GuiCtrlCreateMenu ("?")
    $aboutitem = GuiCtrlCreateMenuitem ("About",$helpmenu)
    GUICtrlSetOnEvent(-1,"MEintrag4")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Sleep(20)
    WEnd
    Func MEintrag1()
    ;~ run("settings.exe")
    MsgBox(0,"Info","Options wurde ausgewählt")
    EndFunc
    Func MEintrag2()
    MsgBox(0,"Info","Update wurde ausgewählt")
    ;~ run("updater.exe")
    EndFunc
    Func MEintrag3()
    MsgBox(0,"Info","Quit wurde ausgewählt")
    ;~ Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func MEintrag4()
    MsgBox(0,"Info","About wurde ausgewählt")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    _StopAll2()
    run("overlay_int.exe")
    exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _restart()
    _StopAll2()
    run("farm_int.exe")
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartAll()
    For $i = 0 To $iCount - 1
    If Not $aPID[$i] Then $aPID[$i] = Run($aProg[$i])
    $abOnOff[$i] = True
    GUICtrlSetImage($ahIcon[$i], $aIconPath[1])
    soundplay("sound\ac.wav")
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopAll()
    For $i = 0 To $iCount - 1
    If $aPID[$i] Then
    ProcessClose($aPID[$i])
    $aPID[$i] = 0
    EndIf
    If $abOnOff[$i] Then
    $abOnOff[$i] = False
    GUICtrlSetImage($ahIcon[$i], $aIconPath[0])
    soundplay("sound\de_ac.wav")
    EndIf
    Next
    exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StopAll2()
    For $i = 0 To $iCount - 1
    If $aPID[$i] Then
    ProcessClose($aPID[$i])
    $aPID[$i] = 0
    EndIf
    If $abOnOff[$i] Then
    $abOnOff[$i] = False
    GUICtrlSetImage($ahIcon[$i], $aIconPath[0])
    soundplay("sound\de_ac.wav")
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Switch()
    Local $i = (@GUI_CtrlId - $ahButton[0]) / 2
    $abOnOff[$i] = Not $abOnOff[$i]
    Switch $abOnOff[$i]
    Case True
    GUICtrlSetImage($ahIcon[$i], $aIconPath[1])
    $aPID[$i] = Run($aProg[$i])
    soundplay("sound\ac.wav")
    Case False
    GUICtrlSetImage($ahIcon[$i], $aIconPath[0])
    ProcessClose($aPID[$i])
    $aPID[$i] = 0
    soundplay("sound\de_ac.wav")
    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit]

    Bei Run solltest du einen Pfad festlegen. Und wenn du nicht willst das während die Externen Programme laufen die Gui bedient wird nimm RunWait.

  • Also heißt das jetz ich hab keine Chance Menu und die Action-Momente zu nutzen? Oder muss ich da irgendwas so umschreiben, das es funktioniert. Wie in der Schleife abfragen? Da bräucht ich mal kurz Nachhilfe. :D


    du kannst beides nutzen, aber du kannst nicht oneventmode und guigetmessage in einem Script nehmen
    Um die Buttons in der Schleife abzufragen machste z.B. statt

    [autoit]

    GUICtrlCreateButton('[~*new choise*~]', 505, 10, 120, 20)
    GUICtrlSetOnEvent(-1, '_StopAll2')

    [/autoit][autoit]

    $new_choice = GUICtrlCreateButton('[~*new choise*~]', 505, 10, 120, 20)

    [/autoit]


    und um das Teil in der Schleife abzufragen machst einen neuen Case

    [autoit]

    Case $new_choice
    _StopAll2()

    [/autoit]