首先上面有位仁兄说多LoadLibrary这种方法是不应该的 因为当你SetWindowHookEx的时候,系统会遍历所有进程,并把dll(你应该写在dll里)的代码加载进每一个进程的地址空间.所以只要你不UnhookWIndowEx ,那你在exe退出的时候,其实hook的作用依然是存在的值得注意的是你应该把hook的代码放在dll里,因为n个进程"等"着加载它,另外你希望你的程序退出后依然有作用,这样当然是没问题,只要你不调用UnhookWindowEx,但你还是应该在不用的时候记得调用Un... Because the hook will degrade system performance.
DLL中:
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
...
return CallNextHookEx(hKeyboardProc,nCode, wParam, lParam );
}extern "C" __declspec(dllexport)
void starthook()
{
hKeyboardProc=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,dllhin,0);
}在EXE中:
loadlibray()-> starthook()
然后EXE推出,但HOOK也随之消失,我希望EXE退出后HOOK不被windows注销,
要怎么做?
DLL_PROCESS_ATTACH: starthook();
而不是在exe中
在dll就不会消失!
因为当你SetWindowHookEx的时候,系统会遍历所有进程,并把dll(你应该写在dll里)的代码加载进每一个进程的地址空间.所以只要你不UnhookWIndowEx
,那你在exe退出的时候,其实hook的作用依然是存在的值得注意的是你应该把hook的代码放在dll里,因为n个进程"等"着加载它,另外你希望你的程序退出后依然有作用,这样当然是没问题,只要你不调用UnhookWindowEx,但你还是应该在不用的时候记得调用Un...
Because the hook will degrade system performance.
本来我以为这个技术可以,但是,
http://www.csdn.net/expert/topic/1029/1029123.xml?temp=.8733026
要是他还要退出,你就在hook的处理函数里来个无限循环
我想是这样的~
只用一个exe loaddll 和执行一个函数,就可以做到在w98 w2k下通过
其他系统没有试过,应该没问题,但是debug和release好像有点不同!