2013-10-27 20 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

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