Achso, langsam blicke ich durch. Vielen Dank.
Hier der aktualisierte Plan für morgen:
1. Host-App startet
DLL und die Hooks
2.
DLL erkennt einen Tastatur-Tastendruck (
Ausnahme Strg oder Shift) und sagt der Host-App "WM_ANYKEYPRESSED", die Host-App merkt sich den GetTickCount()
3.
DLL erkennt einen Maus-Tastendruck und fragt Host-APP "WM_LMB_KEY_CONFIRM", was dann von der Host-App mit 10 oder 0/Irgendwas/Timeout beantwortet wird, diese Entscheidung ist abhängig vom Abstand zum zuvor gemerkten GetTickCount(), der größer oder kleinergleich 3 Sekunden ist
4a. Wird nicht 10 geantwortet, dann akzeptiert die
DLL das Mausereignis
4b. Wird 10 geantwortet, dann verwirft die
DLL das Mausereignis
und sendet an die Host-App "WM_LMB_LOCKED"
5. Host-App
reagiert auf "WM_LMB_LOCKED" und setzt den Systemmauszeiger auf crNo (hier mein anderes
Problem)
6. Die Host-App setzt den 3-Sekunden-VCL-Timer zurück bzw. startet ihn neu.
7. Schlägt der VCL-Timer zu, deaktiviert er sich selbst und der Systemmauszeiger wird wieder neutralisiert. Zu diesem Zeitpunkt ist dann auch der Abstand zwischen den GetTickCount() wieder größer als 3 Sekunden und somit kann der Benutzer auch wieder klicken (VCL-Timer ist unabhängig von der Entscheidung, ob Klick erlaubt ist oder nicht und ist GUI Bestandteil)
Ereignisse, die wegfallen: WM_LMB_UNLOCKED (-> nun im Timer der Host-App) und WM_LMB_BLOCKED (Host-App reagiert auf WM_LMB_KEY_CONFIRM und führt selbst ein grafisches Ereignis aus, wenn ein Klick verboten ist), WM_LMB_LOCKED (Die Host-App erkennt den illegalen Klick und sendet die Antwort 10 für die Unterbindung, deswegen kennt sie zu diesem Zeitpunkt schon, dass jetzt eine Sperrphase eingetreten ist)
Hey, irgendwie taucht das
NonVCL-Timer-Problem nicht mehr in meinem Plan auf
Weiterer Vorteil: Die
DLL muss nun die Information mit den (variablen) 3 Sekunden nicht mehr kennen