1

我有一个应用程序并希望监视MSWord按键(本地挂钩),但我不知道如何找到要使用的 pid!下面的代码在全局钩子 ( 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!";

我会非常非常感谢任何关于这个问题的...

注意:

  1. 我希望只对MSWord有一个钩子。

  2. 上面的代码有效,仅在尝试挂钩另一个应用程序时失败(即:不使用pid=0pid= GetCurrentThreadId),导致 = "无法安装鼠标挂钩!" .

  3. 我已经尝试过FindWindow,,,, FindWindowEx; 由于这不起作用,我相信问题是。GetForegroundWindowGetActiveWindowGetWindowThreadProcessId

4

1 回答 1

2

SetWindowsHookEx需要线程 ID,而不是进程 ID。改为传递线程 ID:

DWORD threadID = GetWindowThreadProcessId(hWindow, 0);

if(!InstHook(threadID, (void *)(callIt) )) {...}
于 2012-08-29T12:37:41.110 回答