2009-04-27 64 views
6

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

我在找一个等效的System.Windows.Window.IsActive

回答

7

我也对此感到沮丧。你在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; 

} 

我发现这条线始终位于/返回true:

this.ActiveWindow.Active() 

但这个工作得更好(全球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; 
    } 
+1

不错的解决方案迈克,伟大的工作。我觉得虽然ActiveWindow.Active属性应该总是返回true,否则它不是活动窗口呢? – 2012-03-26 03:53:28

2

this.ActiveWindow.Activate()是激活窗口的方法。

this.ActiveWindow.Active是告诉你窗口状态的属性。

相关问题