2010-12-06 24 views
6

Mi aplicación está diseñada para sentarse en la bandeja del sistema y comportarse de manera similar a los elementos de la bandeja Red/Volumen/Encendido/Centro de acción en Windows 7 (y los elementos equivalentes en Windows Vista). Es decir, se vuelve visible cuando se hace clic en el icono de la bandeja, y se oculta cuando se pierde el foco.Determinar la ubicación del icono de bandeja

La aplicación está escrita en WPF, pero actualmente utilizo NotifyIcon de WinForms para el icono de la bandeja.

Me gustaría saber si alguien tiene alguna sugerencia sobre cómo podría determinar la posición (es decir, las coordenadas de la pantalla) del icono de la bandeja de mi aplicación. Los elementos predeterminados de la bandeja de Windows Vista/7 tienen alguna forma de hacerlo, ya que las ventanas emergentes se alinean en el centro por encima del icono de la bandeja correspondiente.

En Vista esto no era un gran problema: tenía la aplicación fija permanentemente en la esquina inferior derecha, y esto se veía bien (aunque no había lógica incluida para los casos cuando la barra de tareas no se colocaba en el parte inferior de la pantalla). Sin embargo, en Windows 7, mi aplicación termina oscureciendo el cuadro emergente de la nueva bandeja del sistema, en lugar de sobrevolarlo como lo hacen los controles de volumen, etc.

La mejor solución que he visto en mis búsquedas hasta el momento es manejar el evento de mouse-up en NotifyIcon y usar las coordenadas del mouse para determinar la posición del icono. Creo que terminaré usando este método si a menos que alguien tenga una mejor idea, aunque no es ideal, ya que la posición variará levemente según el lugar dentro del icono en el que el usuario haga clic.

Respuesta

6

Windows 7 y superior exponen la función Shell_NotifyIconGetRect(), que devuelve las coordenadas de la pantalla del rectángulo delimitador del icono.

Sin embargo, deberá proporcionar el icono GUID de notificación y no sé si puede acceder a esa propiedad a través de la clase administrada NotifyIcon.

+0

Muchas gracias :) Voy a ver si puedo conseguirlo trabajando con NotifyIcon e informar de nuevo. – Quppa

+6

Tengo la función Shell_NotifyIconGetRect() trabajando con la clase WinForms NotifyIcon. Documenté el proceso en una publicación de blog aquí: http://blog.quppa.net/?p=17 – Quppa

4

Además de esto, he escrito acerca de un método para encontrar la ubicación de un icono de notificar cuando la función no está disponible Shell_NotifyIconGetRect: http://blog.quppa.net/2010/12/28/windows-7-style-notification-area-applications-in-wpf-part-6-notify-icon-position-pre-windows-7/

+0

Gracias. ¿Este funciona solo en Windowses anteriores? Quiero decir, ¿funciona en versiones más nuevas (Win 7,8)? – Jet

+0

Recomiendo encarecidamente utilizar la función Shell_NotifyIconGetRect en Windows 7 y superior, pero el método que he descrito aquí todavía debería funcionar en las versiones más recientes de Windows. Sin embargo, no encontrará la ubicación dentro del cuadro emergente. – Quppa

Cuestiones relacionadas