「なんでもタブ化計画」とか「すごい たぶちさん」がWinSCPだとうまくいかない理由

なんでもタブ化してくれるという、便利そうなソフトたち。ちょっと古めみたいだけど。

TeraTermWindowChanger
すごい たぶちさん

WinSCPでこれを試すとうまくいかない。何故か。

これは「なんでも〜」での例だが、赤線のところに注目。「WinSCP (TApplication)」とありますね。

TApplicationってのはこれ、ボーランド(現CodeGear)のRADツール、Delphiで作ったという証明。

Delphi(というかVCL)のアーキテクチャはメインウィンドウを見えないウィンドウにして、ウィンドウメッセージを子ウィンドウにディスパッチするっていう方法が取られてます。Delphi4だったか、それくらいまでは、そいつのおかげでウィンドウの最小化をすると、アニメーションしないっていう仕様があった(アニメーションするのはメインウィンドウのみなんですね。これはWindowsの仕様)。昔のDelphiで作成されたアプリはウィンドウを最小化すればわかったんだが、今では(Delphi5からは)それは直され、きちんとアニメーションします。

ということで、このタブ化計画のソフトはメインウィンドウにタブをくっつけるという仕様になっていることが伺える。WinSCPのウィンドウを移動しても、こいつのタブが追随しないのは、ユーザの見ためではメインウィンドウに見えるWinSCPのそれは、Windowsから見れば子ウィンドウだからということなのです。

参考→http://www.wwlnk.com/boheme/delphi/tips/tec0330.htm
参考→http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-2.htm

つーか、おれの仕事で、Windowsアプリの案件もほとんどない現状では、何の役にも立たない知識だ。でもよー、DelphiVCL(VisualComponentLibrary)ってのは、オブジェクト指向的にみれば、それはそれは美しい構造物だったんだぜ。

時間が出来たら、おれもタブをくっつけるソフトでも作ろうか。タブ付けアプリが、ターゲットのウィンドウをFindWindowして、ForegroundWindowして、ターゲットのウィンドウが動かされたら、WM_MOVEをフックして自分自身も動かすんだろー。原理としてはそれほど難しくはないよな(多分)。そんでDelphiアプリにも対応すれば、少なくともおれは喜ぶ。

ああ、でもおれ、いま、Windowsの開発環境持ってないや。なんとなくC++で作りたいんだよなー。でも、MinGWとかGNUツールでやろうとするとまんどくさいんだよな。。。たまにはそんなマゾになってみるのもいいのかも。

追記
WinSCPソースコードみたら、C++Builderみたいだなー(C++BuilderVCLで構築されてます)。

This is the README file for source code package of WinSCP.


To build full version of WinSCP you need Borland C++ Builder 6 Professional.
You can build version without FTP support with Borland C++ Builder 6 Personal.