![]() |
WM_KEYDOWN: repeat-count aus dem lparam lesen
Möchte gerne ermitteln ob eine Taste zum ersten Mal gedrückt wurde oder eben gehalten wird.
Das geht entweder mit WM_KEYUP, denn das wird ja nur 1 Mal ausgeführt oder auch mit dem repeat-count von WM_KEYDOWN laut MSDN steht der repeat-count in den ersten 16 bytes des lparam. Ich habe gelesen, dass man diese mit LOWORD (lParam) auslesen kann, aber irgendwie zündet das nicht so bei mir.
Delphi-Quellcode:
P := PEventMsg(lParam);
If P^.Message = WM_KEYDOWN then begin Form1.Label1.Caption:=IntToStr((LOWORD(P^.paramL))); end; |
Re: WM_KEYDOWN: repeat-count aus dem lparam lesen
Was ist denn PeventMsg?
|
Re: WM_KEYDOWN: repeat-count aus dem lparam lesen
das Ganze ist eine Callback-Funktion:
Delphi-Quellcode:
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var P: PEventMsg; begin Result := CallNextHookEx(0, nCode, wParam, lParam); If nCode = HC_ACTION then begin If lParam <> 0 then begin P := PEventMsg(lParam); If P^.Message = WM_KEYDOWN then begin Form1.Label1.Caption:=IntToStr((LOWORD(P^.paramL))); end end else exit; end; end; |
Re: WM_KEYDOWN: repeat-count aus dem lparam lesen
Und da kommt dann was raus?
IMHO wird der Zähler auch zurückgesetzt. |
Re: WM_KEYDOWN: repeat-count aus dem lparam lesen
Ich will eigentlich nur die ersten 16 Bytes des lparam isolieren, damit ich sehe wie oft die Taste aktiviert wurde hintereinander.
aus MSDN: Zitat:
|
Re: WM_KEYDOWN: repeat-count aus dem lparam lesen
Ich würde sagen: Here you are:
Zitat:
|
Re: WM_KEYDOWN: repeat-count aus dem lparam lesen
Ah! Jetzt raff ichs. Vor dem selben Problem stand ich schon mal.
Jedoch scheint JournalHook bei den Parametern eine Schwäche zu haben, denn egal wie ich das 30. Bit prüfe, es kommt nix dabei raus... Hier meine Testkandidaten:
Delphi-Quellcode:
und:
const
PREV_KEY_STATE = 1 shl 30; // $40000000 begin // ... if lparam and PREV_KEY_STATE = PREV_KEY_STATE then Beep; // .. end;
Delphi-Quellcode:
Nix beep't
if Odd(lparam shr 30) then Beep;
|
Re: WM_KEYDOWN: repeat-count aus dem lparam lesen
Kein Ahnung bei dem Hook. In der normalen Message im Process funkioniert es.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 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