迷子です!
よろしくお願いします!
フォームの透明や最小化は不可で、自分以外のソフトや背景をキャプチャーすることはできますか?
作ってみたのが、フォームを透明化させて、止めておいたtimer走らせて、キャプチャーして、timerを止めて、フォームを再表示してるんですが、時間と見映えが悪いので、スマートにする方法はありますか?
Timerにしたのは、残像が残るためです。
最前列から、キャプチャーソフト、メモ帳、背景があったら、キャプチャーソフト以外のすべてをキャプチャーしたいんです。
Windows2000で、D6です!
フォームのAlphaBlendをTrueにしてコピー。
これだけ。
procedure TForm1.Button1Click(Sender: TObject);
var
l_Desktop : HDC;
begin
Image1.Picture.Bitmap.Width := Screen.DesktopWidth;
Image1.Picture.Bitmap.Height := Screen.DesktopHeight;
l_Desktop := CreateDC('DISPLAY', nil, nil, nil);
try
//レイヤードウィンドウは第9引数にCAPTUREBLTを追加しないとコピーされないことを利用
BitBlt(
Image1.Picture.Bitmap.Canvas.Handle,
0,
0,
Image1.Picture.Bitmap.Width,
Image1.Picture.Bitmap.Height,
l_Desktop,
Screen.DesktopLeft,
Screen.DesktopTop,
SRCCOPY
);
Image1.Refresh;
finally
DeleteDC(l_Desktop);
end;
end;
AlphaBlendをTrueにすることでフォームはレイヤードウィンドウになります。
そしてBitBlt APIは第9引数にCAPTUREBLTを追加しないとレイヤードウィンドウをコピーできません。
ということで、このやり方で自身以外をキャプチャすることが可能なのですが、他のソフトがレイヤードウィンドウであった場合に対応できない欠点があります。
(他にレイヤードウィンドウのアプリがあった場合そのアプリもコピーされない)
ツイート | ![]() |