バルーンを消す
ThinkPadの無線LANで、(物理)スイッチを切っているときにサスペンド・レジュームすると「ワイアレス ネットワークは利用不可能です。」といちいち教えてくれやがるのだが、タスクバーを左に置いていることもあり、画面の左側が30秒くらい占拠されてしまいとても邪魔だった。(バルーンだけ出てくれればいいのだが、XPだとタスクバー全体がアクティブになってしまう)
「Windows XPで通知領域のバルーンヒントを無効にする方法」というのがあるのだが、この方法だと全てのバルーン通知が無効になってしまう。
そいつだけ消したいということでSpy++で見てみたらtooltips_class32というツールチップのクラスだった。
手順としては
- EnumWindowsでウィンドウを列挙
- コールバック内で、GetClassNameがtooltips_class32で
- かつGetWindowLong(GWL_STYLE)でWS_VISIBLEがセットされていた場合
- SendMessage(WM_GETTEXT)でメッセージを取得して
- 文字列を比較して、消したいメッセージであれば
- PostMessage(TTM_POP)で消す
という感じで消すことができた。
最初GetWindowTextを使っていて文字列が取得できずにはまった。GetWindowTextで取得できるのは同じプロセスか、あるいは別プロセスのウィンドウタイトルのみで、別プロセスのコントロールのテキストはWM_GETTEXTを使うとのこと。ローカルのヘルプがWindows Mobileのものになっていたおかげで気づくのが遅れた。
また、TTM_GET系のメッセージもTTM_GETTOOLCOUNT以外は軒並み失敗するのだが、これも別プロセスだからだろうか。