我有一个应用程序,希望监视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
上。
SetWindowsHookEx
需要线程ID,而不是进程ID。改为传递线程ID:
DWORD threadID = GetWindowThreadProcessId(hWindow, 0);
if(!InstHook(threadID, (void *)(callIt) )) {...}