Ich würde das völlig anders lösen. Nicht warten bis die Tasten released sind, sondern sie freigeben und Send() abschicken.
Das funktioniert besser !
Beispiel :
Python
#include <Misc.au3>
HotKeySet("{ESCAPE}", "_Exit")
; --- Variante mit SHIFT G : ---
; HotKeySet("+g", "_Userdata")
; --- Variante mit CTRL (STRG) G : ---
HotKeySet("^g", "_Userdata")
While 1 ; ESC beendet Schleife
Sleep(100)
WEnd
Exit
; ------------------------------------------------------------------------------------
; Hotkey-Funktion _Userdata :
Func _Userdata()
_SendSave("Username")
_SendSave("{TAB}")
_SendSave("{SPACE}")
_SendSave("Password")
_SendSave("{SPACE}")
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _Userdata' & @CRLF & '>Error code: ' & @error & @CRLF)
EndFunc ;==>_Userdata
; ------------------------------------------------------------------------------------
; Hotkey-Funktion _Exit :
Func _Exit()
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _Exit' & @CRLF & '>Error code: ' & @error & @CRLF)
Exit
EndFunc ;==>_Google
; ------------------------------------------------------------------------------------
Func _SendSave($_s)
Local Const $iBitMask = 0x8000
Local $hUser32 = DllOpen("user32.dll")
If BitAnd(DllCall($hUser32, "short", "GetAsyncKeyState", "int", 0x10)[0], $iBitMask) <> 0 Then _keybd_event(0x10, 0x2, $hUser32)
If BitAnd(DllCall($hUser32, "short", "GetAsyncKeyState", "int", 0x11)[0], $iBitMask) <> 0 Then _keybd_event(0x11, 0x2, $hUser32)
If BitAnd(DllCall($hUser32, "short", "GetAsyncKeyState", "int", 0x12)[0], $iBitMask) <> 0 Then _keybd_event(0x12, 0x2, $hUser32)
DllClose($hUser32)
Send($_s)
EndFunc
; ------------------------------------------------------------------------------------
Func _keybd_event($vkCode, $Flag=0, $_dll='user32.dll')
DllCall($_dll, 'int', 'keybd_event', 'int', $vkCode, 'int', 0, 'int', $Flag, 'ptr', 0)
EndFunc
Alles anzeigen
Gelegentlich wird {TAB} ignoriert. Da habe ich auf die Schnelle aber keine Systematik erkannt und das war bei dem alten Code auch bereits so.
Bei HotKeySet mit z.B. HotKeySet("{CTRLDOWN}g{CTRLUP}", "_Userdata") wird die Funktion _Userdata nicht durchlaufen.
Stattdessen werden im SciTE-Editor die Standard-Hotkeys ausgeführt, also z.B. :
g -> Goto-Fenster
q -> Auskommentierung
Ich sag mal ganz bösartig : Weil Hotkeyset und Send einfach Scheißfunktionen sind.
Nun ja, dem kann man wohl nicht völlig widersprechen.
Gruß Musashi