gpt4 book ai didi

python - 窗口声称可见,但实际不可见

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:27 25 4
gpt4 key购买 nike

我正在运行以下脚本以查明某个进程是否有任何可见窗口:

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"

出于某种原因,它打印has visible window

但是,这是我的任务栏和任务管理器的样子:

taskbar

enter image description here

这怎么可能? outlook exe肯定是不可见的(虽然它在通知图标区域是可见的)

enter image description here

最佳答案

IsWindowVisible 返回 True 并不意味着您将能够在屏幕上看到一个窗口。例如,窗口可以最小化。因此,您可能需要非常轻松地检查窗口是否可见且未最小化。使用 win32gui.IsIconic() 测试正在最小化的窗口。

也完全有可能 Outlook 有多个顶层窗口,正如您在上一个问题中所提到的那样。您的方法将检测这些窗口中的任何一个是否具有可见属性。

您的代码看起来也很奇怪。将 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 主窗口。我怀疑您需要找到某种方法来识别该窗口。

关于python - 窗口声称可见,但实际不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com