У меня есть приложение, которое помогает людям с ограниченными возможностями. Для работы он отслеживает, какое окно в данный момент находится на переднем плане. Обычно я использую эту функцию, чтобы получить исполняемый файл процесса.
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;
}
К сожалению, если главное окно - это окно файлового менеджера Vista (окно открывается при нажатии Пуск-> Компьютер), то GetModuleFileNameEx()
завершается ошибкой с кодом ошибки 299, который говорит, что у меня нет привилегий для этого действия. Мой код работает для любого обычного приложения, но не для окон, встроенных в окно (проводник). Мне нужно знать, когда это окно находится на переднем крае. Есть ли другой способ сделать это? Я попытался прочитать заголовок окна, но он просто возвращает текущий каталог, который отображается. Есть идеи?