WindowsでもMacみたいに、常に右側にアイコンがピタッと揃うようにしたい
初めに
僕は普段、ノートPCはMacBookを、家ではWindowsを使っています。OSが違うと勝手が違う部分も多々ありますが、個人的にずっと気になっていたのがデスクトップのアイコン配置。
Macではアプリやファイルのアイコンがデスクトップの右側に整列されるが、Windowsでは対照的に、強制的に左側から詰められてしまう。普段よく使っているMacのデスクトップ環境にすっかり慣れているせいで、家のWindowsを開いたときにどうも違和感があり、「WindowsのデスクトップもMacみたいに、常に右側にアイコンがピタッと揃うように環境を統一したい!」とずっと思っていた。
標準機能の「アイコンの自動整列」をオフにして手動で右側に並べることもできるが、新しくファイルをダウンロードしたりするたびに、容赦なく左側の空きスペースへアイコンが飛んでいってしまい、毎回イライラ…。
そんな毎日のPC作業のモチベーションに関わるちょっとしたこだわりを満たすため、デスクトップのアイコンを右側に固定する専用の常駐アプリを自作してみた。
今回は、このアプリの概要と、どんな思考プロセスで開発したのかを軽く書き残しておく。
アプリの概要とできること
このアプリの機能は単純。Windowsのデスクトップアイコンを自動で右側に整列し続ける、システムトレイ常駐型の小さなユーティリティである。
一度起動しておけば、アイコンを左側にドラッグして指を離しても、ブラウザから新しいファイルを保存しても、まるで磁石のようにスッと右側の定位置に吸い付いて戻る。タスクトレイのアイコンから、いつでも機能のオン・オフを切り替えることが可能だ。
開発の背景と、C++を選んだ理由
最初は既存のソフトでどうにかならないか探したのだが、完全自動で右揃えを維持し続けるというシンプルかつ軽量なツールが意外と見つからなかった。
Pythonなどでサクッとスクリプトを書くことも考えたが、今回作ったのはPCの起動中、常にバックグラウンドで動かし続ける常駐アプリである。メモリを無駄に消費したり、PCの動作が重くなったりするのは絶対に避けたい。
「それなら、OSの根幹に近い言語で、究極に軽いネイティブアプリを自分で作ってしまおう」と思い立ち、動作の軽さと安定性を最優先してWin32 API を使ってゼロから実装することにした。
どのような仕組みで動いているのか(技術的な話)
ふんわりと内部のロジックや思考プロセスを解説してみる。
Windowsのデスクトップは、実はただの壁紙ではなく、リストビューとしてOSに管理されている。アプリの起動時、まずはWindowsの深いウィンドウ階層を辿って、このアイコンリストを操作するためのハンドルを見つけ出し、記憶しておく。
最初は、Windowsの「ファイルが追加された」「アイコンが動いた」というイベントシステムをフックしようと考えた。しかし、デスクトップの管理はシステムの内部処理が複雑に絡むため、無理に割り込むとエクスプローラー自体がクラッシュする原因になりがちである。
そこで思考を変え、タイマーで常にアイコンの座標を再計算して上書きし続けるという力技にしてみた。
画面の解像度とアイコンのサイズから、右端からのグリッド(座標)を割り出し、ミリ秒単位で本来あるべき座標を全アイコンに命令し続ける。
そんなに高速でループを回してPCは重くならないのかと思うかもしれないが、座標が変わっていない場合はOS側で再描画がスキップされる仕様を利用しているため、画面がチラつくこともなく、CPU使用率もほぼ0%のまま完全に裏方として動作する(その代わりメモリは常時1 MBくらい食うけど)。
ダウンロード
同じようにWindowsでもMac環境みたいにアイコンを右に揃えたい、というマニアックな要望をお持ちの方は、以下のインストーラをダウンロードして使ってみてほしい。
ダウンロードできない場合はこちら
※ご利用にあたっては、インストーラ内に記載されている利用規約をご確認のうえ、同意いただける場合のみご使用ください。
毎日目にするデスクトップの景色が使い慣れたものに変わるだけで、少し気分がリフレッシュされて作業も捗る気がする。 今後も、ちょっと不便だけど痒いところに手が届くようなニッチなツールを思いついたら作っていこうと思う。