![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как захватить изображение экрана во время работы компьютерной игр
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');