2013-10-27 22 views
3

当运行下面的代码块和GetPixel开始于各地的10000个呼叫每次抛出的错误。如果我将代码放在try-except语句中,并且初始失败后的所有调用都会失败。唯一的恢复方法是终止脚本并重新运行。我曾尝试在通话之间进行短暂的睡眠。我试图在通话之间触发垃圾回收。我试图从IDE运行脚本并作为独立进程。有任何想法吗?即使运行该脚本并在其失败时进行报告也会有所帮助。pywin32 win32gui GetPixel未能预见的近10000个呼叫

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') 

回答

1

我怀疑,当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 

这是高高兴兴地传递200000个get_pixel_color操作在这里,因为我打字。

此外,尝试win32gui.ReleaseDC(i_desktop_window_id, i_desktop_window_dc)在你的独立功能的结束,看看是否有帮助。 (这是你应该在WinAPI的做编码的...只要你用它做释放DC。)

注:以上固定......你需要的窗口句柄(HWND =窗口ID)到ReleaseDC呼叫设备上下文句柄(HDC)。见http://msdn.microsoft.com/en-us/library/windows/desktop/dd162920%28v=vs.85%29.aspx

+0

工作像一个魅力,这博伊知道他的狗屎 –