В чем заключается смысл данного кода?

Пишу функцию, которая позволит сделать скриншот окна, скрытого другими окнами (окна, которое не в фокусе). Нашел РАБОЧИЙ кусок кода, который позволяет это сделать. Однако я не понимаю, как он работает.

А конкретно:

  1. Зачем нужна CreateCompatibleDC? В единственной документации по PyWin32 сказано, что создает какой-то "контекст, совместимый с устройством" (что за контекст? Что значит совместимый?). Такой же вопрос касательно CreateCompatibleBitmap. (Зачем создавать такое? Какой смысл несут в себе функции в этом коде?)

  2. Зачем копировать в него этот контекст?

cDC.BitBlt((0,0),(w, h) , dcObj, (0,0), wcon.SRCCOPY)

  1. Насколько необходимо удалять эти контексты? (В конце 3 функции DeleteDC) DeleteObject(dataBitMap.GetHandle()) - Тоже не понятно, зачем удаляется объект BitMap? В питоне же есть сборщик мусора, это не С++, где все удалять надо.

В общем, буду благодарен ответам и помощи. Если кто-то сможет закомментировать данный код, объяснив в комментариях, что делает каждая строчка - вообще расцелую и свечку за вас поставлю :)

К сожалению, по PyWin32 адекватной документации нет даже на английском. Приходится крутиться, заранее спасибо )

Код:

handler = wgui.FindWindow(None, "Calculator")
left, top, right, bot = wgui.GetWindowRect(handler)
w = right - left
h = bot - top

wDC = wgui.GetWindowDC(handler)
dcObj = wui.CreateDCFromHandle(wDC)
cDC = dcObj.CreateCompatibleDC()

dataBitMap = wui.CreateBitmap()
dataBitMap.CreateCompatibleBitmap(dcObj, w, h)

cDC.SelectObject(dataBitMap)
cDC.BitBlt((0,0),(w, h) , dcObj, (0,0), wcon.SRCCOPY)

dataBitMap.SaveBitmapFile(cDC, 'screenshot.bmp')

dcObj.DeleteDC()
cDC.DeleteDC()
wgui.ReleaseDC(handler, wDC)
wgui.DeleteObject(dataBitMap.GetHandle())

Ответы (0 шт):