If a program is executed for the first time in Windows 7, it automatically hides the icon. Is there any manifest setting or option to force Windows 7 to always show the icon by default?
In .NET Rocks podcast, not long time ago, Kate Gregory from Microsoft was saying that it is impossible.
She said something like: "If user wants it (tray icon) he/she will put it there". Reason for this is to prevent mess in the tray area.
If you really want to show your tray-icon, you can popup a balloon with minimal text and just afterwards hide the balloon and it's shadow again by following code-example:
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
if you repeat this (e.g. every 30 seconds), your trayicon will stay there because Explorer.exe thinks, there is a balloon open to display to the user. A few minor issues - such as no right-click directly on icon - are still there.
I really used to show the tray icon for our company-software where the user are not intended to do this manually and for each update. So maybe this will help someone... :)
Otherwise, I totally agree: This should be only in hands of the user, not controlled by the application.
It's certainly not "impossible". There is an undocumented COM interface ITrayNotify
for retrieving tray icons and changing their visibility, used by Explorer itself. Full C++ source here: http://thread0.me/tag/windows/
Of course, using an unofficial API is risky and Windows 8 has intoduced breaking changes to this API, which means you have to use 2 different definitions for XP - Win7 and Win8 - Win10. But hey, even Chrome uses this trick. Just be sure to handle failures properly.
© 2022 - 2024 — McMap. All rights reserved.