プロが教えるわが家の防犯対策術!

C++Builder Ver5.0でプログラム開発しています。

表示しているウィンドウのハードコピーをプログラムからハードコピーする方法が分かりません。
たぶん、APIをコールするだけだと思うのですが、参考資料がみつかりません。

C++Builder にラッパーも見あたらないのですが、どなたかお教えください。

また、以下の2つの場合にわけて操作したいのですが、、、

1、アクティブウィンドウをハードコピーする
2、スクリーン全体をハードコピーする

以上 よろしくお願いいたします。

A 回答 (3件)

★デバイスコンテキストを使うか、SendInput() API を使う。


>たぶん、APIをコールするだけだと思うのですが、参考資料がみつかりません。
 ↑
 SendInput() API 関数のことかな。
・スクリーン全体を SendInput() API で『PrintScreen』キーを押した状態にすれば楽に出来ます。
 アクティブ・ウインドウも SendInput() API で『Alt』+『PrintScreen』キーを押した状態に
 すれば上手くいくかもしれない。
 クリップボードにコピーするだけならこれで上手くいきます。
 クリップボード以外に出力する場合はデバイスコンテキストより画面を取得する必要があります。
 その方法は下の通りです。
>1、アクティブウィンドウをハードコピーする
 ↑
 手順は
 (1)GetForegroundWindow() API でウインドウ・ハンドルを取得
 (2)(1)より GetWindowDC() API でウインドウ全体のデバイスコンテキストを取得
 (3)デバイスコンテキストよりビットマップのデータを取得してファイルなどに出力
>2、スクリーン全体をハードコピーする
 ↑
 手順は
 (1)GetDC(NULL) でスクリーン全体のデバイスコンテキストを取得
 (2)デバイスコンテキストよりビットマップのデータを取得してファイルなどに出力
・以上。→SendInput() で簡単に出来るでしょう。

参考:
http://msdn.microsoft.com/library/ja/default.asp …
http://msdn.microsoft.com/library/ja/default.asp …
    • good
    • 0
この回答へのお礼

とても丁寧な回答を有り難うございます。

私の目的は、デバイスコンテキストを使う方法ですね。

おかげで簡単に目的を達成できました。

本当に有り難うございました。

お礼日時:2007/08/24 10:43

訂正:


×:7デスクトップのデバイスコンテキストハンドルを解放
○:7対象のデバイスコンテキストハンドルを解放

>SendInput() API 関数
なるほど、と思いました。
タイミング的な問題は無いのか気になるところです。
    • good
    • 0

何でもかんでもAPIがあると思ってはいけません。


そんな便利なAPIは無かったはず。。。(たしか)

大まかな流れだけ。
1保存するスクリーンのサイズを取得
2保存対象のデバイスコンテキストハンドルを取得
3描画用のビットマップハンドルを作成
4対象の画像を3で作成した描画用のビットマップにコピー
5ビットマップオブジェクトを作成
6描画用のデバイスコンテキストハンドルを削除
7デスクトップのデバイスコンテキストハンドルを解放
8ビットマップハンドルを削除
9得られたビットマップオブジェクトを保存
10ビットマップオブジェクトを削除
    • good
    • 0
この回答へのお礼

回答有り難うございます。

デバイスコンテキストを直接操作したこと無いので・・

お礼日時:2007/08/24 10:44

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