我有一个应用程序并希望监视 MSWord 按键(LOCAL HOOK),但我无法弄清楚如何找到要使用的pid!下面的代码CODE通过全局挂钩(pid
= 0
)和(pid
= GetCurrentThreadId
)来实现。但不适用于GetWindowThreadProcessId
:
HWND hWindow = FindWindowEx(NULL,NULL,String("Notepad").w_str(),NULL);
if (!hWindow) {
ShowMessage("hWindow fail");
return;
}
unsigned long pid;
GetWindowThreadProcessId(hWindow ,&pid);
//pid = GetCurrentThreadId();
if (!hWindow) {
ShowMessage("pid fail");
return;
}
String s = "HookDLL.dll";
DllHandle=LoadLibrary(s.w_str());
HOOKFCT_2 InstHook=reinterpret_cast<HOOKFCT_2> (GetProcAddress(DllHandle,"InstallHook"));
if(!InstHook(pid, (void *)(callIt) ))
{
Label1->Caption="Unable to install mouse hook!";
}
else Label1->Caption="Mouse hook installed!";
对于这个问题,我会非常非常感谢...
注意:
我希望只挂机 MSWord 。
以上代码有效,只有在尝试挂钩其他应用时才会失效(即:不使用pid
= 0
或pid
= GetCurrentThreadId
),导致= “无法安装鼠标挂钩!”。
我已尝试FindWindow
,FindWindowEx
,GetForegroundWindow
,GetActiveWindow
;由于这不起作用,我相信问题是GetWindowThreadProcessId
。
答案 0 :(得分:2)
SetWindowsHookEx
需要线程ID ,而非进程ID。改为传递线程ID:
DWORD threadID = GetWindowThreadProcessId(hWindow, 0);
if(!InstHook(threadID, (void *)(callIt) )) {...}