Autoit Problem Schleife will nicht

11/21/2012 18:22 .Lolcat#1
Hi Leute
Ich habe ein Problem
ich möchte ein script haben welches auf tastendruck eine eingabe macht (/x 1) und beim nächsten tastendruck wieder eine eingabe macht (/x 2) usw.
mein bruder hat es so versucht aber will nicht klappen er weiß nicht was er noch machen soll.

Code:
HotKeySet ("{Numpadadd}", "ssrm")
HotKeySet ("{Numpadmult}", "ende")

While 1
SLeep (1)
Wend

Func _KeyWait($sHexKey, $iTimeOut = -1, $vDLL = -1)
    Local $hDLL, $aRet, $iTimer

    If $vDLL = -1 Then $hDLL = DllOpen("user32.dll")
    If $vDLL <> -1 Then $hDLL = $vDLL
    If StringLeft($sHexKey, 2) = "0x" Then $sHexKey = StringTrimLeft($sHexKey, 2)
    If $iTimeOut <> -1 Then $iTimer = TimerInit()

    Do
        $aRet = DllCall($hDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
        If $iTimeOut <> -1 And TimerDiff($iTimer) > $iTimeOut Then ExitLoop
    Until BitAND($aRet[0], 0x8000) <> 0

    If $vDLL = -1 Then DllClose($hDLL)
EndFunc   ;==>_KeyWait

Func ssrm()
For $i=1 to 999 Step +1
Send ("t")
Sleep(250)
Send ("/x "& $i)
Sleep(250)
Send ("{Enter}")
_KeyWait("{Numpadadd}")
$i = $i + 1
Next
Endfunc

Func ende()
   Exit
EndFunc
11/21/2012 19:28 Logtetsch#2
Code:
$i = $i + 1
Kannst du dir sparren. Die Syntax ist ebenfalls verbesserungsfähig, aber das nur nebenbei.
Achja, das eigentliche Problem liegt in der _KeyWait Funktion. Schau es dir nochmal genau an.
Falls du das Problem nicht gefunden hast, helf ich dir nochmal.
11/21/2012 19:29 Georgi091#3
Guter Thread name xD
11/21/2012 20:17 .Lolcat#4
habe meinen bruder gerade gefragt er meint er hat keine ahnung er hat das ganze
[CODE]Func _KeyWait($sHexKey, $iTimeOut = -1, $vDLL = -1)
Local $hDLL, $aRet, $iTimer

If $vDLL = -1 Then $hDLL = DllOpen("user32.dll")
If $vDLL <> -1 Then $hDLL = $vDLL
If StringLeft($sHexKey, 2) = "0x" Then $sHexKey = StringTrimLeft($sHexKey, 2)
If $iTimeOut <> -1 Then $iTimer = TimerInit()

Do
$aRet = DllCall($hDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
If $iTimeOut <> -1 And TimerDiff($iTimer) > $iTimeOut Then ExitLoop
Until BitAND($aRet[0], 0x8000) <> 0

If $vDLL = -1 Then DllClose($hDLL)
EndFunc ;==>_KeyWait[CODE]
selber nur c&p
11/21/2012 20:21 K1ramoX#5
wie kompliziert du das machst o,ô

machs doch so, is ganz einfach:

Code:
HotKeySet("{Numpadadd}", "ssrm")
HotKeySet("{Numpadmult}", "_exit")

Global $count = 1

While 1
	Sleep(1)
WEnd

Func ssrm()
	Send("t")
	Sleep(250)
	Send("/x " & $count)
	Sleep(250)
	Send("{Enter}")

	$count = $count + 1
EndFunc   ;==>ssrm

Func _exit()
	Exit
EndFunc   ;==>_exit
11/21/2012 20:27 MyLifeBeLike#6
oman ich dachte die ganze zeit ich muss $i wie in java ein "int" davor machen..
oder es in der for schleife "inten" :D
11/21/2012 20:29 K1ramoX#7
Quote:
Originally Posted by MyLifeBeLike View Post
oman ich dachte die ganze zeit ich muss $i wie in java ein "int" davor machen..
oder es in der for schleife "inten" :D
autoit macht die definierung von variablen automatisch. das interessante dabei is dass man erst eine variable zB als int (1) definieren kann, dann die variable zB als string (blah123) und wenn man immernoch lust hat als bool (true, false) machen ^^ natürlich gibts noch mehr datentypen doch dass is jetzt erstmal egal, wichtig werden datentypen erst bei dll strukturen für dll calls zB

also muss man sich um variablendefinierung keine sorgen machen, können wenig fehler auftreten
11/21/2012 21:01 .Lolcat#8
danke danke danke :**
11/21/2012 21:04 MyLifeBeLike#9
ok danke :D