2010-06-15 8 views
0

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

+0

Possible dupe: http://stackoverflow.com/questions/2265647/how-can-i-get-the-exe-path-of-the-foreground-window/ –

Répondre

1

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.

+0

Peter, cela a fonctionné comme un charme.Merci pour l'aide. –

1

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.

+0

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 –