我注意到,如果使用windows焦点检测
rect
通过检查窗口标题,我设法解决了其中一些问题。如果标题为空,则为下拉菜单,因此忽略。如果它的标题是“打开”、“另存为”等,那么它显然是一个对话框,可以忽略。但是,消息“您想不保存就退出吗?”似乎只有程序本身的标题,因此无法通过检查。
我只是测试了这些盒子的高度,看看是否有一个常数可以忽略,但每个程序似乎有不同的高度。我可能会忽略某个决议下的任何事情,但我不希望这样做,因为这实际上并没有解决问题,而且可能在一些罕见的情况下,它需要使用该特定决议。
以下是我目前使用的代码位
pywin32
进行检测。我也有ctypes的替代品,但基本上是一样的。
import win32gui
import win32process
import psutil
hwnd = win32gui.GetForegroundWindow()
print 'pid:', win32process.GetWindowThreadProcessId(hwnd)[1]
print 'rect:', win32gui.GetWindowRect(hwnd)
print 'name:', win32gui.GetWindowText(hwnd)
print 'exe:', psutil.Process(win32process.GetWindowThreadProcessId(hwnd)[1]).name()
GetWindowRect
和
GetClientRect
哪两个都做相同的事情,只是想知道我是否错过了什么?