externes Control überwachen

20/04/2009 - 17:37 von Udo Riesmeier | Report spam
Hallo,

ich möchte ein externes Control, also ein, welches nicht in meinem Programm
liegt, überwachen.
(Mouse- und Tastaturereignisse)

im moment mache ich es "sehr" global mit:
hHookMain = SetWindowsHookEx(WH_JOURNALRECORD, AddressOf HookProc,
0, 0)
hHookWheel = SetWindowsHookEx(WH_GETMESSAGE, AddressOf HookWheel, 0,
0)
da bekomme ich aber alle Ereignisse mitgeteilt, von allen hwnd's.

kann man das eleganter lösen?


Gruß


Udo
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
20/04/2009 - 21:18 | Warnen spam
Hallo Udo!

"Udo Riesmeier" schrieb:
ich möchte ein externes Control, also ein, welches nicht in meinem
Programm liegt, überwachen.
(Mouse- und Tastaturereignisse)

im moment mache ich es "sehr" global mit:
hHookMain = SetWindowsHookEx(WH_JOURNALRECORD, AddressOf HookProc,
0, 0)
hHookWheel = SetWindowsHookEx(WH_GETMESSAGE, AddressOf HookWheel,
0, 0)
da bekomme ich aber alle Ereignisse mitgeteilt, von allen hwnd's.



Bei 'SetWindowsHookEx' kannst Du im Parameter 'dwThreadId' die
Threadzugriffsnummer angeben, deren Ereignisse Dich interessieren.

Anschließend kannst Du innerhalb von 'WH_GETMESSAGE' nach
Fensterzugriffsnummer und Nachrichtentyp filtern.

Aber Vorsicht: Mit VB wird ein 'WH_GETMESSAGE' für einen Thread einer
anderen Anwendung oder alle Threads des Desktops gar nicht möglich sein:

Aus "About Hooks",
<URL:http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx>:

| If the application installs a hook procedure for a thread of a different
| application, the procedure must be in a DLL.

Die Hookprozedur muß demnach in einer DLL implementiert werden, die
idealerweise möglichst schlank ist. Dafür bietet sich C an.

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen