Windows で C++ を使用して実行中のアプリケーションのスクリーンショットを撮る最良の (最も簡単な) 方法は何ですか?
5 に答える
ウィンドウのデバイス コンテキストを取得しGetWindowDC()
( )、そこからイメージをコピーする ( BitBlt()
) 必要があります。アプリケーションについて他に何を知っているかに応じて、さまざまな方法を使用して、どのウィンドウのハンドルを に渡すかを見つけますGetWindowDC()
。
GetDC(NULL)
+BitBlt()
半透明/アルファ/レイヤード ウィンドウをキャプチャするには、CAPTUREBLT
フラグをBitBlt
に渡す必要があります。これを行うと、カーソルが点滅します。この technet 記事を読んで理由を確認してください。
NT6+ では、Magnification APIを使用して必要なことを実行できる場合があります。
keybd_event 関数のドキュメントでは、それを使用してスクリーンショットを撮り、クリップボードに保存できると記載されています。例えば:
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);
私のバージョン (私のコンピューターにインストールされている Visual Studio 2005 ヘルプ) では、2 番目のパラメーターを 0 に設定するとデスクトップ全体のスクリーンショットを撮ることができ、1 に設定すると現在のアプリケーションだけのスクリーンショットを撮ることができると記載されています。
クリップボード バッファからの取り出しは、読者の課題として残されています。
ただし、クリップボードに既に存在する画像データが芝刈りされるため、これを行う前に慎重に検討します。