私はアプリケーションを持っていて、MSWord のキープレス (LOCAL HOOK) を監視したいのですが、使用する pid を見つける方法がわかりません! 以下の CODE WORKS GOOD は、グローバル フック ( 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