![]() |
Mausradrichtung bei Journalhook ermitteln
Habe einen JournalHook eingrichtet und es funktioniert auch alles super...
Delphi-Quellcode:
Das einzige Problem das ich habe ist, dass ich es nicht schaffe zu ermitteln in welche Richtung sich das Mausrad dreht.
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin If nCode = HC_ACTION then begin If lParam <> 0 then with PEventMsg(lParam)^ do begin If Message = WM_MOUSEWHEEL then begin Inc(Form1.i); Form1.Label1.Caption := IntToStr(Form1.i); end; end; end; Result := CallNextHookEx(Form1.MouseHook, nCode, wParam, lParam); end;
Delphi-Quellcode:
laut Definition müsste dies aber eigentlich mit zDelta möglich sein..wie ermittel ich nun diesen Parameter in der oben genannten Funktion. Hab schon ziemlich lange rumprobiert aber nichts funktionierte.
WM_MOUSEWHEEL
fwKeys = LOWORD(wParam); zDelta = HIWORD(wParam); xPos = LOWORD(lParam); yPos = HIWORD(lParam); |
Re: Mausradrichtung bei Journalhook ermitteln
Ich habe mal das with beseitigt, denn es ist hier unpraktisch.
Delphi-Quellcode:
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var P: PEventMsg; Delta: Smallint; begin If nCode = HC_ACTION then begin If lParam <> 0 then begin P := PEventMsg(lParam); If P^.Message = WM_MOUSEWHEEL then begin // HIWORD extrahiert ein WORD das man zu einem Smallintumtypen muss, damit das Vorzeichen wieder auswertbar wird. Delta := Smallint(HIWORD(P^.wParam)); Inc(Form1.i); Form1.Label1.Caption := IntToStr(Form1.i); end; end; end; Result := CallNextHookEx(Form1.MouseHook, nCode, wParam, lParam); end; |
Re: Mausradrichtung bei Journalhook ermitteln
Ziwschenfrage: Warum ist es mit with in diesem Fall unpraktisch? Ich habe den Code jetzt mal bei mir in ein Programm eingebaut aber es geht nicht weil P^.wParam nicht existiert.
|
Re: Mausradrichtung bei Journalhook ermitteln
Versehen meinerseits. Ich dachte die Elemente von TEventMsg hiessen auch lParam und wParam. Das gaebe dann Probleme mit dem Verstaendnis welches lParam gemeint ist.
Probier mal P^.paramH. Es scheint so zu sein das in diesen Records lParam vor wParam steht. Wenns das nicht war, dann P^.paramL probieren. |
Re: Mausradrichtung bei Journalhook ermitteln
hab das selbe Problem denn bei
Delphi-Quellcode:
tritt ein Fehler auf:
Delta := Smallint(HIWORD(P^.wParam));
Undeclared identifier: 'wParam' bei P^.paramH schmiert das Programm komplett ab |
Re: Mausradrichtung bei Journalhook ermitteln
Leider funktioniert es weder mit paramH und paramL.
|
Re: Mausradrichtung bei Journalhook ermitteln
Was steht denn in paramH und paramL? "Schmiert ab" und "funktionert nicht" sind keine Fehlerbeschreibungen.
|
Re: Mausradrichtung bei Journalhook ermitteln
Ich erhalte bei dem Code bei beiden 0. Ohne LOWORD und HIWORD wird die Position des Mauszeigers zurückgegeben: paramH die Top-Position und paramL die Left-Position.
|
Re: Mausradrichtung bei Journalhook ermitteln
habt ihr mal im msdn geschaut (bzw. allgemein in der Hilfe)?
Da steht Zitat:
|
Re: Mausradrichtung bei Journalhook ermitteln
An dem Abschmieren war ich selbst schuld denn in dem Hook sollte man kein ShowMessage benutzen...
@SirThornberry: was meinst du mit normalem Auswerten der Message? bei:
Delphi-Quellcode:
wird stets 0 ausgegeben (bei paramL und paramH)
if P^.Message = WM_MOUSEWHEEL then
begin Delta := Smallint(HIWORD(P^.paramL)); MainForm.Label1.Caption := IntToStr(Delta); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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