Как сделать снимок экрана частично скрытого окна программным способом, не выводя его на передний план?

#c# #c #winapi #screenshot #gdi

Вопрос:

Можно ли сделать снимок экрана частично скрытого окна, не выводя его на передний план? Я знаю, что это возможно, потому что API захвата экрана уже делает это.

https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API/Using_Screen_Capture

Всплывающее окно Захвата Экрана

На рисунке показано всплывающее окно при запуске процесса захвата. Вы можете видеть одно и то же всплывающее окно на Discord или Slack всякий раз, когда вы хотите поделиться своим экраном. Во всплывающем окне вы можете увидеть список окон, которые я открыл. Некоторые окна частично или полностью скрыты. Однако во всплывающем окне отображается все их содержимое, что меня удивляет. Во всплывающем окне не отображаются свернутые окна, что нормально. Это работает кросс-платформенно.

Я хотел бы знать, как API захвата экрана делает это, так как мне это никогда не удавалось. Я лично пробовал использовать API Win32 GDI32, но мне не удалось сделать снимок экрана скрытого окна. Я бы предпочел кроссплатформенное решение, но на данный момент я ориентируюсь только на Windows 10 .

Заранее спасибо.

Комментарии:

1. Возможно, вы захотите взглянуть на wm_Print .

2. Только WinRT может это сделать: blogs.windows.com/windowsdeveloper/2019/09/16/… (с помощью инфраструктуры API дублирования вывода DXGI, но эта «старая» не позволяет захватывать только окно…)

3. Для этого также можно использовать API миниатюр DWM .

Ответ №1:

@simon-mourier Спасибо вам за комментарий. Это было полезно.

https://blogs.windows.com/windowsdeveloper/2019/09/16/new-ways-to-do-screen-capture/

#Ничто неуловимо