Как всегда отображать значки программ в трее в Windows по * умолчанию *?

StackOverflow https://stackoverflow.com/questions/904790

  •  05-09-2019
  •  | 
  •  

Вопрос

Если программа запускается в Windows 7 в первый раз, она автоматически скрывает значок.Есть ли какой-либо параметр манифеста или опция, чтобы заставить Windows 7 всегда показывать значок по умолчанию?

Это было полезно?

Решение

Не так давно в подкасте .NET Rocks Кейт Грегори из Microsoft говорила, что это невозможно.

Она сказала что - то вроде:"Если пользователь захочет этого (значок в трее), он / она поместит его туда".Причина этого заключается в том, чтобы предотвратить беспорядок в области лотка.

Другие советы

Если вы действительно хотите показать свой значок в трее, вы можете вывести всплывающее окно с минимальным количеством текста, а сразу после этого скрыть его и снова сделать теневым, следуя кодовому примеру:

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 для извлечения значков в трее и изменения их видимости, используемых самим Проводником.Полный исходный код C ++ здесь: http://thread0.me/tag/windows/

Конечно, используя неофициальный API это рискованно и Windows 8 внесла критические изменения в этот API, что означает, что вы должны использовать 2 разных определения для XP - Win7 и Win8 - Win10.Но, эй, даже Chrome использует этот трюк.Просто убедитесь, что вы правильно справляетесь со сбоями.

A вопрос помечен как дублирующий имеет ответ о том, как это делается.

Вот ссылка (альтернативная ссылка) это объясняет , как и вот код на C #.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top