Здравствуйте!
Уважаемые мастера, у меня задача делать снимок содержимого окна Media Player classic.
Сделал так:
procedure SShot(H: Cardinal;SSDir: String);
var
TimeS : String;
Rect: TRECT;
Bitmap : TBitmap;
Jpg: TJpegImage;
begin
if not DirectoryExists(SSDir) then createdir(SSDir);
GetWindowRect(H,Rect);
Bitmap := TBitmap.Create;
Jpg := TJpegImage.Create;
with Bitmap do
begin
Width := Rect.Right-Rect.Left+1;
Height := Rect.Bottom-Rect.Top;
end;
BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,GetDC(h),-4,-43,SRCcopy);
jpg.Assign(bitmap);
jpg.CompressionQuality := 100;
jpg.Compress;
TimeS := FormatDateTime('dd',Date)+FormatDateTime('mm',Date)+FormatDateTime('yyyy',Date)+'_'+
FormatDateTime('hh',Time)+FormatDateTime('nn',Time)+FormatDateTime('ss',Time);
jpg.SaveToFile(SSDir+TimeS+'.jpg');
jpg.Destroy;
bitmap.Destroy;
end;
Скриншоты делает, но не всякого видео. Определенные видеофайлы (при воспроизведении) дают скриншот с черным экраном. Т.е. окно плейера видно, а внутри "малевич". Я так понял, что вывод разными кодеками различается. Вопрос, как победить. Код конечно желательно, но не обязательно, главное теория, может есть функции Api, которые получают содержимое определенной поверхности вывода по дескриптору или там всёпроще.
Зарание всем спасибо!