quanhuang Ответов: 1

Почему я не могу получить путь процесса, который создает окно рабочего стола с помощью getmodulefilenameex?


Почему я не могу получить путь процесса(полученного GetWindowThreadProcessId+OpenProcess), который создает окно рабочего стола (полученное GetDesktopWindow) с помощью GetModuleFileNameEx?
#include <stdio.h>
#include <windows.h>
#pragma comment (lib, "user32.lib")
#include <Psapi.h>
#pragma comment(lib,"Kernel32.lib")

main(){
	FILE *fp = fopen("C:/windowLog.txt", "a");
	HWND desktopWindow=GetDesktopWindow();
	fprintf(fp, "Handle of Desktop window is%x\n", (unsigned int)desktopWindow);
	CHAR dName[MAX_PATH] = { 0 };
	GetWindowTextA(desktopWindow, dName, MAX_PATH);
	fprintf(fp, "Title of desktop window is %s\n", dName);
	GetClassName(desktopWindow, dName, MAX_PATH);
	fprintf(fp, "Desktop window class is %s\n", dName);
	DWORD pid = 0;
	GetWindowThreadProcessId(desktopWindow, &pid);
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	CHAR path[260] = { 0 };
	GetModuleFileNameEx(hProcess, NULL, path, 260);
	fprintf(fp, "The path of the process is %s\n\n", path);
	fclose(fp);

Я не могу получить путь от GetModuleFileNameEx.

Что я уже пробовал:

GetDesktopWindow + GetWindowThreadProcessId + OpenProcess + GetModuleFileNameEx

Richard MacCutchan

Пожалуйста, покажите свой код и объясните, что именно идет не так. Есть ли у вас правильные разрешения, установленные в вашем приложении?

quanhuang

Большое спасибо.Вот мой код.Пожалуйста, взгляните.

Richard MacCutchan

Запустив это через отладчик, GetWindowThreadProcessId возвращает 0. Таким образом, похоже, что вы не можете получить эту информацию. Это может быть ограничение Windows.

quanhuang

Большое спасибо!

1 Ответов

Рейтинг:
2

OriginalGriff

Вероятно, это ограничение безопасности: рабочий стол создается системным процессом как часть процедуры входа в систему, но до того, как он запускает сеанс пользователя и его процессы, и, таким образом, создается процессом в другом сеансе. Или, по крайней мере, так я ее читаю: Создание оконной станции и рабочего стола (Windows)[^]