[Help] Mit dem GUI eine Schleife ausweichen

07/12/2010 00:36 Robin,249#1
Ich möchte mit einem GUI einen einfachen KlickBot machen. Am liebste hätte ich ihn mit HotkeySet's gemacht, aber einige Spiele Blocken das *böse nach S4L schau*.

Ich habe schonmal Grundcode aufgelistet, aber er funzt net, da die Schleife die Pausetaste sozusagen ausschaltet.
PHP Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 GUICreate("Bot"331130192124)
$Button1 GUICtrlCreateButton("Start"881531050)
$Button2 GUICtrlCreateButton("Pause"16881451050)
GUICtrlSetState(-1$GUI_DISABLE)
GUISetState(@SW_SHOW)

While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$Button1
            $i
=0
            GUICtrlSetState
($Button1$GUI_DISABLE)
            
GUICtrlSetState($Button2$GUI_ENABLE)
            While 
$i=0
            MouseClick
("left")
            
Sleep(1000)
            
WEnd
        
Case $Button2
            $i
=1
            GUICtrlSetState
($Button1$GUI_ENABLE)
            
GUICtrlSetState($Button2$GUI_DISABLE)
            While 
$i=1
            Sleep
(1000)
            
Wend
    
EndSwitch
WEnd 
Wäre froh, wenn mir wer helfen würde.

MFG: Robin
07/12/2010 01:18 bladerofdarknes#2
PHP Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 GUICreate("Bot"331130192124)
$Button1 GUICtrlCreateButton("Start"881531050)
$Button2 GUICtrlCreateButton("Pause"16881451050)
GUICtrlSetState(-1$GUI_DISABLE)
GUISetState(@SW_SHOW)

While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$Button1
            $i
=0
            GUICtrlSetState
($Button1$GUI_DISABLE)
            
GUICtrlSetState($Button2$GUI_ENABLE)
            While 
$i=0
            MouseClick
("left")
            
Sleep(1000)
            
WEnd
        
Case $Button2
           _pause
()
    EndSwitch
WEnd

Func _pause
()
while 
1
sleep
(50)
WEnd
EndFunc 
sollte funktionieren, kann sein das etwas falsch ist, bin etwas betrunken

€: das mit dem disable der buttons solltest du eig. allein lösen können
07/12/2010 02:00 .nAno#3
Dein Code hat exakt die selbe Funktionalität wie der seine mit dem einzigen unterschied, dass du deine Pause Schleife (die alles erst zum hängen bringt) in einer extra Funktion untergebracht hast
Richtig würde es(wenn ich dich jetzt wirklich richtig verstanden habe) so aussehen:

PHP Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 GUICreate("Bot"331130192124)
$Button1 GUICtrlCreateButton("Start"881531050)
$Button2 GUICtrlCreateButton("Pause"16881451050)
GUICtrlSetState(-1$GUI_DISABLE)
GUISetState(@SW_SHOW)

While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$Button1
            $i
=0
            GUICtrlSetState
($Button1$GUI_DISABLE)
            
GUICtrlSetState($Button2$GUI_ENABLE)
            
$continueBotting True
            
While $continueBotting
            MouseClick
("left")
            
Sleep(1000)
            
$continueBotting trackUserInput($Button1)
            
WEnd
        
Case $Button2
            $i
=1
            GUICtrlSetState
($Button1$GUI_ENABLE)
            
GUICtrlSetState($Button2$GUI_DISABLE)
            
$continue True
            
While $continue
            Sleep
(1000)
            
$continue trackUserInput($Button2)
            
Wend
    
EndSwitch
WEnd

Func trackUserInput
($trackedID)
$msg=GuiGetMsg()

If 
$msg <> And $msg <> $trackedID Then ;Did any notified object fire?
Return 
False ;Yes!
Else
Return 
True ;No!
EndIf

EndFunc 
Das ist eine relative performante Funktion, die eine Schleife ohne großen Firlefanz unterbricht falls nötig, ohne lange Überprüfungen auszuführen ;)
Da dein Bot wegen der ja recht langen Wartezeiten eh nicht sehr schnell arbeitet macht es kaum nen Unterschied, allerdings ist der Code so sauberer und vllt. hilfts auch wem anders^^

Zu deinem Problem mit HotkeySet, schau dir mal in der Misc.au3 die _IsPressed Funktion an, mit nem bisschen If-Gedruckse ist das besser als jede HotkeySet-Anwendung ;)

Sollte ich dir irg. welche Syntaxfehler eingebaut haben schrei ruhig ich hab jetzt ne gut Weile schon kein AutoIT mehr geschrieben...
07/12/2010 07:36 Robin,249#4
@bladerofdarknes Funzt nicht und kann auch gar nicht funkzionieren. In einer While drinne kann er nicht zurück zu Switch.

@.nAno deines sieht viel versprechend aus, aber funzt auch nicht. Muss ich vlt noch ne Include beinehmen?

Nja für beide mal ein THX für schnelle antwort.


€: habe mal bissel die Variablen umbenannt. Jetzt gehts mehr oder weniger.
07/12/2010 10:58 .nAno#5
entschuldige, hab die Initialisierung der Variablen $botting bzw. $continueBotting vergessen, ich sollte so spät nichtmehr coden^^

Ich hab den korrekten Code editiert
07/12/2010 11:21 bladerofdarknes#6
du musst auch wieder auf start drücken :p