アーカイブ

2008年 7月 8日 のアーカイブ

Alt+Tabキーでのタスク切り替えに、同じアイコンが二つ表示されてていて、
その一つが、見えてはいけないはずの隠し窓で、そのタイトルがタブマンコと、ハッキリ表示されていた。
タブマンコは、タスクトレイやグローバルフックを制御する隠し窓のタイトルで、
隠し窓はそもそもユーザーには見えないので、見えない所にこっそりアプリ名を書いたつもりが、
Alt+Tabで簡単に表示されてしまった。

.NETアプリで隠し窓をやる方法がわからなかったので、ググって調べたら、
フォームのプロパティで、最小化かつタスクバーに表示しない状態にする例が見つかったので、
そのとおりパクったのだが、タスクバーに表示しなくてもタスク切り替えで表示されちゃダメじゃん。
今のところの解決策は、Delphi流でWS_EX_TOOLWINDOWだ。
Delphiアプリは昔から隠しウィンドウを持っているのが一般的で、
隠しウィンドウをタスク切り替えから消すとかいう方法も一般的に知られてきた。
そのまんまそれをC♯でやったのだが、ひょっとしたら.NET流のやり方もあるかもな。
.NET流のやり方があったとしても、知らなければDelphi流も通じちゃうから付け焼き刃で対策できる。

元々Delphiで作っていたものを、64bit対応が必要になってC♯に移植したわけで、
移植と言えども.NETはグローバルフックをサポートしないので、ほとんどネイティブ呼び出しで作られている。
DelphiでやってたことをそのままC♯でやらせ、Delphiでは出来ない64bit対応をさせたにすぎない。
中身はC♯らしいことなどしていなくて、いかにDelphiと同じ事をC♯でやるかというコードになっている。
これで、窓の隠し方までDelphiから移植することになった。

タブマンコにはあまり手をかけないつもりでいたが、ちょっとずつ気になるところが見つかって、
見つかり次第対応して行ってるので、わりとこだわって手をかけてしまった。
でもたぶんこれで限界。
偽物のタブ式である以上、これ以上は気になってもどうにもならないだろう。