小弟在一个DLL文件中有如下代码:
//hWin是在CPP文件中已经获得的窗口句柄
void SetHook(HWND hWin)
{
……
ThisDllName = GetModuleHandle("Find.dll") ;
ThreadId = GetWindowThreadProcessId(hWin, NULL) ;
h_hBut = SetWindowsHookEx(WH_CALLWNDPROC, KeyFunc, ThisDllName, 0) ; //*
……
}
LRESULT CALLBACK KeyFunc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(wParam == VK_RETURN)
{
MessageBox("hello") ;
}
return CallNextHookEx(h_hBut, nCode, wParam, lParam) ;
}
此时运行程序,一切正常,按下“回车”之后,弹出对话框。
但因为不需要全局钩子,于是我将*号(红色的那句)最后一个参数改为:ThreadId ,但此时再运行时,按下“回车”却没有反应了。。查过MSDN后自己觉得GetWindowThreadProcessId函数的用法应该没错(我英语很错菜)。小弟实在不知这是为什么,请各位大虾帮帮忙。多谢了!!