WinRoll を左ダブルクリック対応に

Windowsでもシェード機能がほしくて、何かないか探してたらWinRollというのがありました。常駐し右クリックダウンでシェードが切り替わるものです。

左ボタンダブルクリックにできないかと思い、公開されているソースをダウンロードしてみることに。
すると、なんとすべてmasm32アセンブリ言語のコードで書かれていました。(このコードはC言語っぽいかなりきれいなコードになっているので、Win32プログラミングを知っていたら、どこでなにをやってるかはだいたいわかります。)

で、masm32を探すとここにあるようです。

( http://hp.vector.co.jp/authors/VA014520/asmhsp/chap1.html にも情報がありました。)

ビルドにはあとnmakeも必要で(やってることは少ないので手入力なら無くてもいいけど)、これは.NET SDKにある。昔はmicrosoftからnmake.exeをダウンロードできたけど、今はないみたい。(さらにインストーラを作るにはNSISが必要です。)

あとは一度ビルドしてみて、成功したら、ソースwinrolladd.asmのなか、754行目にWM_NCRBUTTONDOWNとあるので、これをWM_NCLBUTTONDBLCLKに変えてみれば良さそうだ。
つまり:

.elseif eax == 0 && edx == WM_NCRBUTTONDOWN

を:

.elseif eax == 0 && (edx == WM_NCRBUTTONDOWN || edx == WM_NCLBUTTONDBLCLK)

にします。

これでできた。winroll.exeはなぜかシンボルがないというエラーが出て作れなかった*1けど、winroll.dllのほうはうまく作成できました。

nmake winroll.dll

このwinroll.dllをc:\Program Files\WinRollにあるものと入れ替えれば終わりです。
動作も速いし、ダブルクリックでシェードするのでかなり快適です。

*1:297行目をコメントアウトすればビルドでき、実行もできる。windows.incのMENUITEMINFO構造体のメンバーにhbmpInfoが定義されていないため起こる。