ڹHOOKϸ˵ 

HOOKWindowsϢƵһ֣ͨáӡӦóϵͳϢ¼йˣ޷ʵϢȻôҲҪһĴ۵ġڶôһ̣ϵͳܻܵһӰ죬ԴڱҪʱʹáӡʹϼʱɾ 
ǿHOOKôװúɾġӦóͨǵSetWindowsHookEx()аװģ亯ԭ£

SetWindowsHookEx(

Int idHook;

HOOKPROC lpfn;

HINSTANCE hMod;

DWORD dwThreadId;

);

˵

idHook ǡӡͣӡһ13֣±

ӡ 
 

WH_CALLWNDPROC 
ϵͳϢ͵ָ֮ǰġӡ 

WH_CALLWNDPROCRET 
ϢѾڴдġӡ 

WH_CBT 
ڼѵġӡ 

WH_DEBUG 
ӡ 

WH_FOREGROUNDIDLE 
ǰ̨дڡӡ 

WH_GETMESSAGE 
ϢͶݵġӡ 

WH_JOURNALPLAYBACK 
طǰͨWH_JOURNALRECORDӡ¼Ϣ 

WH_JOURNALRECORD 
Ϣ¼ӡ 

WH_KEYBOARD 
Ϣӡ 

WH_MOUSE 
Ϣӡ 

WH_MSGFILTER 
ԻϢ򡢲˵Ϣӡ 

WH_SHELL 
ǡӡ 

WH_SYSMSGFILTER 
ϵͳϢӡ 


lpfn ָ򡰹ӡ̵ָ롣

hMod ӡģľ

dwThreadId ӡ̵߳ıʶ

ͨǶǰѡӡɶ̬ӿ⣬ĺôǿϵͳڵÿ̷ʡҲϵͳֱӵãҵĽ黹ö̬⡣ö̬ĻôSetWindowsHookEx()еĵǸö̬ӿģľһ̷ֻʵġӡԽ䡱ӡ̷ڰװӡͬһ߳ڣʱSetWindowsHookEx()еĵΪ̵߳hInstanceװӡַ1.԰ɶ̬ӿļͳһ롣2.ڳκεطֱӵá2ֵķ̫鷳ҲãҾͲϸ֮µ1ֱȽϼ򵥡䡱ӡĹ̶ڶ̬ӿɡSetWindowsHookEx()һװһĳ͵ġӡӵ¼ϵͳͻӦ͵ġӡʼġӡ̣ӡÿӡ̶ҪǷ¼ݸһӡ̡ҪݵĻҪCallNestHookEx()ɹʱءӡһӡ̵ķֵֵڡӡ͡ԭ£

LRESULT CallNextHookEx(

HHOOK hhk;

int nCode;

WPARAM wParam;

LPARAM lParam;

);

hhkΪǰӡľSetWindowsHookEx()ءNCodeΪӡ̵¼롣wParamlParam ֱǴӡ̵wParamֵ庬롱ӡйء

ͷšӡ

ͷšӡȽϼ򵥣ֻһҪӡʱӦʱͷšǵUnhookWindowsHookEx()ʵֵģԭ£

UnhookWindowsHookEx(

HHOOK hhk;

);

ɹTRUE򷵻FALSE

ǲ׵Ļ뿴һЩ͡ӡ˵

LRESULT WINAPI CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)

{

if(nCode<0)

return CallNextHookEx(NULL,nCode,wParam,lParam);

switch(nCode)

{

case HC_ACTION:

//ӡҪʲôĴ

break;

default:

break;

}

return CallNextHookEx(NULL,nCode,wParam,lParam);

}

WH_CALLWNDPROCӡĴ룬ˡӡɺSendMessage͸ڹ̵ϢϵͳϢ͵ĿĴ֮ǰWH_CALLWNDPROC ӡ̡

LRESULT WINAPI CallwndProc(int nCode,WPARAM,wParam,LPARAM lParam)

{

if(nCode<0) return callNextHookEx(NULL,nCode,wParam,lParam);

switch(nCode)

{

case HC_ACTION:

switch(wParam)

{

Case PM_REMOVE:

//ĳӦóGetMessageǴPM_REMOVE//PeekMessageϢȥһϢ

Break;

Case PM_NOREMOVE:

//ĳӦóPM_NOREMOVEΪPeekMessage

break;

default:

break;

}

break;

default:

break;

}

return CallNextHookEx(NULL,nCode,wParam,lParam);

}

ǵWH_GETMESSAGEĺ˺ӦóӺGetMessage PeekMessageصϢӦóùWH_GETMESSAGEͼ̵Լϵͳ͵ϢеϢ

LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam,LPARAM lParam)

{

If(nCode<0) Return callNextHookEx(NULL,nCode,wParam,lParam);

Switch(nCode)

{

case HCBT_ACTIVATE:

//ϵͳһ

break;

case HCBT_CLICKSKIPPED:

//ϵͳϵͳϢȥһϢ

break;

case HCBT_CREATEWND:

//ϵͳһ

break;

case HCBT_DESTROYWND:

//ϵͳرһ

break;

case HCBT_KEYSKIPPED:

//ϵͳϵͳϢȥһϢ

break;

case HCBT_MINMAX:

//ϵͳ󻯻Сһ

break;

case HCBT_MOVESIZE:

//ϵͳƶһڻıһڵĴС

break;

case HCBT_QS:

//ϵͳϵͳϢмWM_QUEUESYNCϢ

break;

case HCBT_SETFOCUS:

//ϵͳü봰

break;

case HCBT_SYSCOMMAND:

//Ҫִһϵͳ

break;

default:

//

break;

}

return CallNextHookEx(NULL,nCode,wParam,lParam);

}

ÿ֡ӡͶӦĺЩĲһģȤѿڣͣӣģҵǵϸ˵

ҸһġӡװɾĹ̵Ĵ롣

#include "stdafx.h"

#include "hook.h"

HINSTANCE hInstance;

HHOOK hhkKeyboard;

BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved)

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

hInstance=(HINSTANCE)hModule;

return TRUE;

}

LRESULT KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)

{

MessageBeep(-1);

return CallNextHookEx(hhkKeyboard,nCode,wParam,lParam);

}

HOOK_API BOOL EnableKeyboardCapture()

{

if(!(hhkKeyboard=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hInstance,0)))

return FALSE;

return TRUE;

}

HOOK_API BOOL DisableKeyboardCapture()

{

return UnhookWindowsHookEx(hhkKeyboard);

}

ע⣺һ̬ӿļ

ڳҪáӡʱEnableKeyboardCapture()Ϳ㰴ʱͻط

 

 
-------------------------------------------------------------------------------------------------------------------------------------  
绰13065817099䣺wlqiu@sina.comQQ331290MSNwlqiu@163.net  

ĹҡȨ(2001 - 2002)  
Copyright? Wishes Studio, All rights reserved.  