次へデスクトップ画面を取得してみるさて、今回はAPIを用いてデスクトップ画面を取得してみたいと思います。デスクトップ画面の画像は、スクリーンセーバーなどのソフトウェアで使われることと思います。画像を保存するツールなどにも使えそうです。おまけとして、フォアグラウンドウィンドウの画像の取得もやってみましょう。画像の取得には画像をコピーするAPIで実現することができますが、そのためにはいろいろと前知識が必要になるので、まずは、それらから説明していきましょう。Interface)というグラフィックス描画機能を提供しています。このGDIは、gdi32.dllによって提供されるさまざまなAPIと、描画のための情報を管理しているデバイスコンテキストによって構成されています。ウィンドウにAPIを使って文字や絵を描画したり、画像コピーを行なったりするには、それぞれの機能を果たすAPIを使うことになります。このとき、GDIの提供するAPIを使うためにはデバイスコンテキストのハンドルが必要になります。デバイスコンテキストとはWindowsが描画のための情報を内部的に管理しているメモリ上のデータベースのことです。これはWindowsの持つオブジェクトの1つで、ハンドルにより管理されています。HSPウィンドウのデバイスコンテキストのハンドルHSPでGDIの機能を使うからには、HSPのウィンドウに対して操作できなければ意味がありません。そのためには、HSPウィンドウのデバイスコンテキストを取得する必要があります。構造体のメンバの中に含まれています。現在描画中のウィンドウのデバイスコンテキストを取得するには以下のようにします。デバイスコンテキストのハンドル取得さて、ここで注意しなければならないことがあります。命令を実行する必要がある、ということです。メッセージ)が送られるのですが、このときにアプリケーションはウィンドウを描き直さなくてはいけないわけです。そこでHSPのウィンドウは、現在デスクトップ上に表示されているウィンドウがとは別にメモリ上に仮想的な画面を用意しておいてそこに描画をしていき、再描画の必要性が生じたらこれを実際のウィンドウ上にコピーする、というわけです。実行して描画を行なうと画面に反映されませんが、この状態でHSPのウィンドウをいったん他のウィンドウに隠してからもう一度前面に表示させると、隠れていた部分が自動的に再描画されますよね。メッセージが送られたことを意味しています。命令を実行しましょう。ウィンドウが表示されているときだけ実行すれば十分ですが。デスクトップ画面のデバイスコンテキストのハンドルの取得コピーはHSPウィンドウと、デスクトップウィンドウの間で行なうので、デスクトップウィンドウのデバイスコンテキストのハンドルもまた取得する必要があります。これを取得するには、次の2つの方法があります。関数でデバイスコンテキストのハンドルを取得する。関数は、デスクトップウィンドウのハンドルを取得するためのAPIです。GetDesktopWindow(VOID);この関数は戻り値としてウィンドウハンドルを返します。関数に渡してやると、デスクトップウィンドウのデバイスコンテキストのハンドルが取得できます。ウィンドウハンドル);その後、画像のコピーなど、デバイスコンテキストに対する処理を行ないます。デバイスコンテキストに対する処理が終わったら、デバイスコンテキストを解放しなくてはなりません。指定してデバイスコンテキストのハンドルを取得する。アドレスを渡すことで、デスクトップウィンドウのデバイスコンテキストを取得することができます。(NULL)を指定します。これでデスクトップウィンドウのデバイスコンテキストを取得することができたので、画像のコピーなど、デバイスコンテキストに対する処理を行ないます。関数を呼び出して破棄しなくてはなりません。コピー処理後に必ず呼び出すようにしましょう。デバイスコンテキストのハンドル);どちらの方法もあまり難しくはないので、どちらを使ってもよいでしょう。関数を使ってデバイスコンテキストを解放しなければならないということです。関数を呼び出さなくてはなりません。実際にコピーしてみるさて、実際にコピーを行なってみましょう。ラスタオペレーションコード);はじめの8個の引数は、コピー元およびコピー先のデバイスコンテキストのハンドルと座標、およびコピーするサイズになります。パラメータ)は、ラスターオペレーションコード(コピー元およびコピー先の色データをどのように結合するかを定義する値)です。stop上のスクリプトを実行させてみましょう。デスクトップ画面をビットマップとして保存することができます。関数の引数でコピー元とコピー先とを入れ替えると、HSPウィンドウに描画されている画像がデスクトップ上に直接コピーできてしまったりします。0などとでもして、画面をいったん消したほうがいいでしょう。フォアグラウンドウィンドウの画面を取得してみるさて、おまけのフォアグラウンドウィンドウ画像取得です。フォアグラウンドウィンドウというのは、デスクトップ上で最前面でアクティブになっているウィンドウのことを言います。フォアグラウンドウィンドウの画像をHSPウィンドウにコピーするには、まずフォアグラウンドウィンドウのハンドルを取得することが必要であることがわかります。この関数はフォアグラウンドウィンドウ(前面に出ている作業中ウィンドウ)のハンドルを返します。いうAPI関数がありますが、これは呼び出しスレッドの持つウィンドウの中だけからアクティブウィンドウを取得するものなので、ここでは使いません。関数でデバイスコンテキストのハンドルを取得します。関数は、非クライアント領域(タイトルバーやウィンドウ境界など)を含めたウィンドウ全体のデバイスコンテキストを取得するものです。関数はクライアント領域(描画領域)のデバイスコンテキストを取得します。関数でウィンドウの座標を取得し、これからサイズを計算します。メンバを引いてウィンドウの高さを求めます。構造体にクライアント領域の座標が格納されます。メンバがそのままクライアント領域の幅と高さになります。関数を呼び出してデバイスコンテキストを解放しなくてはなりません。stopこのスクリプトを実行すると、フォアグラウンドウィンドウの画像を保存することができます。