DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
gInstance = hInstance;
if (!AfxInitExtensionModule(AssistDLL, hInstance))
return 0;
StartHook();
}
}
bool StartHook()
{
DWORD theThreadId;
HANDLE Trd = ::CreateThread(NULL,0,MyThread,NULL,0,&theThreadId);
if (!Trd) ::OutputDebugString("Creating Thread failed at StartHook()....");
else ::OutputDebugString("Thread created....");
return TRUE;
}
然后在线程中创建一个键盘钩子和消息钩子
DWORD WINAPI MyThread(LPVOID lpParameter)//线程函数
{
g_hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProcg,gInstance, ::GetCurrentThreadId());
m_hHook=SetWindowsHookEx(WH_CALLWNDPROC , (HOOKPROC)CallWndProc, gInstance, ::GetCurrentThreadId());
::sprintf(tmp, "MyThread->g_hHook = %x, m_hHook=%x", g_hHook,m_hHook);
::OutputDebugString(tmp);
return 0;
}
结果发现,消息钩子可以成功创建(m_hHook不为0),而键盘钩子却不能创建(g_hHook总为零),不知是什么原因。
我也试过下面的用法,结果都返回0
g_hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProcg,gInstance, NULL);
g_hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProcg,::AfxGetInstanceHandle(), ::GetCurrentThreadId());
4 个解决方案
#1
在线等候。。。谢谢大大赐教啊
#2
以上所述是VC 6.0工程,在windows XP下调试通过,但运行时,发现创建钩子不成功。
#3
已经解决了
#4
我也是这个问题 请问如何解决
#1
在线等候。。。谢谢大大赐教啊
#2
以上所述是VC 6.0工程,在windows XP下调试通过,但运行时,发现创建钩子不成功。
#3
已经解决了
#4
我也是这个问题 请问如何解决