Windows 2000にEnableBalloonTips などない

Twitter のはてなBotで Windows2000のタスクトレイのBalloon ToolTipsをオフにする方法はありますか?間接的な回避策でもかまいません。 こういうものがあったので、ちょっと調べてみました。


まず、XPやVistaのVersion 6.00以上の Comctl32.dllは レジストリ HKEY_CURRENT_USER 下
\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced のEnableBalloonTips を読み込んで変数に保存する。なお、キーが存在しない場合はデフォルトで1になっている。

          lea    eax,[ebp-00000200h]
          push    eax
          push    L771F2170
          push    ebx
          push    ebx
          push    SWC77161B60_EnableBalloonTips
          push    [ebp-000001FCh]
          mov    dword ptr [ebp-00000200h],00000004h
          call    [ADVAPI32.dll!RegQueryValueExW]
          push    [ebp-000001FCh]
          call    [ADVAPI32.dll!RegCloseKey]
 L7716711C:
          push    ebx

ところが、Windows 2000に搭載されている5.81と XPの 5.82の Comctl32.dllには該当する処理が無いのです。
だから、Windows 2000でレジストリを設定すればいいと書いてるサイトは間違っています。

まず、Balloon Tipsを表示する処理をリバースエンジニアリングしてみました。
こちらはXP。

 SUB_L771DF8DD:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          sub    esp,0000003Ch
          push    esi
          mov    esi,[ebp+08h]
          push    edi
          xor    edi,edi
          cmp    [L771F2170],edi
          jnz    L771DF8FE ←フラグの判定で終了

          test    byte ptr [esi+0Ch],40h
          jnz    L771DFB72
 L771DF8FE:
          mov    eax,[esi+0Ch]
          shr    eax,05h
          not    eax
          and    eax,00000001h
          cmp    [esi+000000A4h],edi
          mov    [ebp-08h],edi
          mov    [ebp+08h],edi
          mov    [ebp-0Ch],eax
          jnz    L771DF921
          mov    eax,000007D0h
          jmp    L771DF927
 L771DF921:
          call    [KERNEL32.dll!GetTickCount]

最初の処理で、変数の値をチェックしています。

んでこちらが、ComCtl32.dll ver 5.82

 SUB_L5ABB410E:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          sub    esp,00000038h
          push    esi
          mov    esi,[ebp+08h]
          push    edi
          push    esi
          call    SUB_L5ABB40E3
          test    byte ptr [esi+44h],01h
          mov    edi,eax
          mov    [ebp-08h],edi
          jz     L5ABB4145
          test    edi,edi
          jz     L5ABB4136 ←エラー時

          cmp    word ptr [edi],0000h
          jnz    L5ABB4167
 L5ABB4136:
          push    esi
          call    SUB_L5AB6A8AB
          and    dword ptr [esi+44h],FFFFFFFEh
          jmp    L5ABB43B8 ←終了処理

SUB_L7175E4E0 のエラー処理で、関数スキップしている以外は、全て実行になっています。

と言うわけで、バルーンチップを無効にするために、
必ず L5ABB4136に飛ぶように変更します。
こちらが改造ファイル

Download: DisCmCtl.zip
Language: Multilingual
Description: comctl32.dll customized with disable balloon tips
Author: Customized by BlackWingCat based comctl32.dll 5.8.2900.5512

インストールは WINNTにコピーするだけして、HKLM\SYSTEM\CurrentControlSet\Control\Session Manager の SafeDllSearchMode を 0にしてから(KDWでEz KD レジストリにチェックを入れれば自動で入ります)再起動すればOKです。
アンインストールはコピーしたファイルをExplorer終了後に削除するか、レジストリを元に戻せばよいです。

関連記事:
Windows2000のタスクトレイのBalloon ToolTipsをオフにする方法はありますか?間接的な回避策でもかまいません。 - 人力検索はてな
MSDN:バルーン ポップアップを抑制する
JSI Tip 4669. How do I disable Windows 2000 balloon tips?

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です