win32gui.GetPixel() 不工作:pywintypes.error: (0, 'GetPixel', 'No error message is available')

Posted

技术标签:

【中文标题】win32gui.GetPixel() 不工作:pywintypes.error: (0, \'GetPixel\', \'No error message is available\')【英文标题】:win32gui.GetPixel() not working: pywintypes.error: (0, 'GetPixel', 'No error message is available')win32gui.GetPixel() 不工作:pywintypes.error: (0, 'GetPixel', 'No error message is available') 【发布时间】:2021-05-26 01:59:32 【问题描述】:

在我自己的 pysimplegui 程序和其他程序中,每次使用 GetPixel 时,我都会收到错误:pywintypes.error: (0, 'GetPixel', 'No error message is available')。

while True:                             # The Event Loop
event, values = window.read()
hwnd = win32gui.FindWindow(None, 'Window that stays open')
rgbint2rgbtuple(win32gui.GetPixel(hwnd, 100, 100))

print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
    break

唯一一次没有崩溃的是谷歌浏览器,但它给出了错误的 RGB 值。有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以使用以下方式获取像素值,

import win32ui

w = win32ui.FindWindow(None, 'Window that stays open')
dc = w.GetWindowDC()
color = dc.GetPixel(100, 100)

如果没有找到窗口“保持打开的窗口”或标题错误,应检查大小写。通过以下代码确认窗口的标题。还要在您的窗口中确认 point(x, y)。

import win32gui

def enumWindowFunc(hwnd, windowList):
    text = win32gui.GetWindowText(hwnd)
    className = win32gui.GetClassName(hwnd)
    if text and className != "IME":
        print(repr(text), repr(className))

win32gui.EnumWindows(enumWindowFunc, [])

【讨论】:

所以我这样做了,但我仍然有同样的问题。谷歌浏览器返回 0,几乎其他任何东西都失败:\ "win32ui.error: GetPixel failed" 感谢回复 更新如上。 感谢您的回复。所以我知道窗口在那里并且我使用了正确的名称。我运行了您的代码并在列表中找到了我的窗口。在我当前的测试中,我执行 FindWindow('example'),然后使用 GetWindowRect(hwnd) 打印它的尺寸,但是当我尝试在窗口上运行 GetPixel 时,我遇到了崩溃。唯一不会崩溃的情况是我在 GetActiveWindow() 上运行 GetPixel 好吧,我一定是在做一些愚蠢的事情,因为我又试了一次,它起作用了……哈哈,很抱歉,谢谢你的帮助。

以上是关于win32gui.GetPixel() 不工作:pywintypes.error: (0, 'GetPixel', 'No error message is available')的主要内容,如果未能解决你的问题,请参考以下文章

Pyinstaller win32 qt 应用程序不工作

为啥win32线程不自动退出?

C++ 编写一个WIN32程序,向CMD传递参数

平台“win32”与此模块不兼容(fsevents)

msbuild DevTools.Target /p:Configuration=Debug /p:Platform="Win32"

P/Invoke 有时会导致 Win32 1008 错误与 StringBuilder 参数