[VBNET] 重繪 Systray 移除失效的圖示

先前有個流程控制的小程式,當目標程式關五秒還關不掉的話,會強制送出 Process.Kill ,一般程式也就算了,但這隻程式一執行就會在 Systray 那邊產生小圖,所以次數多了,Systray 會長得不得了…
本來以為很簡單,沒想到 API 居然沒有那區的直接 API ,而且針對那整區送出 WM_PAINT 是沒用的,用 Google 找很久,有找到把圖示拉出來的,但是玩來玩去最後還是 WM_MOUSEMOVE 比較妥當,目前目標環境都沒在 Win7 上跑,Win7 會變成二維的,也不知道 Win7 上會變怎樣,只確定在 Win2008 以前都可以,暫時就先這樣了。
範例程式碼 VB2008:
''' <summary>重繪系統狀態列</summary>

Friend Sub RedrawSystray()
Dim hWndShell, hWndTray, hWndPager, hWndToolBar As IntPtr
hWndShell = MyFindWindow("Shell_TrayWnd")
If Environment.OSVersion.Version.Major = 5 AndAlso Environment.OSVersion.Version.Minor = 0 Then
hWndTray = MyFindWindow("TrayNotifyWnd", , hWndShell)
hWndToolBar = MyFindWindow("ToolbarWindow32", , hWndTray)
Else
hWndTray = MyFindWindow("TrayNotifyWnd", , hWndShell)
hWndPager = MyFindWindow("SysPager", , hWndTray)
hWndToolBar = MyFindWindow("ToolbarWindow32", , hWndPager)
End If
Dim ibx, iby, dx, iMsg As Integer
Dim pRect As RECT
GetWindowRect(hWndToolBar, pRect)
With pRect
dx = 4
iby = CInt((.bottom - .top) / 2) * &HFFFF
For ibx = 1 To .right - .left Step dx
iMsg = SendMessage(hWndToolBar, WindowMessages.WM_MOUSEMOVE, 0, iby + ibx)
Next
End With
End Sub
取之於社群,回饋於社群~
這篇參考下列比較重要的連結:
  1. http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/18a40cd3-9d08-49fb-85df-44f00476850d
  2. http://groups.google.com/group/microsoft.public.vb.winapi/browse_thread/thread/3cb9dcf3a93caf35/fee1156a846a6b62%23fee1156a846a6b62
  3. http://social.msdn.microsoft.com/forums/en-US/winforms/thread/33fdc9f0-dd55-43de-a240-8019ba1155aa/
  4. http://jo0ls-dotnet-stuff.blogspot.com/2008/12/vbnet-enumerate-system-tray.html
  5. http://www.xtremevbtalk.com/archive/index.php/t-71433.html
要列舉圖示的話,上面的連結滿重要的,不過我試過了,列舉圖示不會讓 Systray 區那邊重繪。
另外 Vista 以後,Systray 裡面又分兩個子區,都是 SysPager ,一區是系統圖示,一區是通知區域,而且中文版的 ClassName 還是中文的... 真是超無力...

Categories: 工作點滴, 技術分享 | 發表留言

文章導覽

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: