У нас есть приложение на C # (WPF), в котором мы хотим сделать снимок экрана с произвольным приложением, запущенным нами (т.е. у нас есть ссылка на процесс, который мы запустили).
Приложение может быть свернуто или скрыто за другими окнами, но мы по-прежнему хотим только изображение отдельного приложения, а не перекрывающиеся пиксели.
Мне известны типичные решения P / Invoke, использующие BitBlt или PrintWindow , которые работают большую часть времени, но они терпят неудачу (я получаю только черные / прозрачные пиксели) при работе с приложением DirectX или OpenGL, которое рисует напрямую на графическое устройство. Я нашел эту статью о том, как сделать снимок приложения Direct3D из C #, так что я думаю, что я рассмотрел этот случай.
Так что мой вопрос таков:
- Как бы я сделал это для приложения OpenGL?
- Какой самый простой способ определить подходящий метод для использования (PW / DX / GL)?
- Есть ли единый универсальный способ сделать это?
Что касается # 2, могу ли я проверить модули, загруженные исполняемым файлом, и посмотреть, загружена ли DLL / сборка DirectX или OpenGL?
Это должно выполняться только в Windows XP (не кросс-платформенной и не собираться в Vista / 7 в ближайшее время, если вообще для этого приложения).