Значок подноса системы не появляется на стартапе

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

  •  13-09-2019
  •  | 
  •  

Вопрос

Я использую следующий код в обработчике событий FormCreate, чтобы создать значок системного лотка. Когда я запускаю свою программу, значок системного лотка выглядит нормально.

Я установил, что мое приложение будет запущено автоматически при запуске Windows. Когда я перезагружаю компьютер, процесс моего приложения начинается, но значок системного лотка никогда не появляется.

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

Я заставляю свое приложение запустить в запуске через его установщик NSIS: WritereGstr HKLM "Software Microsoft Windows CurrentVersion Run" "MyApp" "$ Instdir myApp.exe"

Код для создания значка системного лотка:

with TrayIconData do
  begin
    cbSize := SizeOf(TrayIconData);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
    uCallbackMessage := WM_ICONTRAY;
    hIcon := Application.Icon.Handle;
    StrPCopy(szTip, Application.Title);
  end;

  Shell_NotifyIcon(NIM_ADD, @TrayIconData);
Это было полезно?

Решение

Вы пытаетесь создать значок до того, как Explorer полностью начал. Вам следует обрабатывать ошибки изящно (Прокрутите вниз до «Обработка shell_notifyicon сбой»).

Вы также должны справиться Уведомление о графиках задач - Это позволяет вам воссоздать свои значки после сбоев исследователя и перезапуска.

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

Проблема была вызвана тем, что текущий каталог во время запуска не является каталогом, в котором исполняется исполняемый файл.

Таким образом, GetCurrentDir фактически возвращал разные каталоги в стартапе, и когда приложение было запущено в любое другое время.

Моим заявлением было плохое предположение, что текущий DIR будет тем, в котором проживает исполняемый файл.

Это предположение заставляло приложение никогда не достигать значка лотка, добавляя код вообще. Как только я исправил проблему каталога, код запустил и правильно создал значок.

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