Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VSTO: Application Focus

Anyone know of a way to see if the Excel window of a VSTO project is active/in focus?

I'm looking for an equivalent of System.Windows.Window.IsActive.

like image 282
Peder Rice Avatar asked Apr 27 '09 20:04

Peder Rice


2 Answers

I've been frustrated with this as well. Are you using a dialog in the VSTO app? If so, what I have done is add an event to the closing of a Windows Form/Dialog to activate the Office application as follows (example is with Word, so there may be differences in 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 have found this line always lies/returns true:

this.ActiveWindow.Active()

But this works better (global bool variable "AppActive" to keep track of active window):

//... 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;
    }
like image 143
Michael Regan Avatar answered Oct 19 '22 10:10

Michael Regan


this.ActiveWindow.Activate() is the method that activates the window.

this.ActiveWindow.Active is the property that tell you the state of the window.

like image 24
Lupu Silviu Avatar answered Oct 19 '22 09:10

Lupu Silviu