关于键盘钩子的奇怪问题,快想破脑袋了!高手来解决一下!
Y___Y 2006-11-05 09:27:34 我编写了一键盘钩子,其DllMain函数如下
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hInst=HINSTANCE(hModule);
InstallHOOK();<--------------------------------------------添加处
break;
case DLL_PROCESS_DETACH:
if(g_hHook)UninstallHOOK();<-------------------------------添加处
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return 1;
}
添加的两句代码说明dll载入/卸载时自动载入/卸载钩子,于是我又编了一个exe文件来加载,键盘钩子像我预料的一样成功了,试验没任何问题。
这时我又用创造远程线程来注入这个dll(注入程序完全没问题),可是发现虽然已经注入,但键盘钩子完全不起作用,调试一下,InstallHOOK()执行正常,但无法截获键盘。不知为什么这样,高手解释一下。
我改了一下代码,如下
case DLL_THREAD_ATTACH:
InstallHOOK();
编译后将该dll插入IE,新打开一个网页后,键盘终于勾住了,但造成每IE新建一个线程,就勾一次,造成了按一个键,键盘记录文件记录多个相同的键。
以后无论怎么改进,都不尽人意,望高手指点一二!