¿Alguien sabe de una forma de ver si la ventana de Excel de un proyecto de VSTO está activa/enfocada?VSTO: Enfoque de la aplicación
Estoy buscando un equivalente de System.Windows.Window.IsActive
.
¿Alguien sabe de una forma de ver si la ventana de Excel de un proyecto de VSTO está activa/enfocada?VSTO: Enfoque de la aplicación
Estoy buscando un equivalente de System.Windows.Window.IsActive
.
Me he sentido frustrado con esto también. ¿Estás usando un diálogo en la aplicación VSTO? Si es así, lo que he hecho es añadir un evento para el cierre de un formulario Windows/Dialog para activar la aplicación de Office de la siguiente manera (ejemplo es la palabra, lo que puede haber diferencias en Excel):
//... VSTO Startup Event
WindowsForm form = new WindowsForm();
form.FormClosed += new FormClosedEventHandler(form_FormClosed);
form.Show();
void form_FormClosed(object sender, FormClosedEventArgs e)
{
this.Application.Activate();
this.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateNormal;
}
I han encontrado esta línea siempre miente/devuelve true:
this.ActiveWindow.Active()
Pero esto funciona mejor (variable global bool "AppActive" para realizar un seguimiento de la ventana activa):
//... VSTO Startup Event
this.Application.WindowDeactivate += new Microsoft.Office.Interop.Word.ApplicationEvents4_WindowDeactivateEventHandler(Application_WindowDeactivate);
this.Application.WindowActivate += new Microsoft.Office.Interop.Word.ApplicationEvents4_WindowActivateEventHandler(Application_WindowActivate);
void Application_WindowActivate(Microsoft.Office.Interop.Word.Document Doc, Microsoft.Office.Interop.Word.Window Wn)
{
AppActive = true;
}
void Application_WindowDeactivate(Microsoft.Office.Interop.Word.Document Doc, Microsoft.Office.Interop.Word.Window Wn)
{
AppActive = false;
}
this.ActiveWindow.Activate()
es el método que activa la ventana.
this.ActiveWindow.Active
es la propiedad que le indica el estado de la ventana.
buena solución Mike, buen trabajo. Sin embargo, siento que esa propiedad ActiveWindow.Active siempre DEBE devolver verdadero, de lo contrario no es la ventana activa ¿verdad? –