J'ai un programme qui affiche une boîte de dialogue d'erreur d'exécution. Existe-t-il un moyen de détecter par programme quel exécutable est le parent de cette boîte de dialogue d'un autre processus?Identifier quel exécutable génère une erreur d'exécution
Répondre
Oui. Le code serait quelque chose comme ceci (vérification d'erreur omis):
HWND hWindow = FindWindow(NULL, windowName);
DWORD processId;
GetWindowTheadProcessId(hWindow, &processId);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, processId);
GetModuleFileNameEx(hProcess, NULL, buffer, BUFFER_SIZE);
La fonction GetProcessImageFileName() est à preferrable GetModuleFileNameEx() si vous n'êtes pas concernés par les plates-formes plus anciennes.
Peter, cela a fonctionné comme un charme.Merci pour l'aide. –
Mise à jour: Vous pouvez obtenir un nom de processus à partir d'une poignée de fenêtre à l'aide GetWindowModuleFileName
Pour trouver la poignée de trouver, vous pourriez get the DesktopWindow puis énumérer les jusqu'à ce que vous trouviez celui avec le message d'erreur.
Désolé, nous n'avons pas réussi work :(- GetWindowModuleFileName & GetModuleFileName Fonctionne uniquement avec le processus d'appel sur 2000, XP et Vista.Voir http://support.microsoft.com/?id=228469 –
Possible dupe: http://stackoverflow.com/questions/2265647/how-can-i-get-the-exe-path-of-the-foreground-window/ –