2009-05-24 13 views

risposta

13

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.

+4

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 –

+2

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?". –

+0

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

3

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.

2

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.

Problemi correlati