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

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

4 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам