J'ai une application et souhaite surveiller MSWord en appuyant sur la touche (CROCHET LOCAL), mais je n'arrive pas à comprendre comment trouver le pid à utiliser! Le code ci-dessous CODE WORKS GOOD avec crochet global (pid
= 0
) et avec (pid
= GetCurrentThreadId
). Mais travailler avec GetWindowThreadProcessId
Indifférent Fume:Local Hook ne fonctionne pas
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!";
Je serai très, très gratefull pour toute la lumière sur le problème ...
Avis:
Je souhaite un crochet à MSWord seulement.
Le code ci-dessus fonctionne, failling que lorsque vous essayez de brancher sur une autre application (i.e. .: ne pas utiliser
pid
=0
oupid
=GetCurrentThreadId
), ce qui = "Impossible d'installer le crochet de la souris!".J'essaie déjà
FindWindow
,FindWindowEx
,GetForegroundWindow
,GetActiveWindow
; puisque pas de ces travaux, je crois que le problème estGetWindowThreadProcessId
.
'GetCurrentThreadId' renvoie uniquement un ID de thread, pas un ID de processus. Vous devez utiliser 'GetWindowThreadProcessId' pour récupérer l'ID de processus qui possède la fenêtre spécifiée. Notez que la fenêtre doit appartenir à l'application * MSWord *. Vérifiez également les documentations DLL de ce crochet pour toutes les limitations. Sans les détails sur la méthode que hook DLL utilise, il est impossible de deviner ce qui pourrait causer le problème. – Jay