C # захват полноэкранной игры с SlimDX - PullRequest
2 голосов
/ 02 сентября 2011

Я недавно сделал приложение, которое делает скриншоты игр.

Сначала я использовал GDI для захвата игры, но для этого мне пришлось отключить aero на win7 / vis, и у меня были некоторые проблемы с Windows XP.

Чем я решил пойти с DirectX и, поняв, что DX от Microsoft не будет работать для меня, я нашел этот прекрасный пример захвата экрана SlimDX (http://spazzarama.wordpress.com/2009/02/07/screencapture-with-direct3d/)

SlimDX работал ОТЛИЧНО! и это даже позволило мне запечатлеть игру, не отключая aero на win7 / vis.

Единственная проблема - когда я переключаю игру в полноэкранный режим, я получаю «D3DERR_DEVICELOST: Device lost (-2005530520)».

Кто-нибудь может предложить способ настроить код, чтобы он захватывал полноэкранное приложение?

ПРИМЕЧАНИЕ. У меня уже есть метод, позволяющий определить, является ли игра полноэкранной или оконной.

И я изменяю эту строку:

bitmap = new Bitmap(SlimDX.Direct3D9.Surface.ToStream(surface, SlimDX.Direct3D9.ImageFileFormat.Bmp, new Rectangle(region.Left, region.Top, region.Width, region.Height)));

к этому:

bitmap = new Bitmap(SlimDX.Direct3D9.Surface.ToStream(surface, SlimDX.Direct3D9.ImageFileFormat.Bmp));

1 Ответ

3 голосов
/ 02 сентября 2011

Когда устройство Direct3D входит в полноэкранный режим, ему предоставляется эксклюзивный доступ к видеокарте. С документация MSDN :

когда объект Direct3D принимает эксклюзивный режим, все устройства, кроме того, которое перешло в полноэкранный режим, переводятся в потерянное состояние.

Я не думаю, что есть какой-то способ заставить вашу технику работать со снимками экрана другого приложения после перехода в полноэкранный эксклюзивный режим. Насколько я понимаю, другие приложения, которые получают состояние полноэкранных поверхностей (например, программы видеозаписи и т. П.), Делают это, внедряя свой собственный код в сами библиотеки Direct3D. Это нетривиальное усилие; Вы можете попытаться найти «внедрение кода DirectX» или что-то подобное, если вы заинтересованы в этом.

...