我注意到,如果使用窗口焦点检测,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
这两者都做同样的事情,只是想知道我是否错过了什么?
这个问题真的是你的问题陈述。 Windows不保留*“主窗口”*的概念。任何Windows程序都可以有零个或多个顶级窗口。除非你提出一个你真正需要的简洁说明,否则你不会解决这个问题。 – IInspectable
没有开发的窗口我不知道什么是可能的,但不是,但我会想到对话框和菜单下拉菜单将主窗口。通常当我看到来自同一个程序的多个窗口时,每个窗口都作为一个单独的进程运行,这很好。我只是需要所选进程的主父窗口(如果存在)。 – Peter
我其实从它的评论中发现它哈哈,寻找父母似乎已经工作 – Peter