UWSCのフォームをタスクバーに最小化する

stuncloudさんの投稿で、フォームをタスクバーに入れるニーズがあることに気付いた。
ということでやってみた。

スクリプト

フォームは表示済みとして、以下のスクリプトを追加する。
(平行処理とかの想定ね。スレッドでいけるかは未検証)

DIM hwnd = IDTOHND(GETID(GET_FORM_WIN))
DEF_DLL GetWindowLongW(HWND, int): DWORD: user32
DEF_DLL SetWindowLongW(HWND, int, DWORD): DWORD: user32
DEF_DLL ShowWindow(HWND, int): BOOL: user32
ShowWindow(hwnd, 0)
SetWindowLongW(hwnd, -20, GetWindowLongW(hwnd, -20) OR $40000)
ShowWindow(hwnd, 5)

XPだとShowWindowは不要だけど、Win7では必要らしい。

問題点

タスクバーに出ちゃう。
いや、希望動作ですけど、既にあるUWSCのタスクと別にタスクバーに出るのです。
(これを統合する方法は未検討)
EXE化の場合、EXEのタスクとフォームのタスクになる。
EXE化では、タスクバーに表示しないをチェックすれば良いですが、、、
今度は起動時にタスクバーに出ない、という問題が発生する。
上記の追加スクリプトがすぐ流れれば、フォームの分が表示されますが。

参考

参考にしたのは、
http://stackoverflow.com/questions/7219063/win32-how-to-hide-3rd-party-windows-in-taskbar-by-hwnd
もっともこれは、非表示にする方法だけどね。