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.
Muchas gracias :) Voy a ver si puedo conseguirlo trabajando con NotifyIcon e informar de nuevo. – Quppa
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