![]() |
AW: In Hook auslösender Prozess ermitteln
Zitat:
Zitat:
|
AW: In Hook auslösender Prozess ermitteln
Wir machen offenbar einen Wettlauf. Ich versuch's. Danke!
|
AW: In Hook auslösender Prozess ermitteln
Zitat:
Zitat:
|
AW: In Hook auslösender Prozess ermitteln
Zitat:
Da ja schon eh eine kleine Anwendung laufen soll (die mit dem Trayicon), wäre genau diese der richtige Ort. |
AW: In Hook auslösender Prozess ermitteln
Willst du (nur) alle durch Anwendungen generierte Key-Message (SendInput z.B.) abfangen (und nicht unbedingt durch den User per Keyboard-Input)?
Falls dem so ist, bist du zu 50% fertig - den globalen Hook hast du bereits ja. Die restlichen 50% bestehen aus folgendem: In deinem Hook (dll) wendest du eine andere Art von hook an (API-Hook, IAT-Hooking, usw usf..) wo du alle API Befehle, die in irgendeiner Art und Weise Keystrokes generieren können, hookst). Dann monitorst du genau diese und sobald sie aufgerufen werden, schickst du deiner APP ne Message mit "Hey, kuck mal, der hier (PID/hWnd) generiert grad Keystrokes!" |
AW: In Hook auslösender Prozess ermitteln
Erst mal Danke für Eure Hilfe. Die Lösung mit dem GetForeGroundWindow funktioniert da ich ja noch neben dem Dienst ein Miniprogramm am laufen habe, welches jeweils vom Dienst auf den gerade aktuellen Desktop geschmissen wird.
Nun bin ich aber bei meiner Rumspielerei mit den Hooks noch auf ein anderes Problem gestossen. Beim Maus-Hook gibt es in der Struktur den Wert wHitTestCode und der müsste mit einem Wert gemäss WM_NCHITTEST bestückt werden. Bei mir kommt aber immer nur 0 zurück. Habt Ihr eine Ahnung, was ich falsch mache? Hier der Code:
Delphi-Quellcode:
anzumerken wäre, dass die x- und y-Koordinaten richtig aus der Struktur ausgelesen werden.
type
PMSDLLHookInfo = ^TMSDLLHookInfo; tagMSDLLHOOKSTRUCT = packed record POINT : TPoint; Handle : DWORD; wHitTestCode: integer; dwExtraInfo : DWORD; end; TMSDLLHookInfo = tagMSDLLHOOKSTRUCT; var HookMaus : HHook; var hApp : HWND; function MouseHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; const WM_XBUTTONDOWN = $020B; const WM_XBUTTONUP = $020C; const WM_XBUTTONDBLCLK = $020D; var Wnd : HWND; var PID : DWord; var TID : DWord; var mVKCode : integer; var mUpDown : integer; var XKord : integer; var YKord : integer; var woHit : string; var wasHit : string; begin if (Code = HC_ACTION) and (wParam <> WM_MOUSEMOVE) and (wParam <> WM_NCMOUSEMOVE) then begin Wnd := GetForeGroundWindow; TID := GetWindowThreadProcessId(Wnd, PID); MUpDown := wParam; case wParam of WM_LBUTTONDBLCLK : WasHit := 'L-ButtonDBLClick'; WM_LBUTTONDOWN : WasHit := 'L-ButtonDown'; WM_LBUTTONUP : WasHit := 'L-ButtonUp'; WM_MBUTTONDBLCLK : WasHit := 'M-ButtonDBLClick'; WM_MBUTTONDOWN : WasHit := 'M ButtonDown'; WM_MBUTTONUP : WasHit := 'M-ButtonUp'; WM_RBUTTONDBLCLK : WasHit := 'R-ButtonDBLClick'; WM_RBUTTONDOWN : WasHit := 'R-ButtonDown'; WM_RBUTTONUP : WasHit := 'R-ButtonUp'; WM_XBUTTONDBLCLK : WasHit := 'X-ButtonDBLClick'; WM_XBUTTONDOWN : WasHit := 'X-ButtonDown'; WM_XBUTTONUP : WasHit := 'X-ButtonUp'; WM_MOUSEHOVER : WasHit := 'MouseHover'; WM_MOUSELEAVE : WasHit := 'MouseLeave'; WM_MOUSEMOVE : WasHit := 'MouseMove'; WM_MOUSEWHEEL : WasHit := 'MouseWheel'; WM_MOUSEACTIVATE : WasHit := 'MouseActivate'; WM_NCLBUTTONDOWN : WasHit := 'NCL-L-ButtonDown'; else WasHit := IntToStr(wparam); end; XKord := PMSDLLHookInfo(lParam).POINT.X; YKord := PMSDLLHookInfo(lParam).POINT.Y; mVKCode := PMSDLLHookInfo(lParam).wHitTestCode; case mVKCode of HTBORDER : WoHit := 'Border'; HTBOTTOM : WoHit := 'Bottom'; HTBOTTOMLEFT : WoHit := 'BottomLeft'; HTBOTTOMRIGHT : WoHit := 'BottomRight'; HTCAPTION : WoHit := 'Caption'; HTCLIENT : WoHit := 'Client'; HTCLOSE : WoHit := 'Close'; HTERROR : WoHit := 'Error'; HTHELP : WoHit := 'Help'; HTHSCROLL : WoHit := 'Scroll'; HTLEFT : WoHit := 'Left'; HTMENU : WoHit := 'Menu'; HTREDUCE : WoHit := 'Reduce'; HTNOWHERE : WoHit := 'Nowhere'; HTRIGHT : WoHit := 'Right'; HTSIZE : WoHit := 'Size'; HTSYSMENU : WoHit := 'SysMenu'; HTTOP : WoHit := 'Top'; HTTOPLEFT : WoHit := 'TopLeft'; HTTOPRIGHT : WoHit := 'TopRight'; HTTRANSPARENT : WoHit := 'Transparent'; HTVSCROLL : WoHit := 'V-Scroll'; HTZOOM : WoHit := 'Zoom'; else WoHit := IntToStr(mVKCode); end; |
AW: In Hook auslösender Prozess ermitteln
Bist du dir sicher, dass du weißt, was du da gerade tust? :gruebel:
Ich fürchte mal nicht ... denn Du sprichst immer von globalen (also den LowLevel) Hooks, benutzt aber die Struktur für den normalen Hook. Welchen Hook willst du denn jetzt benutzen? |
AW: In Hook auslösender Prozess ermitteln
Upps!
war vermutlich Wunschdenken! Ich bin vorderhand wirklich nur am rumspielen mit dem Maushook und die Anzeige, wo geklickt wurde, wäre echt schön gewesen. Das scheint aber mit der korrekten Low-Level-Struktur leider nicht möglich zu sein. Da gibt es nichts ähnliches wie HitTestCode. Schade. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 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