Joh*_*ith 5 python pywin win32gui
运行以下代码块时,GetPixel 每次大约在第 10,000 次调用时开始抛出错误。如果我将代码放在 try- except 语句中,则初始失败后的所有调用都将失败。恢复的唯一方法是终止脚本并再次运行它。我尝试在通话之间短暂休息一下。我尝试在调用之间触发垃圾收集。我尝试过从 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
Run Code Online (Sandbox Code Playgroud)
返回的错误是
error: (0, 'GetPixel', 'No error message is available')
Run Code Online (Sandbox Code Playgroud)
我怀疑当 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
Run Code Online (Sandbox Code Playgroud)
当我输入时,很高兴在这里传递了 200,000 个 get_pixel_color 操作。
另外,请win32gui.ReleaseDC(i_desktop_window_id, i_desktop_window_dc)在独立函数结束时尝试,看看是否有帮助。(这就是您在 WinAPI 编码中应该做的事情...完成后立即释放 DC。)
注意:上面已修复...您在调用 ReleaseDC 时需要窗口句柄 (hWnd=窗口 id)和设备上下文句柄 (hDC)。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/dd162920%28v=vs.85%29.aspx
| 归档时间: |
|
| 查看次数: |
2988 次 |
| 最近记录: |