Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   SetWindowsHookEx - Hook im eigenen Prozess (https://www.delphipraxis.net/186859-setwindowshookex-hook-im-eigenen-prozess.html)

Neutral General 7. Okt 2015 13:50

SetWindowsHookEx - Hook im eigenen Prozess
 
Hallo,

Vielleicht steh ich etwas aufm Schlauch aber ich bräuchte einen WH_CALLWNDPROC-Hook der nur in meinem Prozess gültig ist (aber dort für alle Threads).
Ich registriere den Hook aus einer DLL die von meinem Programm geladen wird.

Ich hatte bisher das Problem, dass der Hook entweder (versehentlich) systemweit registriert und geladen wurde oder nur für einen Thread meines Prozesses galt.
Gibt es da ein Zwischending - Also für alle Threads meines Prozesses?

Habe auch mal SetWindowsHook (ohne Ex) probiert und das tut genau was ich möchte, aber die API ist veraltet und man findet bei Google ungefähr gar nichts darüber,
weswegen ich diese API nicht unbedingt benutzen möchte.

himitsu 7. Okt 2015 14:01

AW: SetWindowsHookEx - Hook im eigenen Prozess
 
Einfach bei dir CallWindowProc, PeekMessage oder Dergleichen hooken?

Delphi-Laie 7. Okt 2015 22:28

AW: SetWindowsHookEx - Hook im eigenen Prozess
 
Neutral General, frag mal direkt bei Assarbad oder mache ihn auf Dein Anliegen aufmerksam.

Zacherl 8. Okt 2015 07:53

AW: SetWindowsHookEx - Hook im eigenen Prozess
 
Du könntest einfach das betroffene Fenster subclassen. Das geht ganz einfach indem du per MSDN-Library durchsuchenSetWindowLong über GWL_WNDPROC eine neue WndProc setzt und in dieser ggfls. dann die alte WndProc aufrufst.

Neutral General 8. Okt 2015 08:48

AW: SetWindowsHookEx - Hook im eigenen Prozess
 
Zitat:

Zitat von himitsu (Beitrag 1317902)
Einfach bei dir CallWindowProc, PeekMessage oder Dergleichen hooken?

Da war mein vorheriger Ansatz mir alle Threads aufzulisten und den mit einer GUI zu nehmen noch einfacher :mrgreen:

Zitat:

Zitat von Zacherl (Beitrag 1317978)
Du könntest einfach das betroffene Fenster subclassen. Das geht ganz einfach indem du per MSDN-Library durchsuchenSetWindowLong über GWL_WNDPROC eine neue WndProc setzt und in dieser ggfls. dann die alte WndProc aufrufst.

Das Problem ist, dass ich mit meiner DLL in einem fremden Prozess bin und nur über Umwege an das (richtige) Fensterhandle drankäme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.

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