dポイントプレゼントキャンペーン実施中!

いろいろ調べたのですが、解決できずこちらに質問させていただきました。

今、VC++にてscrnsave.libを使用してスクリーンセーバーを作成しています。
困っていることは、スクリーンセーバー解除時にパスワードを要求する設定にした状態で、スクリーンセーバー動作直前の、壁紙やウィンドウを含むデスクトップ画面がキャプチャできない(壁紙のみとなってしまう)というものです。


スクリーンセーバーの動作としては、デスクトップ画面の上に、小さな四角形を表示させようとしています。
実現方法としては、以下のようにしています。

1. スクリーンセーバー動作開始時(ScreenSaverProcのWM_CREATEイベント)にGetDesktopWindow()を使用して画面キャプチャを取得
2. 画面キャプチャしたものをBitBlt()にて描画し、その上に四角形を描画
3. 1と2を繰り返す

ですがこのようにしても、パスワードを設定した場合は、画面キャプチャが壁紙のみとなってしまいます。
パスワードを設定しなければ、期待通りにウィンドウ等を含む画面キャプチャを取得できます。


Windowsの仕様なのではないかと半分あきらめていますが、パスワード設定したスクリーンセーバー動作直前の画面キャプチャをとる方法はないでしょうか。

A 回答 (1件)

GetDesktopWindow()でデスクトップのキャプチャはできないと思います


HWND_DESKTOPは試しましたか
これはデスクトップ全体を仮想的に覆っているウィンドウのハンドルです

void Gamen(){
HDC hdc=GetDC(HWND_DESKTOP);
BitBlt( hdc, 300, 0, 600, 600, hdc, 0, 0, SRCCOPY );
ReleaseDC( HWND_DESKTOP, hdc );
}

とりあえずこの関数をコピーして呼んでみてください
自分の環境では画面がコピーされました。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

HWND_DESKTOPは試してなかったので、
ご提示いただいた関数をコピーして実施してみました。

ですが、やはり同じく、パスワードを設定した場合は
壁紙だけがキャプチャされてしまいました。

お礼日時:2011/04/01 10:57

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