ホーム | アプリケーション | Tips | ダウンロード | プログラム | コラム

CBアプリ工房


  アプリケーション > 画面をキャプチャしたい [ 1 | 2 ]

画面をキャプチャしたい - 2/2

更新 : 2009/01/05

 


まず、Image1 の大きさをスクリーンの大きさに合わせておきます。

GetWindowDC 関数は、 タイトルバー、 メニュー、 スクロールバーを含む、ウィンドウ全体のデバイスコンテキストが取得できると書かれています。HDC GetWindowDC(hwnd) とありますから、ウィンドウのハンドルを指定してやると、デバイスコンテキストのハンドルが返ってくるようです。デスクトップのウィンドウハンドルは、0 なのでこれを指定します。

Canvas を作成しておきます。Canvas のハンドルプロパティには、 GetWindowDC 関数で取得した Windows GDI ハンドルを指定します。
rect 変数は、スクリーンの大きさを代入して、CopyRect に渡します。CopyRect メソッドを使うと、キャンバス上のイメージを TCanvas オブジェクトのイメージに転送できます。

ReleaseDC 関数は、 デバイス コンテキスト (DC) を解放して他のアプリケーションがそれを使用できるようにします。

   
void __fastcall TForm1::APIItemClick(TObject *Sender)
{    
    //スクリーンの大きさに合わせる
    Image1->Width  = Screen->Width;
    Image1->Height = Screen->Height;

    HDC dc = GetWindowDC(0);//HDC を取得
    Graphics::TCanvas *canvas = new Graphics::TCanvas;//Cavas 作成
    canvas->Handle = dc;//Canvas に取得した HDC を代入

    TRect rect = Rect(0, 0, Screen->Width, Screen->Height);
    Image1->Canvas->CopyRect(rect, canvas, rect);

    //Cavas を破棄 
    delete canvas;

    //デバイスコンテキストを開放する
    ReleaseDC(0, dc);
}

以上でコーディングはおしまいです。
コンパイルして実行してみてください。ちゃんと画面がキャプチャできましたか?

キャプチャソフトの作成はこれで終了です。お疲れ様でした。


今後の課題
今回作成したキャプチャソフトは、とりあえず動きを見てもらうためのもので、実際には他にいろいろな処理が必要になります。たとえば、繰り返しキャプチャする場合どうするか、キャプチャ画像を保存したい、などです。
いろいろ工夫して実用に耐えるソフトに発展させてみてください。



キャプチャの方法にアレンジを加えたフリーウエア Cap がダウンロードできます。参考にしてください。イメージ画像を貼り付けておきます。

画面キャプチャ Cap

以上のコードは、ご自由にお使いいただいて結構です。ただし、コードを使用した結果、問題が生じても責任はいっさい負いかねますのでご了承ください。



[ ホーム | ページトップ | 前へ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.