VSTO:应用焦点

Ped*_*ice 6 .net vb.net excel vsto

任何人都知道如何查看VSTO项目的Excel窗口是否处于活动状态/焦点?

我正在寻找相当于System.Windows.Window.IsActive.

Mic*_*gan 8

我也对此感到沮丧.你在VSTO应用程序中使用对话框了吗?如果是这样,我所做的是添加一个事件来关闭Windows窗体/对话框以激活Office应用程序,如下所示(例如,使用Word,因此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;

}
Run Code Online (Sandbox Code Playgroud)

我发现这行总是谎言/返回true:

this.ActiveWindow.Active()
Run Code Online (Sandbox Code Playgroud)

但这样做效果更好(全局bool变量"AppActive"跟踪活动窗口):

//... 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;
    }
Run Code Online (Sandbox Code Playgroud)