Soo, ich habe momentan ein recht merkwürdiges Problem, für das ich keine Lösung finde...
Problem: Ein bestimmtes Spiel von mir möchte unbedingt die linke Shift-Taste gedrückt haben um eine bestimmte Aktion auszuführen. Mir wäre es aber lieber, wenn ich dafür die rechte Shift-Taste belegen könnte.
Gut, dachte ich mir, dann schreibe ich einfach ein AutoIt-Skript, was beim Drücken der rechten Shift-Taste mittels "send" die linke Shift-Taste benutzt. Dummerweise muss die Taste im Spiel auch gedrückt bleiben, sodass ich "up/down" mit dem send-Befehl anwenden muss.
Nun denn, hier mal mein Quellcode:
[autoit]#include <Misc.au3>
[/autoit][autoit][/autoit][autoit]$dll = DllOpen("user32.dll")
[/autoit][autoit][/autoit][autoit]while 1
If _IsPressed("A1", $dll) Then
Send("{lshift down}")
Do
sleep(100)
Until _IsPressed("A1", $dll)
Send("{lshift up}")
EndIf
Sleep(100)
WEnd
Ansich würde das Stückchen Quellcode einwandfrei funktionieren - wenn da nicht das Loslassen der Taste wäre! Aus irgendeinem Grund benimmt sich das Skript so, als würde ich die - trotz explizitem Befehl in Zeile 11 - linke Shift-Taste gedrückthalten. Sogar wenn ich das Skript dann beende, benimmt sich Windows so, als sei die linke Shift-Taste gedrückt. Nur wenn ich selbst per Hand (im wahrsten Wortsinn) die Taste einmal drücke und wieder loslasse, benimmt sich auch Windows so, als würde die Taste nichtmehr gedrückt.
Das Phänomen lässt sich ganz einfach praktisch nachvollziehen:
* Ich starte das Skript
* Ich starte "Notepad"
* Ich schreibe irgendeinen Müll in Notepad (zwanzig Mal den Buchstaben "a")
* Ich drücke die rechte Shift-Taste und lasse sie wieder los
* (Optional: Ich beende das Skript per Rechtsklick aufs Trayicon-Symbol -> "Exit")
* Ich klicke mit der Maus ein wenig im Text herum
|-> Der Text wird, ausgehend von der letzten Cursor-Position, markiert - ohne, dass irgendeine Shift-Taste gedrückt wäre! Erst, wenn ich selbst per Hand die linke Shift-Taste drücke und wieder loslasse, wird der Text nichtmehr markiert.
Tjoar, Frage: Was ist da los? Verwende ich irgendeinen Befehl nicht richtig? Bin ich gar auf irgendeinen Bug o.Ä. gestoßen? Und das Wichtigste: Wie könnte ich dieses Problem lösen?
Wär super, wenn mir jemand helfen könnte!
Mein System ist btw. ein Windows Seven 64bit und DualCore-CPU, falls es wichtig wäre...