マルチディスプレイユーティリティ

デュアルディスプレイ、マルチディスプレイ(マルチモニター)はふつーの世の中になりました。
ただ、windowsでマルチディスプレイをするときに、ちょっと困ったことがあったので解決するツールを作ってみました。

ツール
http://rtilabs.net/files/2011_07_18/MultiMonitorUtil.zip

ソース
https://github.com/rti7743/MultiMonitorUtil

環境: VS2010 MFC + C++0x (autoがべんりすぐる)

何を解決させたかったの?

Win + D ですべてのマルチディスプレイのウィンドウが最小化してしまうんです。
Win + D はディスクトップを表示するコマンドです。
ひらきすぎたウィンドウを無視して、ディスクトップを操作したい時に便利です。
しかも、もう一度 Win + D を押すともとに戻ります。


ただ、マルチディスプレイ環境でやると、すべてのウィンドウが最小化されてしまうんですね。
これだと、片方の画面で動画を再生させながら、もう片方の画面でちょっとデスクトップみたいなと思っても、動画も最小化されてしまうという大変残念な結果になってしまいます。
指定したモニターだけで Win + D やりたい。

ここで Win + D を押すと・・・


↓となりのモニタまで最小化してしまう!!!



↓普通こうだろうJK


せっかく動画を再生しながらノリノリで仕事していたのに、 Win + D を押すたびにイライラする。
そして、この問題に対応するソフトウェアがほぼない状態でした。もしかしたらあるのかもしれないけどね。


いろいろ探してあったのが、現在のモニターだけを最小化してくれるソフトでした。
しかし、これではダメなのです。


最小化するボタンともとに戻すボタンが「別に」割り当てられるのです。
Win + D は押せば有効になり、もう一度 同じ Win +D を押すともとに戻ります。
しかし、他のソフトは、最小化するボタンと戻すボタンは別です。
なんと、2つのもボタン操作を覚えろというのです。

普通はこんなふうにWin + D でぐるぐる回るべき

↓             ↑
↓Win + D         ↑Win +D ぐるぐる
↓             ↑


キーが違うと覚えることが増える

↓             ↑
↓Win + D         ↑Win +Eとか
↓             ↑


これは信じられない苦痛です。
覚える量が1つから、2つになり2倍になってしまいました。
こんなの覚えることができません。


Win + D のように、押したら有効、もう一度押したら解除にぐらいの「ゆとり」設定にしてくれないと、覚えることが増えすぎてしんでしまいます。


そこで死なないように、いろいろなツールを探したのですが、Win + D をいい感じにマルチディスプレイにしてくれるツールをみつけることができませんでした。
ないものは、仕方ないし、それなら自分で作るしか無いと思って、とりあえず作ってみました。
久しぶりにwindowsネイティブなソフトを作ったので、とりあえず動作するところまで行ったので公開したいと思います。

説明


立ち上げると、タスクバーに常駐します。
タスクバーから設定を開けます。


設定でキーを割り当てられます。
ディフォルトでは、 Atl + D で 、そのモニターだけ Win + D の効果がでるように作ってあります。
本当は、 Win + D にしたかったんですが、 Windowsがまっさきにフックしやがってこっちにデータが流れてこないので、Alt + D にしました。
好きなようにキー割り当てしてください。
キー割り当てをしたくないものは、 設定画面で DELキーでキー割り当てを解除できます。


機能説明

Alt + Dを押すと、現在マウスカーソルがいるモニター(ディスプレイ)のウインドウを最小化します。
もう一度、 Alt + D を押すともとに戻ります。



↓ Alt + D


Alt + Dはモニターごとに有効か無効かを覚えています。
ここら辺は使ってみるとわかると思います。

機能説明2

ついでに、桃鉄のサミットカードみたいな機能をつけました。
Alt + S を押すと、 現在のモニターに全ウインドウが集結します。



↓ Alt + S

もう一度押すと、元のモニターに戻ります。



ロマサガ2風に、集合〜散れっといってみいいです。意味はありません。

その他

MFC は結構大変だった。
MFC をスタティックリンクすると、リリースモードでも1M超えるとかどんだけでかいんだよ。
やっぱり、データの保存がめんどくさい。
C++0x の auto は偉大だ。
EnumWindows 系の命令に C++0x の lambda を使うと現在だとコンパイルエラーになる。
仕様上ではキャプチャが発生しない lambda は関数ポインタに変換できる。
しかし、それでも、 __stdcall を付けられないのでやっぱりエラーになる。
変更するには、コンパイルオプションを変更するしかないらしい。
C++ の人達はこの仕様で本当にええのんか。


まだいろいろバグがあるからそのうち直す。

参考にしたサイト

http://note.phyllo.net/?eid=806766
http://bucci.bp7.org/archives/733
その他多数...