【发布时间】:2015-11-28 08:59:28
【问题描述】:
以下示例可靠地返回了与活动窗口关联的进程的名称,但不适用于较新的现代/通用应用程序,因为它返回了帮助进程的名称 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() 返回的,是否有另一个 Win32 API 可用于获取处于活动状态的通用应用程序的活动进程?
还尝试使用 GetApplicationUserModelId() 和 GetPackageFullName() 均未成功,因为它们分别返回 APPMODEL_ERROR_NO_APPLICATION 和 APPMODEL_ERROR_NO_PACKAGE,因为 active_process 句柄只是辅助进程,而不是活动应用程序的进程。
根据窗口的 hwnd 获取现代/通用应用程序的进程名称的任何其他 API,或以其他方式确定通用应用程序的进程名称是否处于活动状态。
提前致谢!
【问题讨论】:
-
是的,它仍然返回 ApplicationFrameHost.exe 的路径,因为返回的 process_handle 是创建窗口的帮助进程。
标签: c++ windows winapi accessibility win-universal-app