VSTO-从Excel工作簿上的任务栏捕获点击的事件

我正在研究VSTO excel 2007工作簿应用程序并寻找跟踪Excel应用程序点击的事件。

有两种情况:

  1. 用户点击任务栏中的excel图标后进入excel。
  2. 用户在按下ALT + TAB后进入Excel表格

在这里输入图像描述

我努力了

ThisWorkbook_ActivateEvent(); 

 this.Application.WindowActivate 

但他们似乎并没有工作。

这是一个完整的VSTO解决scheme,虽然不是很好,但它使用了一个定时器。 我已经用两种schemetesting过了。

约尔格


 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using Excel = Microsoft.Office.Interop.Excel; using Office = Microsoft.Office.Core; using Microsoft.Office.Tools.Excel; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Diagnostics; namespace ExcelAddIn_TestExcelWindowActivation { public partial class ThisAddIn { [DllImport("user32.dll", EntryPoint = "GetForegroundWindow")] public static extern IntPtr GetForegroundWindow(); private IntPtr _excelWindowHandle = IntPtr.Zero; private IntPtr _lastForegroundWindowHandle = IntPtr.Zero; private Timer _timerForegroundWindowObserver = null; private void InternalStartup() { this.Startup += new System.EventHandler(ThisAddIn_Startup); this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); } private void ThisAddIn_Startup(object sender, System.EventArgs e) { //Get excel handle _excelWindowHandle = new IntPtr(Globals.ThisAddIn.Application.Hwnd); //Initialize and start the timer _timerForegroundWindowObserver = new Timer(); _timerForegroundWindowObserver.Interval = 1000; //ms _timerForegroundWindowObserver.Tick +=new EventHandler(_timerForegroundWindowObserver_Tick); _timerForegroundWindowObserver.Start(); Debug.Print("ThisAddIn_Startup completed."); } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { //Stop and delete the timer _timerForegroundWindowObserver.Stop(); _timerForegroundWindowObserver = null; } private void _timerForegroundWindowObserver_Tick(object sender, EventArgs e) { var foregroundWindowHandle = GetForegroundWindow(); //Remember the last foreground window and exit if there were no changes... if (foregroundWindowHandle == _lastForegroundWindowHandle) return; _lastForegroundWindowHandle = foregroundWindowHandle; //When Excel is activated: Give info... if (foregroundWindowHandle == _excelWindowHandle) { Debug.Print("Excel window is activated yet."); } } } }