現在、デスクトップをキャプチャするために使用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 を使用してデスクトップをキャプチャできるようになりました。