Hilfe

01/01/2012 19:29 Lavora#1
AutoItSetOption("WinTitleMatchMode", 4)
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
$windowname="World of Warcraft"
$handle = WinGetHandle($windowname, "")
If @error Then
MsgBox(4096, "Error", "Could not find the correct window")
Else

while 1
ControlSend($windowname,'','',"Hi")
sleep(1500)
WEnd

Func TogglePause()
$Paused = Not $Paused
While $Paused
sleep(100)
WEnd
EndFunc

Func Terminate()
Exit 0
EndFunc

EndIf





Beim starten kommt die meldung:
Line 16 (XXXXXXXX) :
Func TogglePause()
Error: "If" statement has no matching "EndIf" statement.
01/01/2012 19:33 lolkop#2
du kannst eine funktion nicht optional deklarieren.

funktions-definitionen immer ausserhalb von abfragen und schleifen anordnen.
01/01/2012 19:37 Njahs#3
Deklariere die Funktionen em Ende des Scripts

PHP Code:
AutoItSetOption("WinTitleMatchMode"4)

Global 
$Paused$windowname "World of Warcraft"$handle WinGetHandle($windowname"")

HotKeySet("{PAUSE}""TogglePause")

HotKeySet("{ESC}""Terminate")

   If 
$handle "" or @error Then
      MsgBox
(4096"Error""Could not find the correct window")
   Else
      while 
1
         ControlSend
($windowname,'','',"Hi")
         
sleep(1500)
      
WEnd
EndIf

Func Terminate()
   Exit
EndFunc

Func TogglePause
()
   If 
$Paused False then
      $Paused 
True
   
Elseif $Paused True then
      $Paused 
False
   
Endif
      While 
$Paused True
         sleep
(100)
      
WEnd
Endfunc 
01/01/2012 19:53 omer36#4
Quote:
If $Paused = False then
$Paused = True
Elseif $Paused = True then
$Paused = False
Endif
oder gleich:
$Pause = Not $Pause
01/01/2012 23:56 bollen#5
Code:
[FONT=Courier New][COLOR=#0000bb]Func TogglePause[/COLOR][/FONT][FONT=Courier New][COLOR=#007700]()[/COLOR][/FONT]
[FONT=Courier New][COLOR=#007700]If [/COLOR][COLOR=#0000bb]$Paused [/COLOR][COLOR=#007700]= [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]False then[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]$Paused [/COLOR][COLOR=#007700]= [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]True[/COLOR][/FONT]
[FONT=Courier New][COLOR=#007700]Elseif [/COLOR][COLOR=#0000bb]$Paused [/COLOR][COLOR=#007700]= [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]True then[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]$Paused [/COLOR][COLOR=#007700]= [/COLOR][/FONT][COLOR=#0000bb][FONT=Courier New]False[/FONT][/COLOR]
[FONT=Courier New][COLOR=#007700]Endif[/COLOR][/FONT]
[FONT=Courier New][COLOR=#007700]While [/COLOR][COLOR=#0000bb]$Paused [/COLOR][COLOR=#007700]= [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]True[/COLOR][/FONT]
[FONT=Courier New][COLOR=#0000bb]sleep[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]100[/COLOR][/FONT][COLOR=#007700][FONT=Courier New])[/FONT][/COLOR]
[COLOR=#0000bb][FONT=Courier New]WEnd[/FONT][/COLOR]
[FONT=Courier New][COLOR=#0000bb]Endfunc [/COLOR][/FONT]
so wie ich das sehe (verbesser mich wens falsch ist) ist das eine pause Funktion die ein und ausgeschalten werden (kann/sollte).
Sie lässt sich jedoch nur ein und nicht mehr abschalten da $Pause in der While Schleife nicht mehr abgefragt wird ändert sich der Zustand auch nicht mehr.
Du musst dort in die Schleife eine Abfrage einbauen
Code:
[FONT=Courier New][COLOR=#007700]While [/COLOR][COLOR=#0000bb]$Paused [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]True[/COLOR][/FONT]
[COLOR=#0000bb][FONT=Courier New][COLOR=#0000bb][COLOR=red]if .... then $pause=False[/COLOR][/COLOR][/FONT]
[COLOR=#0000bb][FONT=Courier New]sleep[/FONT][/COLOR][FONT=Courier New][COLOR=#007700]([/COLOR][COLOR=#0000bb]100[/COLOR][/FONT][COLOR=#007700][FONT=Courier New])[/FONT][/COLOR]
[COLOR=#0000bb][FONT=Courier New]WEnd[/FONT][/COLOR]
[/COLOR]
01/02/2012 02:12 lolkop#6
hotkeys funktionieren in autoit als interrupts. dh das script springt aus der aktuellen schleife/funktion/abfrage, führt die hotkey funktion aus, und setzt die schleife/funktion/abfrage weiter fort.

dh, wird die pausefunktion aufgerufen, so wird der $pause zustand neu gesetzt, und die schleife wird mit dem neuen $pause zustand fortgesetzt. womit der schleifenkopf bei $pause=false direkt aus der schleife springt.

dennoch ist diese, unnötig komplizierte variante einer pause funktion, sehr ineffektiv und sollte immer durch eine einfache zustandswechselform, gepaart mit der zustandsabfrage in der main-schleife ersetzt werden.
01/02/2012 13:43 Lavora#7
ok danke leute.