2009-04-27 103 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是告訴你窗口狀態的屬性。