Se un programma viene eseguito per la prima volta in Windows 7, nasconde automaticamente l'icona. C'è qualche opzione manifest o opzione per forzare Windows 7 a mostrare sempre l'icona di default?Come mostrare sempre le icone del vassoio del programma in Windows di * default *?
risposta
In podcast .NET Rocks, non molto tempo fa, Kate Gregory di Microsoft stava dicendo che è impossibile.
Ha detto qualcosa del tipo: "Se l'utente lo desidera (icona del vassoio) lui/lei lo metterà lì". Il motivo è di evitare problemi nell'area del vassoio.
Se davvero si vuole mostrare barra-icona, è possibile popup un palloncino con testo minimale e solo successivamente nascondere il palloncino ed è ombra di nuovo dal seguente codice-esempio:
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
se si ripete questa (ad esempio ogni 30 secondi), il tuo trayicon rimarrà lì perché Explorer.exe pensa, c'è un fumetto aperto da mostrare all'utente. Alcuni problemi minori, come non fare clic con il pulsante destro del mouse direttamente sull'icona, sono ancora lì.
Ho davvero usato per mostrare l'icona del vassoio per il nostro software aziendale in cui l'utente non è destinato a farlo manualmente e per ogni aggiornamento. Quindi forse questo aiuterà qualcuno ... :)
Altrimenti, sono assolutamente d'accordo: questo dovrebbe essere solo nelle mani dell'utente, non controllato dall'applicazione.
A question marked as duplicate ha la risposta di come è fatto.
Here's a link (alternate link) che spiega come e here's C# code.
Il primo collegamento è rotto, puoi aggiustarlo? – mingxiao
Non è certamente "impossibile". C'è un'interfaccia COM non documentata ITrayNotify
per il recupero delle icone del vassoio e la modifica della loro visibilità, utilizzata da Explorer stesso. Pieno C fonte ++ qui: http://thread0.me/tag/windows/
Naturalmente, utilizzando un'API non ufficiale è rischioso e Windows 8 è intoduced rottura modifiche a questa API, il che significa che è necessario utilizzare 2 diverse definizioni per XP - Win7 e Win8 - Win10. Ma hey, anche Chrome uses this trick. Assicurati di gestire correttamente i guasti.
Secondo me è una cosa fantastica. Il vassoio di sistema è stato abusato, e ho sempre cercato di impostare tutto su "nascondi sempre" per provare lo schermo di recupero immobiliare –
Jamie, sarei d'accordo ma tieni presente che ci sono tipi di app in cui è essenzialmente necessaria un'icona del vassoio come unico accesso al programma principale. E so per certo che Win7 creerà un carico di supporto MASSIVO "Dov'è l'icona?". –
Beh, in realtà è probabilmente possibile ... se l'utente può configurare quali icone del vassoio vuole visualizzare, deve essere possibile configurarlo per codice (probabilmente cambiando qualche valore di registro) –