Как всегда отображать значки программ в трее в Windows по * умолчанию *?
Вопрос
Если программа запускается в 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 #.