В чем заключается смысл данного кода?
Пишу функцию, которая позволит сделать скриншот окна, скрытого другими окнами (окна, которое не в фокусе). Нашел РАБОЧИЙ кусок кода, который позволяет это сделать. Однако я не понимаю, как он работает.
А конкретно:
Зачем нужна CreateCompatibleDC? В единственной документации по PyWin32 сказано, что создает какой-то "контекст, совместимый с устройством" (что за контекст? Что значит совместимый?). Такой же вопрос касательно CreateCompatibleBitmap. (Зачем создавать такое? Какой смысл несут в себе функции в этом коде?)
Зачем копировать в него этот контекст?
cDC.BitBlt((0,0),(w, h) , dcObj, (0,0), wcon.SRCCOPY)
- Насколько необходимо удалять эти контексты? (В конце 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())