[Hilfe]Kompliziertes Problem :O

08/12/2011 08:29 freehuntx#1
Hey ich habe grade aus spaß folgendes vor.

Ich möchte, dass durch halten 2 verschiedener tasten, verschiedene tastenfunktionen an ein Spiel Gesendet werden.

z.B. Ich halte die Taste M, und es soll an das fenster eines Spieles folgendes Gesendet werden.

D taste down
Leertaste down
e taste down
Rechte maustaste down

und die linke maus soll gespammt werden.

Im Umkehr schluss, soll sobald die taste nicht gedrückt is, keine dieser funktionen erfolgen, aber die entsprechenden tasten sollen immer noch im spiel funktionieren, d.H. key up in eine schleife machen is nicht, sonst kann man ingame die taste nicht benutzen.

Ich steh vor einem rätsel wie das funktionieren soll.

Und WICHTIG ist, dass die tasten down sind, also nicht nur ein einer schleife gesendet werden.

Ich habe einen weg probiert, aber bei dem wird die key up kommands in einer schleife ausgeführt, und die tasten sind nutzlos.

Hoffe jemand hat ne ahnung wie/ob das funktionieren soll.
08/12/2011 09:34 buFFy!#2
komische problembeschreibung. ich interpretier da immer komische dinge rein ..
könntest du das gemeint haben?

Code:
HotKeySet("{M}", "Main")

Global $Spam = 0

AdlibRegister("Left", 10)

Func Main()
	Send("{SPACE down}")
	Send("{D down}")
	Send("{E down}")
	MouseDown("right")

	$Spam = 1
EndFunc

Func Left()
	If $Spam Then MouseClick("left")
EndFunc

While 1
	Sleep(100)
WEnd
08/12/2011 09:37 freehuntx#3
Nein das ist ja mit Hotkey, wo nur durch einmaliges drücken die funktion ausgeführt wird, und nicht gesteuert werden kann, wann diese aufhören soll.

Ich habe es mit While IsPressed gemacht, aber ich weiß einfach nicht wie ich die entsprechenden tasten auf up stellen soll, und das ohne eine schleife, damit man diese ingame noch benutzen kann.
08/12/2011 10:37 Toastiix#4
buffy`s lösung ist doch genau das was du willst
.....Durch das drücken wird diese function wie du gesehen hast doch nur einmal ausgeführt,durch nochmaliges drücken wird es wieder ausgeführt oder



*Edit
Sorry hab mich vertan :/
08/12/2011 11:03 butter123#5
du fragst in einer whileschleife ob der key down ist. am ender der schleife setzt du $a = true

dann eine schleife in der du fragst ob der key up ist und gleichzeitig $a = true, dann soller up an die tasten senden und danach $a = false setzen.

wird also in der schleife nur ausgeführt wenn zuvor m gedrückt wurde, so wrid nciht die ganze zeit up gesendet.


nur im kopf entworfen, keine garantie :)
08/12/2011 12:30 buFFy!#6
Quote:
Originally Posted by freehuntx View Post
Nein das ist ja mit Hotkey, wo nur durch einmaliges drücken die funktion ausgeführt wird, und nicht gesteuert werden kann, wann diese aufhören soll.

Ich habe es mit While IsPressed gemacht, aber ich weiß einfach nicht wie ich die entsprechenden tasten auf up stellen soll, und das ohne eine schleife, damit man diese ingame noch benutzen kann.
dann eben so?
Code:
HotKeySet("{m}", "Main")

Global $Spam = 0

AdlibRegister("Left", 10)

Func Main()
	If $Spam = 0 Then
		Send("{SPACE down}")
		Send("{D down}")
		Send("{E down}")
		MouseDown("right")
	ElseIf $Spam = 1 Then
		Send("{SPACE up}")
		Send("{D up}")
		Send("{E up}")
		MouseUp("right")
	EndIf

	$Spam = Not $Spam
EndFunc   ;==>Main

Func Left()
	If $Spam Then MouseClick("left")
EndFunc   ;==>Left

While 1
	Sleep(100)
WEnd
08/12/2011 13:08 butter123#7
dein programm benutz den hotkey als schalter für an und aus, er wollte es aber so, dass nur solange gesendet wird, bis der key losgelassen wird :)
08/12/2011 13:37 buFFy!#8
Code:
$dll = DllOpen('user32.dll')
If $dll = -1 Then Exit

AdlibRegister("Left", 10)

Global Const $VK_M = 0x4D
Global $Spam = 0

While 1
	If _IsPressed($VK_M, $dll) Then
		Send("{SPACE down}")
		Send("{D down}")
		Send("{E down}")
		MouseDown("right")
		$Spam = 1

		While _IsPressed($VK_M, $dll)
			Sleep(10)
		WEnd

		Send("{SPACE up}")
		Send("{D up}")
		Send("{E up}")
		MouseUp("right")
		$Spam = 0
	EndIf
	Sleep(10)
WEnd

Func Left()
	If $Spam Then MouseClick("left")
EndFunc   ;==>Left
??
08/12/2011 14:38 omer36#9
Quote:
Originally Posted by freehuntx View Post
Hey ich habe grade aus spaß folgendes vor.

Ich möchte, dass durch halten 2 verschiedener tasten, verschiedene tastenfunktionen an ein Spiel Gesendet werden.

z.B. Ich halte die Taste M, und es soll an das fenster eines Spieles folgendes Gesendet werden.

D taste down
Leertaste down
e taste down
Rechte maustaste down

und die linke maus soll gespammt werden.

Im Umkehr schluss, soll sobald die taste nicht gedrückt is, keine dieser funktionen erfolgen, aber die entsprechenden tasten sollen immer noch im spiel funktionieren, d.H. key up in eine schleife machen is nicht, sonst kann man ingame die taste nicht benutzen.

Ich steh vor einem rätsel wie das funktionieren soll.

Und WICHTIG ist, dass die tasten down sind, also nicht nur ein einer schleife gesendet werden.

Ich habe einen weg probiert, aber bei dem wird die key up kommands in einer schleife ausgeführt, und die tasten sind nutzlos.

Hoffe jemand hat ne ahnung wie/ob das funktionieren soll.
hmm ich habs so verstanden:
PHP Code:
#Include <Misc.au3>

$dll DllOpen("user32.dll")

$go False

While Sleep(10)
    If 
_IsPressed("4D"$dllThen
        Send
("{D down}")
        
Send("{SPACE down}")
        
Send("{E down}")
        
MouseDown("right")
        
MouseClick("left")
        
$go True
    
Else
        If 
$go True Then
            Send
("{D up}")
            
Send("{SPACE up}")
            
Send("{E up}")
            
MouseUp("right")
            
$go False
        
EndIf
    EndIf
WEnd 
08/13/2011 07:58 freehuntx#10
Quote:
Originally Posted by omer36 View Post
hmm ich habs so verstanden:
PHP Code:
#Include <Misc.au3>

$dll DllOpen("user32.dll")

$go False

While Sleep(10)
    If 
_IsPressed("4D"$dllThen
        Send
("{D down}")
        
Send("{SPACE down}")
        
Send("{E down}")
        
MouseDown("right")
        
MouseClick("left")
        
$go True
    
Else
        If 
$go True Then
            Send
("{D up}")
            
Send("{SPACE up}")
            
Send("{E up}")
            
MouseUp("right")
            
$go False
        
EndIf
    EndIf
WEnd 
Genau so hatte ich es selber gemacht, aber da ist das problem, dass wenn die bestimmte Taste nicht gedrückt ist, die entsprechenden tasten auf up gesetzt werden, und das in einer schleife.

Wenn man nun ingame z.B. e oder space drücken will, wird das nicht flüssig funktionieren, dar diese taste von autoit auf up gesetzt wird.

Das wollte ich egendlich beheben aber hab wirklich keine ahnung wie das funzen soll.
08/13/2011 08:44 buFFy!#11
ich habs doch geschrieben xD

das geht mit while _ispressed(taste) { sleep(x) };