Hallo,
ich arbeite hier grade mit meinem Buch ein Kapitel mit Hooks durch. Die Hooks scheinen sehr interessant zu sein. Leider ist in diesem Buch alles schlecht erklärt und deshalb wollte ich mal fragen ob jemand eventuell gute Seiten kennt wo hooks beschrieben werden. Hab bei google schon gesucht, aber leider nix passendes gefunden...
_________________ If you understand what you're doing, you're not learning anything.
---
gib einen rat mit großem bedacht und denke daran, daß ein tag kommen kann, an dem du selbst einen guten rat gebrauchen kannst...
Zuletzt bearbeitet von Disi am 09:36:40 17.11.2004, insgesamt 1-mal bearbeitet
installiert die Hook-Prozedur.
Wenn Nachrichten nur für eine Anwendung gefiltert werden sollen, können die Filterfunktionen in dieser Anwendung untergebracht werden.
Sollen die Nachrichten für alle Anwendungen gefiltert werden, muss die Filterfunktion in einer DLL abgelegt werden.
Um einen Hook zu entfernen, wird die Funktion
installiert eine Nachrichtenfilterfunktion.
Es gibt verschiedene Typen, die durch den Parameter nFilterType angegeben werden.
Es können mehrere Filter gleichzeitig installiert sein, so dass eine Kette von Funktionen zur Nachrichtenverarbeitung entsteht.
Hookfunktionen können Nachrichten beobachten, verarbeiten oder ändern, noch bevor diese an die Anwendung gesendet werden.
Mit Hookfunktionen kann das Verhalten von Windows auf Systemebene verändert werden.
Rückgabewert:
C/C++ Code:
HHOOK
C/C++ Code:
HHOOK
C/C++ Code:
HHOOK
Bei erfolgreicher Ausführung wird der Handle der Hookprozedur zurückgegeben, sonst NULL.
Parameter:
Filtertypen:
C/C++ Code:
int nFilterType
C/C++ Code:
int nFilterType
C/C++ Code:
int nFilterType
Der Filterfunktionstype und Nachrichtentype, die gefiltert werden sollen, bevor sie zur Anwendung gesendet werden.
WH_CALLWNDPROC...............Überwacht Nachrichten, die mit SendMessage an eine Windowprozedur geschickt wurden.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Gibt an, ob die Hookprozedur die message verarbeiten soll.
Ist nCode HC_ACTION, muss der Hook die message verarbeiten.
Ist nCode < 0 wird die message an CallNextHook weitergereicht,
ohne sie weiter zu verarbeiten,
dabei sollte der Rückgabewert von CallNextHook zurückgegeben werden.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
Ungleich NULL, wenn die Message vom aktuellen Prozess gesendet wurde.
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf CWPSTRUCT-Struktur.
Diese Struktur entält messagedetails.
Die CWPSTRUCT Struktur:
C/C++ Code:
typedef struct tagCWPSTRUCT
{
LPARAM lParam, // lParamWert der Message
WPARAM wParam, // wParamWert der Message
DWORD message, // message
HWND hwnd, // windowhandle des empfängers
} CWPSTRUCT;
C/C++ Code:
typedef struct tagCWPSTRUCT
{
LPARAM lParam, // lParamWert der Message
WPARAM wParam, // wParamWert der Message
DWORD message, // message
HWND hwnd, // windowhandle des empfängers
} CWPSTRUCT;
C/C++ Code:
typedef struct tagCWPSTRUCT
{
LPARAM lParam, // lParamWert der Message
WPARAM wParam, // wParamWert der Message
DWORD message, // message
HWND hwnd, // windowhandle des empfängers
} CWPSTRUCT;
WH_CALLWNDPROCRET.........Überwacht Nachrichten, nachdem sie durch die Zielwindowsprozedur verarbeitet wurden.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Gibt an, ob die Hookprozedur die message verarbeiten soll.
Ist nCode HC_ACTION, muss der Hook die message verarbeiten.
Ist nCode < 0 wird die message an CallNextHook weitergereicht,
ohne sie weiter zu verarbeiten,
dabei sollte der Rückgabewert von CallNextHook zurückgegeben werden.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
Ungleich NULL, wenn die Message vom aktuellen Prozess gesendet wurde.
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf CWPRETSTRUCT-Struktur.
Diese Struktur enthält messagedetails.
Die CWPRETSTRUCT-Struktur:
C/C++ Code:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
typedef sturct tagCWPRETSTRUCT
{
LRESULT lResult, // rückgabewert der windowsprozedure, die die nachricht message verarbeitet hat
LPARAM lParam, // zusatzinformation zur message, abhängig von message
WPARAM wParam, // zusatzinformation zur message, abhängig von message
DWORD message, // message
HWND hWnd // windowhandle, welches die nachricht verarbeitet hat
} CWPRETSTRUCT;
C/C++ Code:
1 2 3 4 5 6 7 8
typedef sturct tagCWPRETSTRUCT
{
LRESULT lResult, // rückgabewert der windowsprozedure, die die nachricht message verarbeitet hat
LPARAM lParam, // zusatzinformation zur message, abhängig von message
WPARAM wParam, // zusatzinformation zur message, abhängig von message
DWORD message, // message
HWND hWnd // windowhandle, welches die nachricht verarbeitet hat
} CWPRETSTRUCT;
C/C++ Code:
1 2 3 4 5 6 7 8
typedef sturct tagCWPRETSTRUCT
{
LRESULT lResult, // rückgabewert der windowsprozedure, die die nachricht message verarbeitet hat
LPARAM lParam, // zusatzinformation zur message, abhängig von message
WPARAM wParam, // zusatzinformation zur message, abhängig von message
DWORD message, // message
HWND hWnd // windowhandle, welches die nachricht verarbeitet hat
} CWPRETSTRUCT;
WH_CBT...................................Empfängt Benachrichtigungen, die für CBT nützlich sind.
Gibt an, ob die Hookprozedur die message verarbeiten soll.
Ist nCode HC_ACTION, muss der Hook die message verarbeiten.
Ist nCode < 0 wird die message an CallNextHook weitergereicht,
ohne sie weiter zu verarbeiten,
dabei sollte der Rückgabewert von CallNextHook zurückgegeben werden.
nCode Werte für WH_CBT:
HCBT_ACTIVATE Ein Window wird gerate aktiviert.
HCBT_CLICKSKIPPED Eine Mausnachricht wurde aus der Systemmessagequeue entfernt.
HCBT_CREATEWND Ein Windowwird gerade aktiviert. CreateWindow schlägt fehlt, wenn der Rückgabewert != 0 ist.
HCBT_DESTROYWND Ein Window wird gerade entfernt.
HCBT_KEYSKIPPED Eine Keyboardmessage wurde aus der Systemmessagequeue entfernt.
HCBT_MINMAX Ein Window wurde minimiert bzw. maximiert
HCBT_MOVESIZE Ein Window wurde vergössert bzw. verkleinert.
HCBT_QS Die Message WM_QUEUESYNC wurde von der Systemmessagequeue empfangen.
HCBT_SETFOCUS Ein Window erhält gerade den Focus
HCBT_SYSCOMMAND Eine Systemmessage wird gerade ausgeführt.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
nCode wParam
HCBT_ACTIVE Der Handle des gerade akivierten Fensters
HCBT_CLICKEDSKIPPED Die Mausmessage wurde aus der Systemmessagqueue entfernt
HCBT_CREATEWND Der Handle des neuen Fensters
HCBT_DESTROYWND Der Handle des entfernten Fensters
HCBT_KEYSKIPPED Der Tastencode der aus der Systemmessagqueue entfernten Taste
HCBT_MINMAX Der Handle des minimierten/maximierten Fensters
HCBT_MOVESIZE Der Handle der vergösserten/verkleinerten Fensters
HCBT_QS Muss 0 sein
HCBT_SETFOCUS Der WindowHandle des fokusierten Windows
HCBT_SYSCOMMAND Der Wert des Systembefehls
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
nCode lParam
HCBT_ACTIVE Zeiger auf CBTACTIVATESTRUCT, die den aktiven Windowhandle enthält.
HCBT_CLICKSKIPPED Zeiger auf MOUSEHOOKSTRUCT-Struktur, die Code zum Prüfen der Clickposition und Windowhandle enthält
HCBT_CREATEWND Zeiger auf CBT_CREATEWND-Struktur, die Initialisierungsparamter des Windows enthält.
HCBT_DESTROYWND muss 0 sein
HCBT_KEYSKIPPED Repeatcounter, scanncode, kontextcode....
HCBT_MINMAX das loword enthält den anzeigestatus (zb. SW_SHOW,SW_HIDE...)
HCBT_MOVESIZE Zeiger auf RECT, die die Windowkoordinaten enthält
HCBT_QS muss 0 sein
HCBT_SETFOCUS Handle des Fensters, das den Fokus verliert
HCBT_SYSCOMMAND undefiniert
Die CBTACTIVATESTRUCT -Struktur:
C/C++ Code:
typedef struct tagCBTACTIVATESTRUCT
{
BOOL fMouse, // Spezifiziert, ob das Window als Ergebnis eines mausklicks aktiviert wird
HWND hWndActive; // Handle des aktiven Windows
} CBTACTIVATESTRUCT, *LP CBTACTIVATESTRUCT;
C/C++ Code:
typedef struct tagCBTACTIVATESTRUCT
{
BOOL fMouse, // Spezifiziert, ob das Window als Ergebnis eines mausklicks aktiviert wird
HWND hWndActive; // Handle des aktiven Windows
} CBTACTIVATESTRUCT, *LP CBTACTIVATESTRUCT;
C/C++ Code:
typedef struct tagCBTACTIVATESTRUCT
{
BOOL fMouse, // Spezifiziert, ob das Window als Ergebnis eines mausklicks aktiviert wird
HWND hWndActive; // Handle des aktiven Windows
} CBTACTIVATESTRUCT, *LP CBTACTIVATESTRUCT;
Die CBT_CREATEWND-Struktur
C/C++ Code:
typedef struct tagCBT_CREATEWND
{
LPCREATESTRUCT lpcs, // Zeiger auf CREATESTRCUT Struktur, die Informationen über des erzeugte Window enthält.
HWND hwndInsertAfter, // Handle auf das Window, dessen Position in de Zorder dem zu erzeugenden Fenster vorausgeht.
} CBT_CREATEWND, *LPCBT_CREATEWND;
C/C++ Code:
typedef struct tagCBT_CREATEWND
{
LPCREATESTRUCT lpcs, // Zeiger auf CREATESTRCUT Struktur, die Informationen über des erzeugte Window enthält.
HWND hwndInsertAfter, // Handle auf das Window, dessen Position in de Zorder dem zu erzeugenden Fenster vorausgeht.
} CBT_CREATEWND, *LPCBT_CREATEWND;
C/C++ Code:
typedef struct tagCBT_CREATEWND
{
LPCREATESTRUCT lpcs, // Zeiger auf CREATESTRCUT Struktur, die Informationen über des erzeugte Window enthält.
HWND hwndInsertAfter, // Handle auf das Window, dessen Position in de Zorder dem zu erzeugenden Fenster vorausgeht.
} CBT_CREATEWND, *LPCBT_CREATEWND;
WH_DEBUG..............................Installiert eine Hookprozedur zum Debuggen anderer Hookprozeduren
Damit verhindert wird, dass das System den Hook aufruft, sollte ein wert != 0 zurückgegben werden.
Andernfalls sollte der Rückgabewert von CallNextHook zurückgegeben werden.
Parameter:
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
Typ der Hookprozedur der aufgerufen werden soll.
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf DEBUGHOOKINFO-Sturktur
Die DEBUGHOOKINFO-Struktur
C/C++ Code:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
typedef struct tagDEBUGHOOKINFO
{
DWORD idThread, // Thread ID des Threads der den Hook enthält
DWORD idThreadInstaller, // Handle für den Thread, der den Hook installiert hat
LPARAM lParam, // Der an den Hook übergebene lParam-Wert
WPARAM wParam, // Der an den Hook übergebene wParam-Wert int code // nCode Wert, der an den Hook übergeben wird
} DEBUGHOOKINFO;
C/C++ Code:
1 2 3 4 5 6 7 8
typedef struct tagDEBUGHOOKINFO
{
DWORD idThread, // Thread ID des Threads der den Hook enthält
DWORD idThreadInstaller, // Handle für den Thread, der den Hook installiert hat
LPARAM lParam, // Der an den Hook übergebene lParam-Wert
WPARAM wParam, // Der an den Hook übergebene wParam-Wert int code // nCode Wert, der an den Hook übergeben wird
} DEBUGHOOKINFO;
C/C++ Code:
1 2 3 4 5 6 7 8
typedef struct tagDEBUGHOOKINFO
{
DWORD idThread, // Thread ID des Threads der den Hook enthält
DWORD idThreadInstaller, // Handle für den Thread, der den Hook installiert hat
LPARAM lParam, // Der an den Hook übergebene lParam-Wert
WPARAM wParam, // Der an den Hook übergebene wParam-Wert int code // nCode Wert, der an den Hook übergeben wird
} DEBUGHOOKINFO;
WH_FOREGROUNDIDLE..........Installiert eine Hookprozedur, die aufgerufen wird, wenn der Vordergrundthread der Anwedung im Begriff ist, inaktiv zu werden.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Gibt an, ob die Hookprozedur die message verarbeiten soll.
Ist nCode HC_ACTION, muss der Hook die message verarbeiten.
Ist nCode < 0 wird die message an CallNextHook weitergereicht,
ohne sie weiter zu verarbeiten,
dabei sollte der Rückgabewert von CallNextHook zurückgegeben werden.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
nicht verwendet
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
nicht verwendet
WH_GETMESSAGE...................Überwacht Messages unmittelbar nachdem die Funktion GetMessage oder PeekMessage aufgerufen wurde. Alle Messages werden an diesen Filter weitergegeben.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Gibt an, ob die Hookprozedur die message verarbeiten soll.
Ist nCode HC_ACTION, muss der Hook die message verarbeiten.
Ist nCode < 0 wird die message an CallNextHook weitergereicht,
ohne sie weiter zu verarbeiten,
dabei sollte der Rückgabewert von CallNextHook zurückgegeben werden.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
Gibt an, ob die message aus der messagequeue entfernt wurde, wurde sie entfernt ist dieser parameter PM_REMOVE, sonst PM_NOREMOVE.
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf eine MSG Struktur
Die MSG-Struktur
C/C++ Code:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
typedef struct tagMSG
{
HWND hwnd; // handle auf empfängerfenster
UINT message; // die message
WPARAM wParam; // informationen
LPARAM lParam; // informationen
DWORD time; // absendezeit
POINT pt; // cursorposition zur absendezeit
} MSG, *PMSG;
C/C++ Code:
1 2 3 4 5 6 7 8 9
typedef struct tagMSG
{
HWND hwnd; // handle auf empfängerfenster
UINT message; // die message
WPARAM wParam; // informationen
LPARAM lParam; // informationen
DWORD time; // absendezeit
POINT pt; // cursorposition zur absendezeit
} MSG, *PMSG;
C/C++ Code:
1 2 3 4 5 6 7 8 9
typedef struct tagMSG
{
HWND hwnd; // handle auf empfängerfenster
UINT message; // die message
WPARAM wParam; // informationen
LPARAM lParam; // informationen
DWORD time; // absendezeit
POINT pt; // cursorposition zur absendezeit
} MSG, *PMSG;
WH_JOURNALPLAYBACK.......Gibt eine Eventmessage, die mit WH_JOURNALRECORD aufgezeichnet wurde, wieder, wenn das System einen Event anfordert.
Ist nCode gleich HC_GETNEXT, ist der Rückgabewert gleich der Zeit, angegeben in Ticks, wie lange das System warten sollte.
Diese Zeit wird aus der Zeit der vorherigen Message und der Zeit der aktuellen message berechnet.
ist der rückgabewert gleich null, wird die message sofort abgearbeitet.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
bestimmt, wie die Nachricht verarbeitet wird. Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook
nCode kann einen der folgenden Werte haben:
HC_GETNEXT Die aktuelle Maus- bzw. Keyboardmessage sollte in die EVENTMSG-Struktur kopiert werden, auf die lParam zeigt.
HC_NOREMOVE Eine Anwendung hat die Funktion PeekMessage mit Flag PM_NOREMVOE aufgerufen
HC_SKIP Das Kopieren der nexten Maus- bzw. keyboardmessage ist in vorbereitung
HC_SYSMODALOFF Ein Systemodaler Dialog wurde entfernt
HC_SYSMODALON Ein Systemodaler Dialog wird angezeigt
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
wird nicht verwendet
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf eine EVENTMSG-Struktur.
Dieser Zeiger ist nur gültig, wenn nCode == HC_GETNEXT !
bestimmt, wie die Nachricht verarbeitet wird.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook
nCode kann folgende Werte enthalten:
HC_ACTION Die Inhalte der EVENTMSG-Struktur im lParam-Zeiger werden in einen Puffer oder eine Datei aufgezeichnet.
HC_SYSMODALOFF Ein Systemmodaler Dialog wurde entfernt - die aufzeichnung geht weiter.
HC_SYSMODALON EinSystemmodaler Dialog wird angezeigt - aufzeichnung stop.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
wird nicht verwendet.
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf eine EVENTMSG-Strutkur.
Der Zeiger ist nur gültig, wenn nCode==HC_ACTION !
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook
Um zu verhindern, dass die nachricht verarbeitet wird, muss der rückgabewert ungleich null seind.
Damit windows die message an die ziel-windows-procedure wietergeben kann, muss der rückgabwert null sein.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Ist dieser parameter HC_ACTION, enthalten wParam und lParam Informationen über eine Keyboardmessage.
Das gilt auch, wenn nCode HC_REMOVE ist, ausser das die message nicht aus der messagequeue entfernt wurde.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
virtueller Keycode der gedrückten Taste
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Repeatcounter, scancode, flag für extended keys, kontextcode...
WH_KEYBOARD_LL................Überwacht Tastaturmessages am LowLevel ab Win2000
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
andernfalls werden andere für WH_KEYBOARD installierte Hooks nicht aufgerufen und es sollte null zurückgegeben werden.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Ist nCode==HC_ACTION enthalten lParam und wParam informationen über die keymessage.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
0......Sagt aus, ob es sich um eine erweiterete Taste handelt (zb. Funktionstasten)
1-3....Reserviert
4......Ist 1, wenn der Event eingespeist wurde, sonst 0
5......1, wenn die "alt"-Taste gedrückt wird, sonst 0
6......Reserviert
7......wird 0, wenn taste gedrückt wird, 1 wenn sie losgelassen wird
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
Andernfalls werden ander für WH_MOUSE installierte Hooks nicht aufgerufen und des sollte 0 zurückgegeben werden.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Ist dieser Paramter == HC_ACTION enthalten die Parameter wParam und lParam Informationen über die Mousemessage.
Das gleiche gilt auch wenn nCode == HC_NOREMOVE ist, ausser dass die message nicht aus der messagequeue entfernt wurde.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
Nachricht ID
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf MOUSEHOOKSTRUCT-Struktur
Die MouseHookStruct-Struktur
C/C++ Code:
typedef struct tagMOUSEHOOKSTRUCT
{
POINT pt, // die Cursorkoordinaten
HWND hwnd, // Handle des Empfängerwindows
UINT wHitTestCode, // Code, wo die Mausnachricht auftrag
ULONG_PTR dwExtraInfo // Zusatzinformationen
} MOUSEHOOKSTRUCT;
C/C++ Code:
typedef struct tagMOUSEHOOKSTRUCT
{
POINT pt, // die Cursorkoordinaten
HWND hwnd, // Handle des Empfängerwindows
UINT wHitTestCode, // Code, wo die Mausnachricht auftrag
ULONG_PTR dwExtraInfo // Zusatzinformationen
} MOUSEHOOKSTRUCT;
C/C++ Code:
typedef struct tagMOUSEHOOKSTRUCT
{
POINT pt, // die Cursorkoordinaten
HWND hwnd, // Handle des Empfängerwindows
UINT wHitTestCode, // Code, wo die Mausnachricht auftrag
ULONG_PTR dwExtraInfo // Zusatzinformationen
} MOUSEHOOKSTRUCT;
WH_MOUSE_LL.......................Lowlevel Mousehook ab Win2000
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
Andernfalls werden andere für WH_MOUSE_LL installierte Hooks nicht aufgerufen und es sollte 0 zurückgegeben werden.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
Mousemessage, zb. WM_LBUTTONDOWN, WM_RBUTTONUP...
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf MSLLHOOKSTRUCT-Struktur
Die MSLLHOOKSTRUCT-Struktur
C/C++ Code:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
typedef struct tagMSLLHOOKSTRUCT
{
POINT pt, // mauskoordinaten
DWORD dwData, // siehe unten
DWORD dwFlags, // ist 1, wenn event eingespeist wurde sonst 0
DWORD dwTime, // Zeitstempel
ULONG_PTR dwExtraInfo, // Zusatzinformationen
} MSLLHOOKSTRUCT;
C/C++ Code:
1 2 3 4 5 6 7 8
typedef struct tagMSLLHOOKSTRUCT
{
POINT pt, // mauskoordinaten
DWORD dwData, // siehe unten
DWORD dwFlags, // ist 1, wenn event eingespeist wurde sonst 0
DWORD dwTime, // Zeitstempel
ULONG_PTR dwExtraInfo, // Zusatzinformationen
} MSLLHOOKSTRUCT;
C/C++ Code:
1 2 3 4 5 6 7 8
typedef struct tagMSLLHOOKSTRUCT
{
POINT pt, // mauskoordinaten
DWORD dwData, // siehe unten
DWORD dwFlags, // ist 1, wenn event eingespeist wurde sonst 0
DWORD dwTime, // Zeitstempel
ULONG_PTR dwExtraInfo, // Zusatzinformationen
} MSLLHOOKSTRUCT;
dwData:
Ist die Message == WM_MOUSEWHEEL, ist das HIGHWORD das Rad-Delta.
Das LOWORD ist reserviert.
ein positiver wert sagt aus, dass das Rad vorwärts gedreht wurde.
Ein RadClick = WHEEL_DATA gleich 120.
Ist die Message WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLCK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP oder WM_NCXBUTTONDBLCLK enthält das HIGHWORD den gedrückten Button, das LOWORD ist reserviert.
WM_MSGFILTER......................Überwacht messages, die as ergebnis
eines eingabeevents in einem dialog, messagebox, menü oder scrollbar erzeugt wurde.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
Andernfalls werden andere für WM_MSGFILTER installierte Hooks nicht ausgeführt und es sollte 0 zurückgegeben werden.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Typ des Eingabeevents, der die letzte message generiert hat.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook zurückzugeben.
MSGF_DDEMGR.... Der Event trat auf, während die DynamicData Exchange ManagementLibrary auf das Ende einer Synchronen Transaktion wartet.
MSGF_DIALOGBOX.. Der Event trat in einem messagewindow oder dialog auf
MSGF_MENU....... Der Event trat in einem Menü auf
MSGF_SCROLLBAR.. Der Event trat in einer Scrollbar auf
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
nicht verwendet.
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Zeiger auf MSG-Struktur
WH_SHELL...............................Empfängt Messages, die für Shellapplikationen nützlich sind
HSHELL_ACCESSIBILITYSTATE.....Zugriffsstauts hat sich geändert Ab Win2000
HSHELL_ACTIVATESHELLWINDOW....Ein Fenster auf dem obersten Level, ohne Zuordnung wurde aktiviert
HSEHLL_APPCOMMAND..........Der User hat den Eingabeevent beendet und die message WM_APPCOMMAND wurde noch nicht bearbeitet ab Win2000
HSHELL_GETMINRECT..........Das System benötigt von einem gerade min-/maximierten Window die Koordinaten. wParam enthält den Windowhandle, lParam einen Pointer auf eine RECT-Struktur.
HSHELL_LANGUAGE............Das Keyboardlayout bzw die Keyboardsprache wurden geändert.
HSHELL_REDRAW..............In der Taskleiste wurde der Titel eines Windows neu gezeichnet. wPram enthält den Windowhandle
HSHELL_TASKMAN.............Die Taskleiste wurde angeklickt.
HSHELL_WINDOWACTIVATED.....Ein anderes Fenster auf dem obersten Level, ohne zuordnung wurde aktiviert. wParam enthält den Windowhandle
HSHELL_WINDOWCREATED.......Ein Window auf dem obersten Level, ohne Zuordnung wurde erzeugt.
HSHELL_WINDOWDESTROYED.....Ein Window auf dem obersten Level, ohne Zuordnung wurde entfernt.
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
siehe nCode
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook
WH_SYSMSGFILTER...............Wie WH_MSGFILTER, lässt sich aber auf das ganze System anwenden.
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook .
Andernfalls werden für WM_SYSMSGFILTER installierte Hooks nicht aufgerufen und es sollte NULL zurückgegeben werden.
Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode
Siehe WH_MSGFILTER (ausser MSGF_DDEMGR)
Ist nCode < 0 muss der Rückgabewert von CallNextHook zurückgegeben werden.
Ist nCode > 0 empfiehlt es sich den Rückgabewert von CallNextHook .
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
wird nicht verwendet.
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
Pointer auf MSG-Struktur
C/C++ Code:
HOOKPROC hkprc
C/C++ Code:
HOOKPROC hkprc
C/C++ Code:
HOOKPROC hkprc
Zeiger auf die Hookprozedur. Ist dwThreadID auf NULL gesetzt oder enthält die ID von einem Thread eines anderen Prozesses, muss dieser Parameter auf eine Hookprozedur in einer DLL zeigen, sonst kann er auf eine Hookprozedur der aktuellen anwendung zeigen.
C/C++ Code:
HINSTANCE hMod
C/C++ Code:
HINSTANCE hMod
C/C++ Code:
HINSTANCE hMod
Instanzhandler der DLL, welche die Hookprozedur enthält, auf welche hkprc zeigt.
Dieser Parameter muss auf NULL gesetzt werden, wenn dwThreadID einen Thread des aktuellen Prozesses darstellt.
C/C++ Code:
DWORD dwThreadID
C/C++ Code:
DWORD dwThreadID
C/C++ Code:
DWORD dwThreadID
ThreadID die der Hookprozedur zugeordnet werden soll.
Ist dieser Parameter NULL, wird die Hookprozedur allen Threads zugeordnet.
HOOK ENTFERNEN:
Syntax:
C/C++ Code:
BOOL UnhookWindowsEx(HHOOK hhook);
C/C++ Code:
BOOL UnhookWindowsEx(HHOOK hhook);
C/C++ Code:
BOOL UnhookWindowsEx(HHOOK hhook);
C/C++ Code:
UnhookWindowsEx
C/C++ Code:
UnhookWindowsEx
C/C++ Code:
UnhookWindowsEx
entfernt eine Hookprozedur aus der Kette.
Rückgabewert:
TRUE, wenn erfolgreich, sonst FALSE
Parameter:
C/C++ Code:
HHOOK hhook
C/C++ Code:
HHOOK hhook
C/C++ Code:
HHOOK hhook
Handle auf den Hook, der entfernt werden soll.
Zuletzt bearbeitet von Ernsti am 08:37:37 23.11.2004, insgesamt 5-mal bearbeitet
@Ernsti
Wow, wirklich ein Klasse beitrag. Die sachen standen auch so ziemlich alle im Buch. Hab nur noch was gesucht das tiefer in das Thema geht.
Bin auch dafür das dies hier in die FAQ sollte...
Werd mir aber deine spitzen zusammenfassung mal genauer anschauen...
Thanx
So, nun ein kleines Beispiel für unser "Hook"-rigen Freunde !
Also, es ist ein einfaches Beispiel, welches die Mauskoordinaten in der X und Y Position mal zwei rechnet, und die umgewandelteten Korrdianten im Tracefenster ausgibt.
//*****************************************************************************
// hookdlg.cpp installiert einen maushook, der die koordinaten ändert.
// die geänderten koordinaten werden rausgetraced.
//*****************************************************************************
#include "stdafx.h"
#include "Hook.h"
#include "HookDlg.h"
//*****************************************************************************
// static member
HHOOK CHookDlg::hMouseHook=NULL;
//*****************************************************************************
// hookdlg.cpp installiert einen maushook, der die koordinaten ändert.
// die geänderten koordinaten werden rausgetraced.
//*****************************************************************************
#include "stdafx.h"
#include "Hook.h"
#include "HookDlg.h"
//*****************************************************************************
// static member
HHOOK CHookDlg::hMouseHook=NULL;
//*****************************************************************************
// hookdlg.cpp installiert einen maushook, der die koordinaten ändert.
// die geänderten koordinaten werden rausgetraced.
//*****************************************************************************
#include "stdafx.h"
#include "Hook.h"
#include "HookDlg.h"
//*****************************************************************************
// static member
HHOOK CHookDlg::hMouseHook=NULL;
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.