HTAのWindowがちょっとおかしい件について

FlashWindowでHTAのタスクバーを光らせたあと、アクティブにしても点滅状態が元に戻らないので、これはどういうことかと思って調べていました。
WindowExplorerでmshta.exeの持っているウィンドウを見てみたところ、謎の隠しウィンドウがあったので表示させてみたら、HTAのウィンドウが普通の挙動になったので、この隠しウィンドウとなんらかの関係があることがわかりました。ためしにHTAのウィンドウをGetParentすると、その隠しウィンドウを示しました。つまり、

  • HTAのウィンドウは隠しウィンドウに所有されてる
  • オーナーウィンドウが隠れてると、所有されてるウィンドウの挙動がおかしくなる

ということで、以下のような問題解決方法が考えられました。

  • 隠しウィンドウを表示する
  • 関係を断ち切って、HTAのウィンドウを独立させる

まず後者で検討してみましたが、SetParentなるものはオーナーウィンドウを変えるものではないようだし、どうやらWin32APIでオーナーウィンドウを変えることはできないようなので、(フックとか使えばいけるかもしれないけど)前者でやることにしました。
実はWin9x系では点滅状態が元に戻らない不具合がでなかったので、以下のような荒業で解決しました。

隠しウィンドウに対して

  • SetWindowLongでWS_EX_LAYEREDとWS_EX_TOOLWINDOWを追加
    • WS_EX_TOOLWINDOWでタスクバーとALT+TABの切り替えから消している
  • SetLayeredWindowAttributesで透明にする
  • ShowWindowで表示

HTAの起動時に行います。
ただしこのやり方は自分のパソコン(WinXPsp3, Win2ksp4)でしか試してないです。