0

重複の可能性:
スクリーンショットを取得して呼び出しウィンドウを含める方法 (XP の場合)

現在、デスクトップをキャプチャするために使用CopyFromScreen(0, 0, 0, 0, imageSize)していますが、残念ながら、キャプチャされなかった特定の winform のコンテンツがあります (残りは問題ありません)。

この winform の仕事はとても単純です。それはただのティッカープログラムです。黒の背景とミリ秒単位で移動するラベル、それだけです。国境はありません。

グラフィックカードのドライバーがフロントバッファーにアクセスできないため、directxのCaptureScreenを使用できません(試しました)(バックバッファーには何もありません)。SendKey({PRTSC})クリップボードの内容を上書きできないため、どちらも使用できません。

しかし興味深いのは、キーボードの「Print Screen」を押して MS Paint に貼り付けることで、ティッカー プログラムが完全にキャプチャされたことです。CopyFromScreenコードでは機能しませんでした。どうすれば動作しますか、または win32 API に頼らずにこれに対する他の回避策はありますか?

編集:

なぜうまくいかなかったのかを発見しました。

私のティッカー プログラムのフォームで、TransparentKeyが null (この場合は栗色)以外に設定されていることがわかりました。TransparentKey がnull でない場合、CopyFromScreen は機能しません。空白の画像をコピーするだけです。

両方 (TransparentKey と CopyFromScreen) を連携させる方法を知っている人はいますか? 笑

編集2(解決済み):

以下に投稿したように、CopyFromScreen が実際には BitBlt のラッパーであることを発見しました。CopyFromScreen を呼び出す代わりに、ここでは BitBlt 呼び出しを使用しました。

スクリーンショットを Windows のファイルに直接保存するにはどうすればよいですか?

ただし、コードを少し変更しました。呼び出しを次のように変更します。

WIN32_API.BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0, WIN32_API.SRCCOPY | WIN32_API.CAPTUREBLT);

これを WIN32_API クラスに追加します。

public const int CAPTUREBLT = 1073741824 

また、TransparentKey を使用してデスクトップをキャプチャできるようになりました。

4

1 に答える 1

0

画面をビットマップにキャプチャする か、 http: //www.csharphelp.com/2006/11/capturing-the-screen-image-using-c/が役立つ場合があります。

于 2013-01-03T08:42:40.083 に答える