Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

1 Push Snap 1.0 - ボタン一押しで、最前面Windowをキャプチャし画像ファイルを保存する。


Zoom Meetingsをはじめとするビデオ・コミュニケーションが、日常利用において何も例外的な存在ではない時代となった。それはオンライン・ミーティングに限らず、大人数が出席する、いわゆるカンファレンスでも用いられている。

カンファレンスの中には、プレゼンテーションを伴う講演でありながら、講演資料を配布しない場合がある。そのような講演中、「この画面はメモしておきたい!」と思った場面ですかさず、Print Screenキーを一押しすれば、指定のフォルダにキャプチャ画像が出力される。

実際のところ、すでに同様の機能を提供するフリーウェアが存在する。しかし、気付いたときには無反応、クラッシュしており、キャプチャしているつもりが全て無駄、というトラブルを度々経験した。

そのような必要性、事情を背景に自作したツールが「1 Push Snap」だ。

この投稿では、そのツールの使い方を紹介する。

1 Push Snap

このツールはオープンソースで作成しており、C#で記述している。ソースコードは次のサイトからダウンロードできる。

github.com

実行ファイルだけが必要ならば、サイト上のフォルダ「bin/Release」に格納されている2ファイルをダウンロードしてほしい。
ちなみに、実行には.NET Framework 4.8を必要とする。

使い方


実行ファイル「1PushSnap.exe」を実行すると、タスクバーにアイコンが表示される。右クリックすると、コンテキスト・メニューが表示される。

  • Information


キャプチャ画像(JPEGファイル)が出力されるフォルダを確認できる。
ユーザー・フォルダ(%userprofile%)をデフォルトの保存先としている。これはメニュ「Save To...」で変更できる。

  • Save To...


キャプチャ画像を保存するフォルダを指定する。

もし画像ファイル出力時に、指定したフォルダが存在していなかった場合は、強制的にユーザー・フォルダへ画像出力する仕様だ。エラー表示ではなく、あくまでも画像ファイルを出力することを最優先としている。

  • Start


このツールはキーボード・イベントを監視する。メニュー「Start」で監視を始める。

監視状態では、アイコンの色が黒からオレンジへ変化する。この状態でPrint Screenキーを押下すると、そのときの最前面Windowがキャプチャされ、その画像が指定のフォルダへ保存される。

  • Stop


キーボード・イベントの監視を中止する。メニュー「Stop」で監視を止める。
監視しない状態では、アイコンの色がオレンジから黒へ変化する。

  • Close

ツールを終了する。

問題点と回避策

ここで触れている問題は、Ver 1.1で解決しました。
1 Push Snap Ver 1.1 - ボタン一押しで、最前面Windowをキャプチャし画像ファイルを保存する。 - Technically Impossible

同様の機能を有する他のフリーウェアが、気づいた無反応、クラッシュしていた、と言う話題に冒頭で触れた。実際のところ、このツールも同様の問題を抱えている。その原因は察しがついている。
その発生条件”緩和”のために設けたのが、「Stop」機能だった。

ツールを監視状態で動作させたまま、適宜キャプチャを挟みながらタイピングを繰り返すロード・テストを実施すると、同様のトラブルが発生することを確認した。監視停止状態のまま、同様のタイピングを繰り返すと、ツールは正常に稼働し続けた。
どうやらクラッシュ、無反応の原因は、キーボード・イベント監視状態のまま、文章作成のように、まとまった量のタイピングをすることが原因ではないかと推察している。

例えば、監視状態のまま文章をタイプしていたとする。その操作全てに対してPrint Screenキーが押されたかどうかを、このツールは照合している。この仕組みの詳細は、次の投稿を参照してほしい。*1
おそらく、タイピングによって生じる大量のイベントの捌き方が肝なのだろう。そして、これまで使用していたフリーウェアが無反応になったのも、これが原因だったのではないかと推察している。

そのような推察から、次の2つを実装している。

  • キー・イベント処理、画像保存処理のスレッド化
  • キー・イベント監視を一時中断するための「Stop」

ただキャプチャのタイミングを待ちながらカンファレンスを眺めているだけならば、監視状態のまま稼働させても問題なさそうだが、まとまった量のタイピングを伴う作業を並行しているならば、一度監視を止めて「Stop」に切り替えてほしい。

ちなみに「Start」、「Stop」をボタン操作で素早く切り替えられるよう、次回以降のバージョンで実装しようと考えている。

次回以降の対応予定
  • キーボード・イベントの監視、中断をボタン操作で切り替える。
  • JPEG以外の出力画像フォーマットに対応する。