Zoom Meetingsをはじめとするビデオ・コミュニケーションが、日常利用において何も例外的な存在ではない時代となった。それはオンライン・ミーティングに限らず、大人数が出席する、いわゆるカンファレンスでも用いられている。
このような時、あると便利なのが画面キャプチャ、スクリーンショットのためのツールだ。特にプレゼンテーション資料が配布されない場合、今まさに移っている画面をメモ代わりにキャプチャする。
Windows標準の操作では、スクリーンショットを取り、画像編集ソフトにコピーし、画像ファイルとして保存する、という手順を経る必要がある。これをボタン一つで、ファイル出力まで完結させたいと思い、とあるフリーウェアを使っていた。そして、これが気づかないうちに無反応になるときがあるのだ。
この現象があまりに頻発するので、ツールを自作することにした。そして作業をしているうちに気付くのだ。スクリーンキャプチャ・ツールは、イベントドリブンなライブラリ呼び出しで完結できるものではなく、Win32 API呼び出しが避けられないことに。それは次の場面で必要とされる。
- Active Window(最前面のWindow)を検出する。
- 特定キー押下のタイミングを検出する。
この投稿では、1の話題を含めたスクリーンショットを取得するためのコードを紹介する。
なお、ソースコード全体は投稿末尾に掲載している。
- スクリーンショットとキャプチャ
- 典型的手順
- 素直に最前面Windowをキャプチャする。
- DWM (Desktop Window Manager)で最前面Windowをキャプチャする。
- 実装例 - 1 Push Snap
- 参照
- ソースコード