Domanda

Io uso il seguente codice nel gestore di eventi FormCreate per creare una barra di sistema. Quando eseguo il mio programma nella barra di sistema appare bene.

Ho impostato la mia domanda essere avviato automaticamente all'avvio di Windows. Quando si riavvia il computer di mio processo di applicazione viene avviata, ma l'icona della barra di sistema non compare mai.

Penso che potrebbe essere qualcosa a che fare con la tempistica di quando viene eseguito il codice, che, forse, il vassoio di sistema non è pronto a essere popolato.

ottengo la mia app per eseguire all'avvio via è installer NSIS: WriteRegStr HKLM "Software \ Microsoft \ Windows \ CurrentVersion \ Run" "MyApp" "$ INSTDIR \ MyApp.exe"

Il codice per creare barra di sistema:

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);
È stato utile?

Soluzione

Si sta tentando di creare l'icona prima di Explorer è completamente avviato. Si dovrebbe gestire gli errori grazia (scorrere fino alla "Gestione fallimento Shell_NotifyIcon" ).

Si dovrebbe anche gestire il TaskbarCreated notifica - vi permette di ricreare le icone dopo Explorer si blocca e si riavvia.

Altri suggerimenti

Il problema è stato causato perché la directory corrente durante l'avvio non è la directory in cui vive eseguibili.

Così getCurrentDir è stato effettivamente tornando diverse directory all'avvio e quando l'applicazione è stato eseguito in qualsiasi altro momento.

La mia domanda stava facendo i poveri presupposto che la directory corrente sarebbe quello in cui risiede l'eseguibile.

Questa ipotesi stava causando l'applicazione per non raggiungono mai l'icona sulla barra l'aggiunta di codice a tutti. Una volta ho sistemato la questione directory il codice ha funzionato correttamente e creato l'icona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top