AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mausradrichtung bei Journalhook ermitteln

Mausradrichtung bei Journalhook ermitteln

Ein Thema von Hedge · begonnen am 5. Jul 2007 · letzter Beitrag vom 16. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2   
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 11:12
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.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 11:31
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;
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#3

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 11:40
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.
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 11:49
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.
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 11:50
hab das selbe Problem denn bei

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

Undeclared identifier: 'wParam'

bei P^.paramH schmiert das Programm komplett ab
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#6

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 12:22
Leider funktioniert es weder mit paramH und paramL.
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 12:24
Was steht denn in paramH und paramL? "Schmiert ab" und "funktionert nicht" sind keine Fehlerbeschreibungen.
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#8

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 13:05
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.
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 13:10
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).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Mausradrichtung bei Journalhook ermitteln

  Alt 5. Jul 2007, 16:41
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)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
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