ソフトを開発しようと思った動機、背景
もともとは通信の試験をする際にリモート系ソフト(VNC、リモートデスクトップ等)を使用して、通信相手の状態を確認しながら手元のソフトを操作することが多く、画面をたくさん立ち上げて、画面を切り替えながら作業をすることが多かったのですが、開発用のノートパソコンでは結構煩雑な作業で、別にじっと見ているわけではないので、普段は小さくサムネイル化して、必要なときにトリミングしたり、元のウィンドウに戻してリモート操作できるようなものがあればいいなと以前から考えていました。このソフトに先行して拙作の「窓の調べ」というソフトを作ったのですが、このソフトはWindowsの挙動を調査する目的(特にレイヤードウィンドウ)で作成したのですが、このソフトを作った際にLayered関係の資料と一緒にprintWindow()APIの説明があり、このAPIはプロセスの壁を越えて、対象アプリケーションにWindow描画を依頼することができることがわかりました。「窓の調べ」で見えていないウィンドウをキャプチャする方法をいろいろと試してみた結果で、「BeathOfWindow」でやっているようなことができそうという結論になりました。
開発中に苦労した点
初版は「窓の調べ」のコードを組み立て直すだけなので、そう苦労なくできたのですが、実際に複数のウィンドウをサムネイル化すると、元ウィンドウが同じ大きさのbitmapを保持していたため、リソース不足にすぐにぶつかりました。どうもWindows全体とは別にプロセスごとに使用できるリソースに制限があるようで、リソースの節約のため、キャプチャしたタイミングでサムネイルウィンドウのサイズにストレッチして保持するようにしました。これでリソースの問題は実用レベルまできたのですが、先にストレッチしてしまうので、トリミングアルゴリズムが複雑になってしまいました。よく見るとわかるのですが、トリミング(拡大)をはじめたときは結構荒い画像で、暫くすると解像度が上がっていると思います。次のキャプチャタイミングで調整しています。
調整用の設定をつけるのはあまり好きではないですが、使用するパソコンの性能に合わすことができるように、サムネイルウィンドウの上限とキャプチャ間隔を調整できるようにしています。
ユーザにお勧めする使い方
当方のように「リモートの画面をサムネイルで見たい」という人はあまりいないと思いますが、自己リロードするWeb画面を画面の隅でチラチラ見るのが普通の使い方のような気がします。相場をやられている方なら日経平均やTOPIX、為替のグラフ、スポーツ好きの方ならスコアボードなどですかね。Operaなどだとブラウザに定期的に表示を更新する機能があるので、気になるWebの更新を確認もできます。タスクマネージャの一部をトリミングして、CPUの使用状況等もよく見ていますね。あとメーラもサムネイルの状態でデスクトップに置いています。受信メールが溜まってきたら、元のウィンドウに戻して処理したりしています。常時5枚ぐらいを画面左に並べて使うのが最近の定番になっています(タスクマネージャ、リモート2枚、メーラ、Web1、2枚)。
今後のバージョンアップ予定
いまのところ機能を追加する予定はないのですが、課題が3点残っています。
1) 表示しているウィンドウの再描画のタイミングとキャプチャのタイミングがぶつかると、見えている方のウィンドウの再描画が一部抜けてしまう現象があります。フォアグランドのウィンドウのキャプチャは止めているのですが、画面が切り替わる瞬間にぶつかると、やはりウィンドウの再描画抜けが発生します。見えているウィンドウのキャプチャはやる必要があまりないのかもしれませんので将来、キャプチャは最小化しているときにのみにするかもしれません。
2) 2ペイン、3ペインのドキュメントタイプのウィンドウのキャプチャで、キャプチャ抜けが発生します(具体的にはエクスプローラ、Excel等)。これは、いまのところサムネイルにしたいウィンドウではあまりでないので、放置するつもりです(手立てもないのですが……)。printWindow()APIの仕様なのかもしれませんが、描画に時間がかかると最後のペインの描画が抜けることがあるようです。なるべく相手ウィンドウの暇のときを見計らって(変な表現ですが)キャプチャしているのですが、完全になくなることはないようです。
3) 原因はよくわかっていないのですが、突然キャプチャできない(ウィンドウの左上部分のみになる)ことがまれにあります(もう一度元画面に戻して最小化すると現象がでない)。
対応の有無や時期などは未定です(もしかしてリソースに余裕があるVistaや、CPUにパワーがあるパソコンだとあまり現象が出ないかもしれません)。
その他雑感
結構自分でもお気に入りのソフトです。「今後のバージョンアップ予定」に書いたような問題もあるのですが、動くサムネイルにしたいような画面ではあまり問題が発生しないので、毎日快適に使っています。
(OrangeMaker)