我正在开发一个小程序,让用户通过单击鼠标选择屏幕的特定区域,然后在整个运行过程中记录用户在该位置可以看到哪些窗口以及多长时间。
最初我只是使用 pygetwindow 获取窗口标题,这种方法可行,但我发现窗口标题更改非常频繁。例如,某些视频游戏将其视频标题更改为当前级别的名称,或者浏览器根据活动选项卡更改其窗口标题。所以我正在寻找一种更好的方法来识别记录文件中的窗口。
PID 也是不行的,因为每次我重新启动程序时它都会改变。
理想情况下,我想获取窗口的 .exe 路径,因为它显示程序的名称,并且除非我移动可执行文件本身,否则不会更改。这可能吗?如果没有,是否有任何其他(或更好)的方法来静态识别程序以达到我的目的?
我不了解Python细节。以下是直接使用 WinAPI 执行此操作的方法:
听起来您已经找到了感兴趣的窗口的句柄。您可能想要沿着窗口层次结构向上移动,直到到达顶层窗口。然后您可以使用 GetWindowThreadProcessId 获取拥有该窗口的进程 ID。最后,您可以通过GetProcessImageFileNameW获取可执行路径。
获取图像文件名需要权限和完整性级别检查。我相信在正常情况下它应该适用于大多数应用程序,但是如果它因某种拒绝访问错误代码而失败,您应该有一个后备方案。对于以管理员身份运行的程序(例如任务管理器)和受保护的进程,不允许以这种方式获取图像文件名。