Я пытаюсь захватить экран с помощью GDI, я нашел один фрагмент кода и изменил его в соответствии с моим требованием. Вот код[EDIT: код изменен для простоты]:
def getfunc():
# grab a handle to the main desktop window
hdesktop = win32gui.GetDesktopWindow()
# create a device context
desktop_dc = win32gui.GetWindowDC(hdesktop)
img_dc = win32ui.CreateDCFromHandle(desktop_dc)
# create a memory based device context
self.mem_dc = img_dc.CreateCompatibleDC()
# create a bitmap object
screenshot = win32ui.CreateBitmap()
screenshot.CreateCompatibleBitmap(img_dc, width, height)
self.mem_dc.SelectObject(screenshot)
# copy the screen into our memory device context
try:
self.mem_dc.BitBlt((destUpLeftX, destUpLeftY), (width, height), img_dc, (srcUpLeftX, srcUpLeftY),win32con.SRCCOPY)
except :
logger.debug("BitBlt failed")
img_dc.DeleteDC()
win32gui.ReleaseDC(hdesktop, desktop_dc)
win32gui.DeleteObject(screenshot.GetHandle())
def delete(self):
self.mem_dc.DeleteDC()
Теперь, когда я пытаюсь запустить этот код, ровно после 80 итераций. Я получаю сообщения об ошибках, говорящих о сбое createDCFromHandle или createCompatibleDC.
Я просматриваю любое решение, которое пришло к следующему вопросу о переполнении стека: /а>
Согласно сообщению, существует проблема утечки памяти, я изменил свою функцию удаления в соответствии с предложением. Но я думаю, что мне все еще не хватает, какие-либо указатели на то же самое?
getfunc
и храните в локальных переменных. - person David Heffernan   schedule 04.01.2018