How to always show program tray icons in Windows by *default*?

前端 未结 3 2032
旧时难觅i
旧时难觅i 2020-12-16 18:36

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

3条回答
  •  南笙
    南笙 (楼主)
    2020-12-16 19:13

    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.

提交回复
热议问题