Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как захватить изображение экрана во время работы компьютерной игр


hawkins ©   (2004-02-21 08:36:00) 

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


Guest   (2004-03-12 16:16:00) [1]

нда со скриншотом совсем туго...
>>Axis_of_Evil
картинка скорее всего берется из буфера самой винды поэтому ни AVI-шку, ни игрушку не увидишь на картинке...


Axis_of_Evil   (2004-03-12 15:54:00) [2]

>или GetActiveWindow
ну вот ето я керню сказал:>


Axis_of_Evil   (2004-03-12 15:53:00) [3]

>DC := GetDC(0);
А ежели не 0, а GetForegroundWindow (или GetActiveWindow) попробовать
// лишь предположение


Guest   (2004-03-11 12:14:00) [4]

не работает при воспроизведении AVI


able   (2004-02-24 17:11:00) [5]

ZEE ©   (23.02.04 14:40) [6]
Видно, но коряво %)


ZEE   (2004-02-23 14:40:00) [6]

2 _dvp- только что попробовал "зафотографировать" CounterStrice и WarCraft3 в работе - получилось - так что все-равно DirectX/не DirectX
зы: фотографировал с пом. BitBlt


_dvp   (2004-02-23 01:49:00) [7]

Да блин, ф-ии GUI не видят того, что вывел DirectX - на то он и Direct, что работает на прямую с устройством....... так что через ф-ии GUI - никак.....


able   (2004-02-22 19:13:00) [8]

>Zeqfreed ©   (22.02.04 18:34) [3]

 Canva := TCanvas.Create;
 B := TBitmap.Create;
 DC := GetDC(0);
 try
   Canva.Handle := DC;
 with Screen do
 begin
   B.Width := Width;
   B.Height := Height;
   B.Canvas.CopyRect(Rect(0, 0, Width, Height), Canva,Rect(0, 0, Width, Height));
   B.SaveToFile('screen.bmp');
 end
 finally
   ReleaseDC(0, DC);
   B.Free;
   Canva.Free
 end;

Что-то вроде того...


Zeqfreed   (2004-02-22 18:34:00) [9]

2 able:
Какие например?, BitBlt вроде хорошо работает, только с запечатлением проигрывающегося ролика проблемы...


able   (2004-02-21 18:17:00) [10]


> Так же, как и не вовремя работы комп. игры...

Если использовать обычные и широкоизвестные процедуры, то при DirectX получается фигня... :(


Zeqfreed   (2004-02-21 14:10:00) [11]

Так же, как и не вовремя работы комп. игры...
А если серьёзно, я думаю твоя проблема заключается в том, как узнать момент, когда надо делать снимок. Я реализовывал это примерно так:
...
type  
TForm1 = class(TForm)  
procedure FormCreate(Sender: TObject);  
procedure FormDestroy(Sender: TObject);  
protected  
procedure hotykey(var msg:TMessage); message WM_HOTKEY;  
end;
...
procedure TForm1.hotykey(var msg:TMessage);  
begin  
//Тут делаешь скриншот
end;  
...
var id : integer;
...
id:=GlobalAddAtom('hotkey');  
RegisterHotKey(handle,id,mod_control,81);
...
UnRegisterHotKey(handle,id);
...

P.S. Поищи инфу по гор. клавишам, если плохо понятно. Ещё один вариант - DirectInput (с помощью него тоже делал)

P.P.S. Если не знаешь, как сделать скриншот не вовремя игры, то
BitBlt(BitMap.Canvas.Handle,0,0,Width,Height,GetDC(0),0,0,SRCCOPY);
BitMap.SaveToFile('img00.bmp');


Наверх

Титульная страница Поиск, карта сайта Написать письмо