[英]How to always show program tray icons in Windows by *default*?
如果在Windows 7中首次執行程序,它會自動隱藏該圖標。 是否有任何清單設置或選項強制Windows 7默認始終顯示圖標?
在.NET Rocks播客中,不久前,微軟的凱特格雷戈里說這是不可能的。
她說:“如果用戶想要它(托盤圖標),他/她會把它放在那里”。 原因是為了防止托盤區域混亂。
如果你真的想要顯示你的托盤圖標,你可以用最少的文本彈出一個氣球,然后通過以下代碼示例再次隱藏氣球和它的陰影:
trayIcon.ShowBalloonTip(30000, "", ".", ToolTipIcon.None)
Dim balloonHandle As IntPtr = GetBalloonHwnd(balloonText) ' mainly: FindWindow("tooltips_class32", Nothing)
If (balloonHandle <> IntPtr.Zero) Then
Dim sysShadowClassHwnd As IntPtr = FindWindow("SysShadow", Nothing)
' will hide balloon and leaving a small shadow artifact - just for this balloon
PostMessage(balloonHandle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero)
SetWindowPos(balloonHandle, IntPtr.Zero, 0, 0, 0, 0, SWP_HIDEWINDOW)
If (sysShadowClassHwnd <> IntPtr.Zero) Then
' this will remove the small shadow artifact
PostMessage(sysShadowClassHwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero)
End If
End If
如果你重復這個(例如每30秒),你的trayicon將留在那里,因為Explorer.exe認為,有一個氣球打開顯示給用戶。 一些小問題 - 例如沒有直接右鍵單擊圖標 - 仍然存在。
我真的習慣於顯示我們公司軟件的托盤圖標,用戶不打算手動執行此操作以及每次更新。 所以也許這會幫助別人...... :)
否則,我完全同意:這應該只在用戶手中,而不是由應用程序控制。
這當然不是“不可能的”。 有一個未記錄的COM接口ITrayNotify
用於檢索托盤圖標並更改其可見性,由Explorer本身使用。 完整的C ++源代碼: http : //thread0.me/tag/windows/
當然,使用非官方API 是有風險的 ,Windows 8已經對此API進行了重大修改,這意味着您必須對XP使用2個不同的定義 - Win7和Win8 - Win10。 但是,嘿,即使Chrome使用這個技巧 。 務必妥善處理故障。
標記為重復的問題具有如何完成的答案。
這是一個鏈接 ( 備用鏈接 ),用於解釋C#代碼的方式和位置 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.