Следующий пример надежно возвращает имя процесса, связанного с активным окном, но не работает с новыми современными/универсальными приложениями, поскольку возвращает имя вспомогательного процесса WWAHost.exe в Windows 8 и ApplicationFrameHost.exe в Windows 10, а не в имени приложения.
HWND active_window = GetForegroundWindow();
GetWindowThreadProcessId(active_window, &active_process_id);
HANDLE active_process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, active_process_id);
GetProcessImageFileName(active_process, image_name, 512);
В Windows 10 ApplicationFrameHost.exe - это процесс, который создает дескрипторы окон, и это то, что возвращается GetWindowThreadProcessId(), есть ли еще один API Win32, который можно использовать для активного активного активного универсального приложения?
Также не удалось успешно использовать GetApplicationUserModelId() и GetPackageFullName(), поскольку они возвращают APPMODEL_ERROR_NO_APPLICATION и APPMODEL_ERROR_NO_PACKAGE соответственно, потому что дескриптор active_process - это всего лишь вспомогательный процесс, а не процесс активного приложения.
Любые другие API-интерфейсы, которые будут использоваться для получения имени процесса для нового/универсального приложения с учетом hwnd окна, или каким-либо иным образом определить, что имя процесса универсального приложения активно.
Спасибо заранее!