Python 窗口声称是可见的,而它';不是
我正在运行以下脚本,以确定某个进程是否有任何可见窗口:Python 窗口声称是可见的,而它';不是,python,winapi,process,pywin32,Python,Winapi,Process,Pywin32,我正在运行以下脚本,以确定某个进程是否有任何可见窗口: import win32gui import win32process pid = 6324 def WindowIsVisible(pid): data = [pid, False] win32gui.EnumWindows(enumHandler, data) return data[1] def enumHandler(hwnd, data): if win32process.GetWindowT
import win32gui
import win32process
pid = 6324
def WindowIsVisible(pid):
data = [pid, False]
win32gui.EnumWindows(enumHandler, data)
return data[1]
def enumHandler(hwnd, data):
if win32process.GetWindowThreadProcessId(hwnd)[1] == data[0] and win32gui.IsWindowVisible(hwnd):
data[1] = True
if WindowIsVisible(pid):
print "has visible window"
else:
print "does not have visible window"
由于某些原因,它打印的窗口可见
但是,这就是我的任务栏和任务管理器的外观:
这怎么可能?Outlook exe绝对不可见(尽管它在通知图标区域中可见)
IsWindowVisible返回
True
并不意味着您可以在屏幕上看到窗口。例如,可以最小化窗口。因此,您可能需要检查窗口是否可见,并且至少不最小化。使用win32gui.IsIconic()
测试最小化的窗口
Outlook也完全可能有多个顶级窗口,正如您在上一个问题中所述。您的方法将检测这些窗口中是否有任何窗口具有visible属性
你的代码看起来也很奇怪。将PID传递给名为WindowIsVisible
的函数对我来说是错误的。这是一个你会问窗口而不是过程的问题
我认为此代码将更适合您的需要:
def topLevelWindows(pid):
def enumHandler(hwnd, data):
if win32process.GetWindowThreadProcessId(hwnd)[1] == pid:
windows.append(hwnd)
return True
windows = []
win32gui.EnumWindows(enumHandler, 0)
return windows
for hwnd in topLevelWindows(pid):
if win32gui.IsWindowVisible(hwnd) and not win32gui.IsIconic(hwnd):
print '%.8x %s' % (hwnd, win32gui.GetWindowText(hwnd))
但是,这仍将枚举所有顶级窗口。我想你真正想要的是Outlook主窗口。我怀疑您需要找到某种方法来识别该窗口。Outlook应用程序没有任务栏按钮。您看到的是一个用于启动Outlook的固定项目。@I不可检测啊,好吧,我误解了图像。我会更新的。