gpt4 book ai didi

python - pywin32 win32gui GetPixel 在接近第 10,000 次调用时可预见地失败

转载 作者:行者123 更新时间:2023-11-28 16:40:41 31 4
gpt4 key购买 nike

运行以下代码块时,GetPixel 每次大约在第 10,000 次调用时开始抛出错误。如果我将代码放在 try-except 语句中,并且在初始失败后的所有调用都将失败。恢复的唯一方法是终止脚本并再次运行它。我试过在通话之间进行短暂的 sleep 。我试过在调用之间触发垃圾回收。我尝试从 IDE 运行脚本并将其作为独立进程运行。有任何想法吗?即使运行脚本并报告它是否/何时失败也会有所帮助。

import gc
import os
import time
import win32api, win32con, win32gui
import sys
import win32com.client

terms = 0

def get_pixel_colour(i_x, i_y):
i_desktop_window_id = win32gui.GetDesktopWindow()
i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
long_colour = win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)
i_colour = int(long_colour)
return (i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)


for x in range (0, 1000000):
colour = get_pixel_colour(500, 500)
terms = terms + 1
print terms

返回的错误是

error: (0, 'GetPixel', 'No error message is available')

最佳答案

我怀疑当 i_desktop_windw_dc 对象被垃圾回收时资源没有被释放。也许需要一个 releaseDC 调用,但在安装 pywin32 后在我的系统上进行简短搜索后我找不到文档或源代码。我确实在 win32gui 中看到了一个 ReleaseDC 函数,我只能猜测您应该使用它来释放通过 win32gui.GetWindowDC 获得的设备上下文。

这可能是一种解决方法:

import gc
import os
import time
import win32api, win32con, win32gui
import sys
import win32com.client

terms = 0
class DesktopWindow(object):
def __init__(self, *args, **kwargs):
self.window_id = win32gui.GetDesktopWindow()
self.window_dc = win32gui.GetWindowDC(self.window_id)
pass
def get_pixel_color(self, i_x, i_y):
long_colour = win32gui.GetPixel(self.window_dc, i_x, i_y)
i_colour = int(long_colour)
return (i_colour & 0xff, (i_colour >> 8) & 0xff,
(i_colour >> 16) & 0xff)

dtop = DesktopWindow()

for x in range (0, 1000000):
colour = dtop.get_pixel_color(500, 500)
terms = terms + 1
if terms % 100 == 0:
print terms

当我输入时,这里很高兴地传递了 200,000 次 get_pixel_color 操作。

此外,在独立函数的末尾尝试 win32gui.ReleaseDC(i_desktop_window_id, i_desktop_window_dc),看看是否有帮助。 (这是您在 WinAPI 编码中应该做的……完成后立即发布 DC。)

注意:以上已修复...在调用 ReleaseDC 时需要窗口句柄 (hWnd=window id)设备上下文句柄 (hDC)。参见 http://msdn.microsoft.com/en-us/library/windows/desktop/dd162920%28v=vs.85%29.aspx

关于python - pywin32 win32gui GetPixel 在接近第 10,000 次调用时可预见地失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623135/

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