![]() |
Merkwürdiges Problem mit Kbd Hook
Hi,
ich hab mir einen KeyboardHook geschrieben, der eine Message and das Hauptprogramm sendet, damit ich dort alles auswerten kann. Das Ganze sieht so aus:
Delphi-Quellcode:
Mein Problem ist jetzt, dass wenn ich in einem Spiel (in meinem Fall Warcraft III) eine Taste drücke, dann wird die Message zweimal gesendet. In Windows passiert dies auch manchmal. Undzwar wenn ich in einem Edit das auf der Form liegt eine Taste drücke. Hat das Edit keinen Focus, dann kommt die Message einmal an, so wie es sein soll?
function KbdHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin Result := CallNextHookEx(Keyboard_HookHandle, nCode, wParam, lParam); case nCode < 0 of True: exit; // nicht anrühren wenns negativ ist False: begin case ((lParam and $80000000) = 0) of True: ; // WM_KEYDOWN else // WM_KEYUP SendMessage(HWND_BROADCAST,myMsg3,wParam,lParam); end; end; end; end; Hat jemand eine Idee, was da los ist und wie ich das in den Griff bekommen kann? |
Re: Merkwürdiges Problem mit Kbd Hook
Das liegt daran weil sie auch wirklich 2 mal gesendet wird.
Einmal für KeyDown und einmal für KeyUp. Guck mal in der Forensuche da findest du 100%ig was. //Edit: Moment, irgendwas verwechsel ich da...Vergiss es :mrgreen: |
Re: Merkwürdiges Problem mit Kbd Hook
Keiner ne Idee, was das falsch läuft?
|
Re: Merkwürdiges Problem mit Kbd Hook
Also, erklären kann ich es mir immer noch nicht, warum das so ist. Allerdings lässt sich das Problem lösen indem man zusätzlich noch überprüft ob GetAsyncKeyState(vkc) = 0 ist. Das müsste zawr immer 0 sein, da ich ja das 32 Bit prüfe ob es gesetzt ist, aber irgendwie is da alles komisch :P
|
Re: Merkwürdiges Problem mit Kbd Hook
Tipp: schreib in deiner Hook-Routine ein OutputDebugString mit nCode, wParam und lParam hinzu. Das kannst du in Delphi unten in der Meldungsliste sehen wenn du die eigentliche Anwendung debuggst (oder mit
![]() |
Re: Merkwürdiges Problem mit Kbd Hook
Also hab das mal mit lparam gemacht und wenn ich keine Taste loslassen, dann erscheinen da unten bei Delphi 4 gleiche Nachrichten. Was bedeutet das jetzt?
|
Re: Merkwürdiges Problem mit Kbd Hook
Zitat:
|
Re: Merkwürdiges Problem mit Kbd Hook
Zitat:
Probier mal alle Parameter auszugeben:
Delphi-Quellcode:
... und dann solltest du das natürlich insbesondere für die Fälle ausprobieren, wo du zweimal dieselbe Taste bekommst.
OutputDebugString(PChar(Format('KbdHookProc($%8.8x, $%8.8x, $%8.8x)', [nCode, wParam, lParam])));
|
Re: Merkwürdiges Problem mit Kbd Hook
Irgendwie hab ich da Mist geschrieben. Also interessant ist nur lParam, da wParam sich nur von Taste zu Taste unterscheidet.
OutputDebugString hab ich direkt unter SendMessage eingebaut, also in KeyUp Case! Wenn nun dieses Ereignis eintritt ( ich lasse eine Taste los :)), dann erscheinen bei Delphi 4 gleiche nachrichten mit dem gleichen lParam Wert. Was das nun bedeutet weiß ich nicht. Ich denk man, dass das Ereignis dann sogar 4 Mal aufgerufen wurde?! |
Re: Merkwürdiges Problem mit Kbd Hook
"code" kann 4 werte enthalten. scheinbar wird fuer jeden dieser die nachricht einzeln abgearbeitet.
code = HC_ACTION ist was du willst. gibts nen grund, wieso du mit diesen ungewoehnlichen cases arbeitest? einfaches "if" wuerde viel besser passen. |
Re: Merkwürdiges Problem mit Kbd Hook
Zitat:
Du kannst sie vielleicht mal hier posten. (ich geh' aber jetzt erst mal ins Bett) |
Re: Merkwürdiges Problem mit Kbd Hook
Zitat:
|
Re: Merkwürdiges Problem mit Kbd Hook
Zitat:
|
Re: Merkwürdiges Problem mit Kbd Hook
????
|
Re: Merkwürdiges Problem mit Kbd Hook
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz