Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - MFC ::  Hooks  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
guenni81
Autor

Benutzerprofil
Anmeldungsdatum: 01.08.2004
Beiträge: 2146
Beitrag guenni81 Autor 17:51:03 16.11.2004   Titel:   Hooks            Zitieren

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...

_________________
mfg
Günni
Mein Github|Mein Launchpad
Werbeunterbrechung
Disi
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.05.2003
Beiträge: 92
Beitrag Disi Mitglied 09:33:56 17.11.2004   Titel:              Zitieren

Huhu,

ein Howto für Systemweite hooks findest du hier - http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5685/

Dann steht auch im buch von Dirk Louis was dazu - http://www.amazon.de/exec/obidos/ASIN/3827267749/qid=1088717590/ref=sr_8_xs_ap_i11_xgl14/302-7015883-2159225

Ansonsten kann ich nur Google empfehlen :(

Mfg

Disi

_________________
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
guenni81
Autor

Benutzerprofil
Anmeldungsdatum: 01.08.2004
Beiträge: 2146
Beitrag guenni81 Autor 10:03:39 17.11.2004   Titel:              Zitieren

Disi schrieb:
Huhu,

ein Howto für Systemweite hooks findest du hier - http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5685/

Dann steht auch im buch von Dirk Louis was dazu - http://www.amazon.de/exec/obidos/ASIN/3827267749/qid=1088717590/ref=sr_8_xs_ap_i11_xgl14/302-7015883-2159225

Ansonsten kann ich nur Google empfehlen :(

Mfg

Disi


In dem Buch steht leider nicht sehr viel zu dem Thema Hooks und bei google bekomme ich irgendwie keine gescheiten ergebnisse... :(

_________________
mfg
Günni
Mein Github|Mein Launchpad
Ernsti
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 134
Beitrag Ernsti Mitglied 09:54:49 18.11.2004   Titel:              Zitieren

Die Funktion
C/C++ Code:
SetWindowHookEx
C/C++ Code:
SetWindowHookEx
C/C++ Code:
SetWindowHookEx
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
C/C++ Code:
UnhookWindowsEx
C/C++ Code:
UnhookWindowsEx
C/C++ Code:
UnhookWindowsEx
aufgerufen.

HOOK ERZEUGEN:

Syntax:

C/C++ Code:
HHOOK SetWindowsHookEx(int nFilterType,    // Filtertyp
                       HOOKPROC hkprc,     // Hookprozedur
                       HINSTANCE hMod,     // Handle zur Instanz der Applikation
                       DWORD dwThreadID);  // Thread Identifikation
C/C++ Code:
HHOOK SetWindowsHookEx(int nFilterType, // Filtertyp
HOOKPROC hkprc, // Hookprozedur
HINSTANCE hMod, // Handle zur Instanz der Applikation
DWORD dwThreadID); // Thread Identifikation
C/C++ Code:
HHOOK SetWindowsHookEx(int nFilterType,    // Filtertyp
                       HOOKPROC hkprc,     // Hookprozedur
                       HINSTANCE hMod,     // Handle zur Instanz der Applikation
                       DWORD dwThreadID);  // Thread Identifikation


C/C++ Code:
SetWindowsHookEx
C/C++ Code:
SetWindowsHookEx
C/C++ Code:
SetWindowsHookEx

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
C/C++ Code:
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
C/C++ Code:
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)

Rückgabewert:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

HBCT_ACTIVATE
HBCT_CREATEWND
HBCT_DESTROYWND
HBCT_MINMAX
HBCT_MOVESIZE
HBCT_SETFOCUS
HBCT_SYSCOMMAND


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.

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

Syntax:
C/C++ Code:
LRESULT CALLBACK DebugProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK DebugProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK DebugProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK ForegroundIdleProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK ForegroundIdleProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK ForegroundIdleProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam,LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam,LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam,LPARAM lParam);


Rückgabewert:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK JournalPlaybackProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK JournalPlaybackProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK JournalPlaybackProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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 !

Die EVENTMSG-Struktur:

C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
typedef struct tagEVENTMSG
{
    UINT message,    // message
    UINT paramL,     // messageabhängige informationen
    UINT paramH,     // messageabhängige informationen
    DWORD dwTime,    // Absendezeitpunkt
    HWND hwnd        // händl aufs receiverfenster
} EVENTMSG, *pEVENTMSG;
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct tagEVENTMSG
{
UINT message, // message
UINT paramL, // messageabhängige informationen
UINT paramH, // messageabhängige informationen
DWORD dwTime, // Absendezeitpunkt
HWND hwnd // händl aufs receiverfenster
} EVENTMSG, *pEVENTMSG;
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct tagEVENTMSG
{
    UINT message,    // message
    UINT paramL,     // messageabhängige informationen
    UINT paramH,     // messageabhängige informationen
    DWORD dwTime,    // Absendezeitpunkt
    HWND hwnd        // händl aufs receiverfenster
} EVENTMSG, *pEVENTMSG;



}

WH_JOURNALRECORD...........Installiert eine Hookprozedur, die Messages aufzeichnet, die an die Messagequeue des Systems geschickt wurde.

Syntax:

C/C++ Code:
LRESULT CALLBACK JournalRecordProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK JournalRecordProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK JournalRecordProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

wird ignoriert.

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 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 !

WH_KEYBOARD......................Überwacht Tastaturmessages

Syntax:
C/C++ Code:
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabwert:
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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

Syntax:
C/C++ Code:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewerte:

C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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.

C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam
C/C++ Code:
WPARAM wParam

Nachricht zb. WM_SYSKEYUP, WM_KEYDOWN, WM_KEYUP....

C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam
C/C++ Code:
LPARAM lParam

Zeiger auf eine KBDLLHOOKSTRUCT-Struktur

Die KBDLLHOOKSTRUCT - Struktur

C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
typedef struct tagKBDLLHOOKSTRUCT
{
    DWORD vkCode,     // virtueller keycode
    DWORD scanCode,   // scanCode
    DWORD dwFlags,    // siehe unten
    DWORD dwTime,     // Zeitstempel
    ULONG_PTR dwExtraInfo  // Zusatzinformationen
} KDBLLHOOKSTRUCT, *PKDBLLHOOKSTRUCT;
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct tagKBDLLHOOKSTRUCT
{
DWORD vkCode, // virtueller keycode
DWORD scanCode, // scanCode
DWORD dwFlags, // siehe unten
DWORD dwTime, // Zeitstempel
ULONG_PTR dwExtraInfo // Zusatzinformationen
} KDBLLHOOKSTRUCT, *PKDBLLHOOKSTRUCT;
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct tagKBDLLHOOKSTRUCT
{
    DWORD vkCode,     // virtueller keycode
    DWORD scanCode,   // scanCode
    DWORD dwFlags,    // siehe unten
    DWORD dwTime,     // Zeitstempel
    ULONG_PTR dwExtraInfo  // Zusatzinformationen
} KDBLLHOOKSTRUCT, *PKDBLLHOOKSTRUCT;


Flags:

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

WH_MOUSE.............................Überwacht Mousemessages

Syntax:
C/C++ Code:
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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

Syntax:
C/C++ Code:
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK MessageProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK MessageProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK MessageProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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

Syntax:
C/C++ Code:
LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

Sollte NULL sein

Parameter:
C/C++ Code:
int nCode
C/C++ Code:
int nCode
C/C++ Code:
int nCode


Kann einen folgende Werte haben:

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.

Syntax:
C/C++ Code:
LRESULT CALLBACK SysMsgProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK SysMsgProc(int nCode, WPARAM wParam, LPARAM lParam);
C/C++ Code:
LRESULT CALLBACK SysMsgProc(int nCode, WPARAM wParam, LPARAM lParam);


Rückgabewert:
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT
C/C++ Code:
LRESULT

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
Pulse
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.08.2004
Beiträge: 649
Beitrag Pulse Mitglied 10:03:14 18.11.2004   Titel:              Zitieren

Wow, super Beitrag. Danke Ernsti. Ich glaub das wär was für die FAQ :)
guenni81
Autor

Benutzerprofil
Anmeldungsdatum: 01.08.2004
Beiträge: 2146
Beitrag guenni81 Autor 10:51:50 18.11.2004   Titel:              Zitieren

@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

_________________
mfg
Günni
Mein Github|Mein Launchpad
Ernsti
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 134
Beitrag Ernsti Mitglied 10:57:34 18.11.2004   Titel:              Zitieren

Is noch nicht ganz komplett, wie ihr seht fehlen noch einige beschreibungen, bin aber aus zeitgründen noch nicht dazu gekommen. !
Ernsti
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 134
Beitrag Ernsti Mitglied 08:38:34 23.11.2004   Titel:              Zitieren

so, das ist erstmal ferddig - wenn ihr wollt, könnt ihr das in die FAQ klatschen :o)
guenni81
Autor

Benutzerprofil
Anmeldungsdatum: 01.08.2004
Beiträge: 2146
Beitrag guenni81 Autor 15:45:37 23.11.2004   Titel:              Zitieren

Wäre klasse wenn man dies hier in die FAQ verschiebene könnte, da sich Ernsti so viel mühe gegeben hat und alles so super erklärt...

_________________
mfg
Günni
Mein Github|Mein Launchpad
Ernsti
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.06.2001
Beiträge: 134
Beitrag Ernsti Mitglied 21:28:09 02.12.2004   Titel:              Zitieren

So, nun ein kleines Beispiel für unser "Hook"-rigen Freunde ! :o)

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.

Das ganze ist eine einfache Dialoganwendung.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//*****************************************************************************
// HookDlg.h
//*****************************************************************************

#pragma
once

class CHookDlg : public CDialog
{
public:
    CHookDlg(CWnd* pParent = NULL);   
    enum { IDD = IDD_HOOK_DIALOG };
    static HHOOK   hMouseHook;
protected:
    virtual BOOL OnInitDialog();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnDestroy();
};

//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//*****************************************************************************
// HookDlg.h
//*****************************************************************************

#pragma
once

class CHookDlg : public CDialog
{
public:
CHookDlg(CWnd* pParent = NULL);
enum { IDD = IDD_HOOK_DIALOG };
static HHOOK hMouseHook;
protected:
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnDestroy();
};

//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//*****************************************************************************
// HookDlg.h
//*****************************************************************************

#pragma
once

class CHookDlg : public CDialog
{
public:
    CHookDlg(CWnd* pParent = NULL);   
    enum { IDD = IDD_HOOK_DIALOG };
    static HHOOK   hMouseHook;
protected:
    virtual BOOL OnInitDialog();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnDestroy();
};

//*****************************************************************************
//*****************************************************************************
//*****************************************************************************


C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//*****************************************************************************
// 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;


//*****************************************************************************
// hookprozedur
//*****************************************************************************

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode >= 0 && nCode == HC_ACTION)
    {
        MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*) lParam;
        long nTempX = mhs->pt.x*2;
        long nTempY = mhs->pt.x*2;

        HWND hwnd=FindWindow(NULL,"Hook");  // Hook ist der Titel unseres Dialogs !!!!

        if(!hwnd)
            TRACE("Fenster nicht gefunden !");

        PostMessage(hwnd, nCode, wParam, MAKELPARAM(nTempX, nTempY));

        CString str;
        str.Format("X:%d (%d) ,Y:%d (%d)\n",nTempX,mhs->pt.x,nTempY,mhs->pt.y);
        TRACE(str);
    }
    return CallNextHookEx(CHookDlg::hMouseHook, nCode, wParam, lParam);
}


//*****************************************************************************
// konstruktor
//*****************************************************************************

CHookDlg::CHookDlg(CWnd* pParent ) : CDialog(CHookDlg::IDD, pParent)
{
   
}



//*****************************************************************************
// messagemap
//*****************************************************************************

BEGIN_MESSAGE_MAP(CHookDlg, CDialog)
    ON_WM_DESTROY()
END_MESSAGE_MAP()


//*****************************************************************************
// hook anlegen
//*****************************************************************************

BOOL CHookDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    hMouseHook = SetWindowsHookEx(WH_MOUSE,   (HOOKPROC) MouseHookProc, AfxGetInstanceHandle(),AfxGetThread()->m_nThreadID);
    return TRUE;
}


//*****************************************************************************
// hier hook wieder entfernen !
//*****************************************************************************

void CHookDlg::OnDestroy()
{
    if(hMouseHook)
    {
        UnhookWindowsHookEx(hMouseHook);
        hMouseHook=NULL;
    }
}

//*****************************************************************************
//*****************************************************************************
//*****************************************************************************


[cpp]
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//*****************************************************************************
// 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;


//*****************************************************************************
// hookprozedur
//*****************************************************************************

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode >= 0 && nCode == HC_ACTION)
{
MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*) lParam;
long nTempX = mhs->pt.x*2;
long nTempY = mhs->pt.x*2;

HWND hwnd=FindWindow(NULL,"Hook"); // Hook ist der Titel unseres Dialogs !!!!

if(!hwnd)
TRACE("Fenster nicht gefunden !");

PostMessage(hwnd, nCode, wParam, MAKELPARAM(nTempX, nTempY));

CString str;
str.Format("X:%d (%d) ,Y:%d (%d)\n",nTempX,mhs->pt.x,nTempY,mhs->pt.y);
TRACE(str);
}
return CallNextHookEx(CHookDlg::hMouseHook, nCode, wParam, lParam);
}


//*****************************************************************************
// konstruktor
//*****************************************************************************

CHookDlg::CHookDlg(CWnd* pParent ) : CDialog(CHookDlg::IDD, pParent)
{

}



//*****************************************************************************
// messagemap
//*****************************************************************************

BEGIN_MESSAGE_MAP(CHookDlg, CDialog)
ON_WM_DESTROY()
END_MESSAGE_MAP()


//*****************************************************************************
// hook anlegen
//*****************************************************************************

BOOL CHookDlg::OnInitDialog()
{
CDialog::OnInitDialog();
hMouseHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC) MouseHookProc, AfxGetInstanceHandle(),AfxGetThread()->m_nThreadID);
return TRUE;
}


//*****************************************************************************
// hier hook wieder entfernen !
//*****************************************************************************

void CHookDlg::OnDestroy()
{
if(hMouseHook)
{
UnhookWindowsHookEx(hMouseHook);
hMouseHook=NULL;
}
}

//*****************************************************************************
//*****************************************************************************
//*****************************************************************************


[cpp]
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//*****************************************************************************
// 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;


//*****************************************************************************
// hookprozedur
//*****************************************************************************

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode >= 0 && nCode == HC_ACTION)
    {
        MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*) lParam;
        long nTempX = mhs->pt.x*2;
        long nTempY = mhs->pt.x*2;

        HWND hwnd=FindWindow(NULL,"Hook");  // Hook ist der Titel unseres Dialogs !!!!

        if(!hwnd)
            TRACE("Fenster nicht gefunden !");

        PostMessage(hwnd, nCode, wParam, MAKELPARAM(nTempX, nTempY));

        CString str;
        str.Format("X:%d (%d) ,Y:%d (%d)\n",nTempX,mhs->pt.x,nTempY,mhs->pt.y);
        TRACE(str);
    }
    return CallNextHookEx(CHookDlg::hMouseHook, nCode, wParam, lParam);
}


//*****************************************************************************
// konstruktor
//*****************************************************************************

CHookDlg::CHookDlg(CWnd* pParent ) : CDialog(CHookDlg::IDD, pParent)
{
   
}



//*****************************************************************************
// messagemap
//*****************************************************************************

BEGIN_MESSAGE_MAP(CHookDlg, CDialog)
    ON_WM_DESTROY()
END_MESSAGE_MAP()


//*****************************************************************************
// hook anlegen
//*****************************************************************************

BOOL CHookDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    hMouseHook = SetWindowsHookEx(WH_MOUSE,   (HOOKPROC) MouseHookProc, AfxGetInstanceHandle(),AfxGetThread()->m_nThreadID);
    return TRUE;
}


//*****************************************************************************
// hier hook wieder entfernen !
//*****************************************************************************

void CHookDlg::OnDestroy()
{
    if(hMouseHook)
    {
        UnhookWindowsHookEx(hMouseHook);
        hMouseHook=NULL;
    }
}

//*****************************************************************************
//*****************************************************************************
//*****************************************************************************


[cpp]
C/C++ Forum :: FAQ - MFC ::  Hooks  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.