本地挂钩不工作



我有一个应用程序,希望监视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!";

我将非常、非常感谢你对这个问题的任何了解。。。

注意:

  1. 我只希望挂钩到MSWord

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

  3. 我已经尝试过FindWindowFindWindowExGetForegroundWindowGetActiveWindow;由于这些都不起作用,我认为问题出在GetWindowThreadProcessId上。

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

DWORD threadID = GetWindowThreadProcessId(hWindow, 0);
if(!InstHook(threadID, (void *)(callIt) )) {...}

相关内容

  • 没有找到相关文章

最新更新