プロが教える店舗&オフィスのセキュリティ対策術

dc := getdc(0) ;
bitblt(
bmp.Canvas.Handle,//転送先デバイスコンテキスト(hdc)
0,//転送先左端の座標(int)
0,//転送先上端の座標(int)
100,     //転送先横の幅(int)
100,     //転送先縦の幅(int)
dc,//転送元デバイスコンテキスト(hdc)
0,//転送元左端の座標(int)
0,//転送元上端の座標(int)
srccopy) ;//ラスタオペレーション

bmp.SaveToFile('C:\cap.bmp');
releasedc(0,dc);
bmp.free;

画面の位置をキャプチャーし、ビットマップにしたいのですが、これだけでは足りないのでしょうか?
コンパイルは成功するし、BMPはできるのですが、0バイト。

例外処理、tryでくくったり、多少条件文はありますが、基本これが中心の処理です。
親切な方、どうかよろしくお願いします。

A 回答 (2件)

Delphiは全く知らないのですが、Win32APIなら少し・・。


しかし回答数が0なので、とりあえず助言程度ですがためになればと思います。

bitbltで問題が発生しているのか、SaveToFileで問題が発生しているのかで調べ方が変わってきますよね。
(ようはbitbltでコピーできていないのか、SaveToFileが正しく書き込んでいないのか。)

というわけで、BitBltの前後でbmp変数の内容をダンプしてみると、問題解決の糸口になると思います。
    • good
    • 0
この回答へのお礼

どうやら、コピーできていなかったようです。
デバッグの方法を教えて頂き、ありがとうございます。

お礼日時:2007/12/05 23:12

あまり経験はないのですが、bmpのWidthとHeightを指定するとよさそうです。


Windows XP Pro SP2 + Delphi2007で確認しました。
--
var
dc: HDC;
bmp: TBitmap;
begin
dc := getdc(0) ;
bmp := TBitmap.Create;
bmp.Width:=100;
bmp.Height:=100;
bitblt(
bmp.Canvas.Handle, //転送先デバイスコンテキスト(hdc)
0, //転送先左端の座標(int)
0, //転送先上端の座標(int)
bmp.Width, //転送先横の幅(int)
bmp.Height, //転送先縦の幅(int)
dc, //転送元デバイスコンテキスト(hdc)
0, //転送元左端の座標(int)
0, //転送元上端の座標(int)
srccopy) ; //ラスタオペレーション
bmp.SaveToFile('C:\cap.bmp');
releasedc(0,dc);
bmp.free;
end;
--
    • good
    • 0
この回答へのお礼

あ、そういえば、ヴァージョンを書いていませんでした。^^
delphi6でした。w2kです。

結局、理由は、分かりませんでした。
hWndAll := GetDesktopWindow();
hWndDC := GetDC(hWndAll);

ReleaseDC(hWndAll, hWndDC);

で、問題は解決しました。
HPをまるパクリしてできなかったので、もしかしたら、ヴァージョンやOSによるのかもしれません。

ありがとうございます。

お礼日時:2007/12/05 23:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!