Я недавно сделал приложение, которое делает скриншоты игр.
Сначала я использовал 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));