こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VC++ デスクトップキャプチャ方法

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

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


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

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

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


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

投稿日時 - 2011-03-31 06:36:22

QNo.6633457

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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 );
}

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

投稿日時 - 2011-03-31 21:28:34

お礼

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

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

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

投稿日時 - 2011-04-01 10:57:00

あなたにオススメの質問