Привествую, у меня такой вопрос. Требуется периодически (скажем, 10 раз в секунду) делать снимки экрана монитора. Но при этом не захватывать определенные, указанные заранее окна. Т.е. например на рабочем столе открыто 2 окна: калькулятор и пэинт. Вот на снимке окна калькулятора быть не должно. Такое реально сделать? Какие способы решения подскажете. Я лично пока что вижу 1 способ - прятать окна перед фотографированием экрана, а после показывать. Но тут возможны мелкие неприятности типа "мелькания" окна и т.д. Да и вообще не нравится мне етот способ, ето решение "в лоб". Есть ли обходные пути?
FindWindow (или еще чего)->GetDC(hWnd)->BitBlt->ReleaseDC (MSDN) + ветка http://wasm.ru/forum/viewforum.php?id=11
можешь попробовать поизвращаться с объединетием и разъединением регионов (GetWindowRect и ей подобные)
offtop: RET MSoft насколько я понимаю, нужный HDC ничего не даст - грабиться будет весь регион в том виде, в каком он отображается на экране, то есть со всеми наложенными окнами других способов кроме временного сокрытия окон не знаю
Если на Win OS >=2k - может, пойдет и так (когда-то здесь уже советовал): 1) "нежелательному" окну W добавляем WS_EX_LAYERED + SetLayeredWindowAttributes, 2) BitBlt всему экрану с параметром SRCCOPY без CAPTUREBLT, получая снимок без layered окон, 3) BitBlt всему экрану с параметром SRCCOPY+CAPTUREBLT, получая снимок со всеми окнами, 4) и BitBlt на WindowRect(W) 2-ого снимка - той же области 1-го снимка. Это - чтоб с учетом посторонних layered окон. Если же на оные плювать - просто 1) + 2).
хмм, ваша мысль довольно любопытная интересно какова максимальная частота снимаемых таким образом кадров экрана... P.S. Кстате возможны косяки при наложении нескольких layered окон
Так и замерьте Кстати, вот утилитка для экспериментов: http://www.wasm.ru/forum/attachment.php?item=3026 из недавней ветки http://www.wasm.ru/forum/viewtopic.php?id=31473 Само собой. Думайте