2015-07-01 5 views
0

Я хочу сделать автономное приложение, которое может захватить время выполнения экрана и отобразить его на внешнем мониторе. Я знаю, что просто дублирует работу монитора, но я заинтересован в создании приложения для него.ScreenCapture текущего запуска приложения на мониторе

Я прошел различные вопросы по форуму для решения и был склонен к тому, чтобы сделать это способом DirectX. Но оказывается, что способ DirectX может захватывать только экран приложения, работающего через d3d. Невозможно создать автономный screencapturer с помощью DirectX.

Исправьте меня, если я ошибаюсь. Я сделал это заключение на основании заданного вопроса here

Было предложено сделать это с использованием подхода DXGI в том же потоке.

Пожалуйста, помогите мне здесь.

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

Я новичок в программировании на DirectX, поэтому я не знаю о связанных с этим сложностях. Приветствуется всякий совет по созданию лучшего (самого быстрого) приложения для захвата экрана.

ответ

1

На самом деле DirectX может захватить не только окно нарисованный D3D, но весь экран, как это: http://imgur.com/FojhNwA

Я только что закончил эту программу вчера: P

На моем компьютере, с помощью GDI + (BitBlt) стоит около 60ms взять снимок экрана 1080p, но всего 9 мс, чтобы сделать снимок экрана и визуализировать фрейм DirectX (IDXGIOutputDuplication).

Это самый быстрый способ, который я пробовал, но, к сожалению, кажется, что работает только в Windows 8 (я не могу запустить эту программу на своей машине с Windows 7).

Вы можете проверить информацию здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/hh404487

И есть некоторые примеры кода в этой статье.

+0

Но это возможно для предыдущих версий Windows? Использование GetFrontBufferData? Я видел несколько ответов на StackOverFlow, в которых говорилось, что это может быть достигнуто с помощью GetFrontBufferData. – newbie2015

+1

О, вы напомнили мне, что я пробовал DirectX 9 с GetFrontBufferData. На моей машине стоит 48-50 мс, чтобы сделать снимок экрана, не так быстро. Я получил образец в этой сети: http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen – kk57

+0

Ой, хорошо. Но для windows7 или ниже есть ли какой-либо другой более быстрый способ, чем GetFrontBufferData? Я попытался использовать OpenGL. Но он захватывает только объекты, созданные в OpenGL. Он не может захватить рабочий стол или другие приложения. – newbie2015