2009-12-07 16 views
4

J'utilise le code suivant dans le gestionnaire d'événements FormCreate pour créer une icône de barre d'état système. Lorsque j'exécute mon programme, l'icône de la barre des tâches s'affiche correctement.Icône de la barre d'état système n'apparaissant pas au démarrage

Je configure mon application à démarrer automatiquement au démarrage de Windows. Lorsque je redémarre l'ordinateur, le processus de mon application est démarré mais l'icône de la barre des tâches n'apparaît jamais.

Je pense que cela peut avoir quelque chose à voir avec le moment où le code est exécuté, que peut-être la barre d'état système n'est pas prête à être remplie.

je reçois mon application pour exécuter au démarrage via son programme d'installation NSIS: WriteRegStr HKLM "Software \ Microsoft \ Windows \ CurrentVersion \ Run" "MyApp" "$ INSTDIR \ MyApp.exe"

code pour créer icône de la barre d'état système:

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); 

Répondre

1

Vous tentez de créer l'icône avant que l'Explorateur ne soit entièrement démarré. Vous devriez handle errors gracefully (faites défiler vers le bas pour "Handling Shell_NotifyIcon failure").

Vous devriez également gérer le TaskbarCreated notification - il vous permet de recréer vos icônes après l'écrasement et le redémarrage d'Explorer.

+0

Merci pour l'info utile. J'ai traité un shell_NotifyIcon avec un sommeil et réessayez comme est suggéré, en vain. Je continuerai à chercher des informations et j'accepterai une réponse une fois que j'aurai déterminé quel est le problème dans mon cas spécifique. – SamH

+0

Il n'y a pas un tel paragraphe sur 'Handling Shell_NotifyIcon failure' [ici] (http://msdn.microsoft.com/en-us/library/bb762159.aspx) @RogerLipscombe, avez-vous un autre lien avec plus de détails sur l'échec? J'ai le même problème que OP: https://stackoverflow.com/questions/45255294/rare-error-on-tray-icon-creation-after-a-user-log-out-log-in et pas de succès. J'ai essayé 'TaskbarCreated' etc. mais cela n'a rien changé: une fois tous les 3, 4 ou 5 lancements, l'icône de la barre des tâches n'apparaît pas. – Basj

0

Le problème a été provoqué car le répertoire en cours au démarrage n'est pas le répertoire dans lequel l'exécutable réside. Donc, getCurrentDir retournait différents répertoires au démarrage et lorsque l'application était exécutée à un autre moment.

Mon application faisait la mauvaise supposition que le répertoire courant serait celui dans lequel l'exécutable réside.

Cette hypothèse empêchait l'application d'atteindre l'icône de la barre d'ajout du code. Une fois que j'ai résolu le problème de répertoire, le code a fonctionné et a correctement créé l'icône.

+0

J'ai le même problème aujourd'hui. Pourquoi le répertoire actuel change-t-il quelque chose à propos de systrayicon? Pouvez-vous expliquer plus? Vous chargez l'icône depuis l'intérieur de l'exécutable, n'est-ce pas? Alors, pourquoi le répertoire actuel importan? – Basj