Ich habe eine Anwendung, die Menschen mit Behinderungen hilft. Um zu arbeiten, verfolgt es, welches Fenster gerade im Vordergrund ist. Normalerweise verwende ich diese Funktion, um den Prozess ausführbar zu machen.Wie kann ich den Prozess Dateinamen unter Vista bekommen?
bool GetWindowProcessExe2(HWND hwnd, wxString& process_exe)
//LPTSTR buf, DWORD size)
{
DWORD result = 0;
DWORD pid = 0;
GetWindowThreadProcessId(hwnd, &pid);
if (HANDLE process =
OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid))
{
char buff[512];
LPTSTR pbuff = buff;
result = GetModuleFileNameEx(process, 0, pbuff, 512);
if(result == 0)
{
//failed.
wxLogError("GetModuleFileNameEx failed with error code %d", GetLastError());
}
CloseHandle(process);
process_exe = fromCString(pbuff);
}
return result > 0 ? true : false;
}
Leider, wenn das Fenster im Vordergrund ist das Vista-Datei-Manager-Fenster (das Fenster, wenn Sie öffnet Start- klicken> Computer), schlägt fehl GetModuleFileNameEx()
mit dem Fehlercode 299, der sagt, dass ich dies nicht tun haben Privilegien für diese Aktion. Mein Code funktioniert für jede normale Anwendung, aber nicht für das Windows-Fenster (den Datei-Explorer). Ich muss wissen, wann dieses Fenster im Vordergrund steht. Gibt es einen anderen Weg, es zu tun? Ich habe versucht, den Fenstertitel zu lesen, aber das zeigt nur das aktuelle Verzeichnis an. Irgendwelche Ideen?
hatte dasselbe Problem, verwenden Sie ['GetProcessImageFileName'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683217 (v = vs.85) .aspx) stattdessen – user1438233