Получить идентификатор процесса работающего приложения метро

Я хочу получить идентификатор процесса работающего приложения Metro программно через код C++ из другого процесса. У меня есть статическая информация об этом приложении, такая как имя, полное имя и т. д. Что такое API для этого? Я не могу использовать EnumProcess, так как работающее приложение Metro запускается внутри контейнера приложения WWAHost.exe, поэтому я не могу знать, какой из запущенных процессов WWAHost.exe на самом деле запускает мое приложение Metro.

В обозревателе процессов я заметил, что текущий каталог процесса WWAHost.exe, который выполняет мое приложение Metro, совпадает с местом установки приложения Metro. Может ли это быть отличительным фактором между всеми работающими контейнерами приложений? Если да, то как получить текущий каталог другого процесса?

Чтобы обновить, у меня есть решение по этому поводу на форумах msdn. Вот ссылка:

http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/c9665bf4-00e4-476c-badb-37126efd3f4b/

Но решение использует недокументированный механизм в Windows для получения текущего каталога другого процесса. Я хотел бы использовать это решение, только если нет другого пути.


person user1273404    schedule 22.03.2012    source источник


Ответы (4)


Вы хотите вызвать GetApplicationUserModelId для каждого процесса WWAHost.

Предоставленный пример приложения позволяет передать PID и получить информацию о приложении. Например:

C:\src\GetAppInfo\Debug>GetAppInfo.exe 7400
Process 7400 (handle=00000044)
Microsoft.BingWeather_8wekyb3d8bbwe!App
person EricLaw    schedule 29.10.2013

Используйте GetForegroundWindow, чтобы получить текущее активное окно, после этого используйте GetWindowThreadProcessId, чтобы получить PID текущего окна, затем допустимо, если это приложение WindowsStore с IsImmersiveProcess, затем GetPackageId, чтобы получить информацию о пакете приложения, например имя пакета, версию...

person Thiago Menezes    schedule 24.08.2015

Вы можете использовать GetCurrentProcessId, чтобы получить идентификатор процесса.

person sarvesh    schedule 22.03.2012
comment
Я упустил тот факт, что мне нужен идентификатор процесса приложения метро из другого процесса. Обновил вопрос, чтобы отразить это. - person user1273404; 26.03.2012
comment
Насколько я знаю, призыва к этому нет. Таким образом, вы, вероятно, застряли с решением, которое вы упомянули выше. - person sarvesh; 27.03.2012

Вы можете использовать GetPackageId и GetPackagePath а затем прочитать информацию о приложении из AppxManifest.xml

person krt    schedule 28.03.2012
comment
но эта информация не даст никакого намека на то, в каком процессе размещается это приложение, особенно для приложений на основе Javascript. - person user1273404; 29.03.2012