2009-05-24 10 views

Respuesta

13

En el podcast de .NET Rocks, no hace mucho tiempo, Kate Gregory de Microsoft decía que era imposible.

Ella dijo algo así como: "Si el usuario lo quiere (ícono de la bandeja), lo pondrá allí". La razón de esto es para evitar el desorden en el área de la bandeja.

+4

En mi opinión, esto es algo fantástico. Se ha abusado de la bandeja del sistema, y ​​siempre he intentado configurar todo para que "siempre se oculte" para intentar recuperar la pantalla de bienes inmuebles –

+2

Jamie, estoy de acuerdo, pero tenga en cuenta que hay tipos de aplicaciones donde se requiere básicamente un icono de bandeja como el único acceso al programa principal. Y estoy seguro de que el Win7 creará una carga de soporte MASSIVE "¿Dónde está el icono?". –

+0

Bueno, en realidad es posible ... si el usuario puede configurar qué iconos de bandeja quiere mostrar, debe ser posible configurarlo por código (probablemente cambiando algún valor de registro) –

3

Si realmente quiere mostrar su bandeja-icono, puede popup de un globo con un mínimo de texto y justo después ocultar el globo y es la sombra de nuevo siguiendo código ejemplo:

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 

si se repite este (por ejemplo, cada 30 segundos), su icono de bandeja permanecerá allí porque Explorer.exe piensa que hay un globo abierto para mostrar al usuario. Todavía existen algunos problemas menores, como no hacer clic derecho en el icono.

Realmente solía mostrar el ícono de la bandeja para nuestro software de compañía donde el usuario no tiene la intención de hacer esto manualmente y para cada actualización. Entonces quizás esto ayude a alguien ... :)

De lo contrario, estoy totalmente de acuerdo: Esto debería ser solo en manos del usuario, no controlado por la aplicación.

2

Ciertamente no es "imposible". Hay una interfaz COM indocumentada ITrayNotify para recuperar los iconos de la bandeja y cambiar su visibilidad, utilizada por Explorer. Completo C++ fuente aquí: http://thread0.me/tag/windows/

Por supuesto, el uso de una API no oficial es arriesgado y Windows 8 ha instaurado rompiendo cambios a esta API, lo que significa que tiene que utilizar 2 definiciones diferentes para XP - Win7 y Win8 - Win10. Pero bueno, incluso Chrome uses this trick. Solo asegúrese de manejar las fallas correctamente.

Cuestiones relacionadas