在DLL中创建线程,在线程中创建键盘钩子,结果返回0,请瓿是什么原因

时间:2021-09-07 18:35:47
我在一个DLL中创建了一个线程
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


我也是这个问题  请问如何解决