Как всегда показывать значки программ в трее по умолчанию *? - PullRequest
9 голосов
/ 25 мая 2009

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

Ответы [ 4 ]

14 голосов
/ 25 мая 2009

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

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

4 голосов
/ 23 февраля 2012

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

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 секунд), ваш лоток останется там, потому что Explorer.exe считает, что есть открытый воздушный шар для отображения пользователю. Несколько незначительных проблем - таких как отсутствие щелчка правой кнопкой мыши по значку - все еще там.

Я действительно имел обыкновение показывать иконку в трее для нашей компании-программного обеспечения, где пользователь не собирается делать это вручную и для каждого обновления. Так что, может быть, это кому-то поможет ...:)

В остальном я полностью согласен: это должно быть только в руках пользователя, а не под контролем приложения.

2 голосов
/ 18 августа 2015

Это, конечно, не «невозможно». Существует недокументированный COM-интерфейс ITrayNotify для извлечения значков в трее и изменения их видимости, используемый самим проводником. Полный исходный код C ++ здесь: http://thread0.me/tag/windows/

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

1 голос
/ 26 марта 2013

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

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

...