Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mausradrichtung bei Journalhook ermitteln (https://www.delphipraxis.net/95344-mausradrichtung-bei-journalhook-ermitteln.html)

Hedge 5. Jul 2007 11:12


Mausradrichtung bei Journalhook ermitteln
 
Habe einen JournalHook eingrichtet und es funktioniert auch alles super...

Delphi-Quellcode:
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;
Das einzige Problem das ich habe ist, dass ich es nicht schaffe zu ermitteln in welche Richtung sich das Mausrad dreht.


Delphi-Quellcode:
WM_MOUSEWHEEL
  fwKeys = LOWORD(wParam);
  zDelta = HIWORD(wParam);
  xPos = LOWORD(lParam);
  yPos = HIWORD(lParam);
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.

Robert Marquardt 5. Jul 2007 11:31

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;

Mazel 5. Jul 2007 11:40

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.

Robert Marquardt 5. Jul 2007 11:49

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.

Hedge 5. Jul 2007 11:50

Re: Mausradrichtung bei Journalhook ermitteln
 
hab das selbe Problem denn bei

Delphi-Quellcode:
Delta := Smallint(HIWORD(P^.wParam));
tritt ein Fehler auf:

Undeclared identifier: 'wParam'

bei P^.paramH schmiert das Programm komplett ab

Mazel 5. Jul 2007 12:22

Re: Mausradrichtung bei Journalhook ermitteln
 
Leider funktioniert es weder mit paramH und paramL.

Robert Marquardt 5. Jul 2007 12:24

Re: Mausradrichtung bei Journalhook ermitteln
 
Was steht denn in paramH und paramL? "Schmiert ab" und "funktionert nicht" sind keine Fehlerbeschreibungen.

Mazel 5. Jul 2007 13:05

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.

SirThornberry 5. Jul 2007 13:10

Re: Mausradrichtung bei Journalhook ermitteln
 
habt ihr mal im msdn geschaut (bzw. allgemein in der Hilfe)?
Da steht
Zitat:

wParam
The high-order word indicates the distance the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user.
bei normalem auswerten der Message (ohne hook) funktioniert das (wie von robert auch bereits beschrieben).

Hedge 5. Jul 2007 16:41

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:
if P^.Message = WM_MOUSEWHEEL then
       begin
         Delta := Smallint(HIWORD(P^.paramL));
         MainForm.Label1.Caption := IntToStr(Delta);
       end;
wird stets 0 ausgegeben (bei paramL und paramH)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz