2009-04-27 16 views
6

VSTOプロジェクトのExcelウィンドウがアクティブ/フォーカスされているかどうかを知る方法はありますか?VSTO:Application Focus

私はSystem.Windows.Window.IsActiveと同等のものを探しています。

答えて

7

私もこれに不満を抱いています。あなたはVSTOアプリでダイアログを使っていますか?もしそうなら、私が行っていること(例は、Wordであるので、Excelでの違いがあるかもしれません)、次のようにOfficeアプリケーションをアクティブにするために、Windowsフォーム/ダイアログの閉鎖にイベントを追加します:

//... 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

this.ActiveWindow.Active() 

しかし、これは(アクティブウィンドウを追跡するために、グローバルなブール変数 "APPACTIVE")良い作品:この行は常に/ trueが返さある発見した

//... 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を返さなければなりません。そうでなければ、アクティブなウィンドウはそれですか? –

2

this.ActiveWindow.Activate()ですウィンドウをアクティブにするメソッド

this.ActiveWindow.Activeは、ウィンドウの状態を示すプロパティです。