VSTO中如何捕捉应用程序级的事件?

laoyebin 2010-03-16 02:58:57
在EXCEL里,this.WindowResize += new Microsoft.Office.Interop.Excel.WorkbookEvents_WindowResizeEventHandler(ThisWorkbook_WindowResize)取到的是EXCEL工作簿级的WindowResize事件,用什么代码能取到EXCEL这个程序的WindowResize事件?
...全文
193 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
laoyebin 2010-03-17
  • 打赏
  • 举报
回复
一下研究不出来,能给个直接点的代码么?
laoyebin 2010-03-17
  • 打赏
  • 举报
回复
应用程序最外层窗口?
就是这个意思。

我研究研究你的代码
lzsh0622 2010-03-17
  • 打赏
  • 举报
回复
应用程序最外层窗口?

试试:
用 WINAPI Hook 钩子程序 监视WINDOWS消息 WindowResize、最大化、最小化这几个消息


// 安装钩子
  
[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
  
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
  
// 卸载钩子
  
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
  
public static extern bool UnhookWindowsHookEx(int idHook);
  
// 继续下一个钩子
  
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
  
public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
  
// 取得当前线程编号
  
[DllImport("kernel32.dll")]
  
static extern int GetCurrentThreadId();
  
声明一下API函数,以后就可以直接调用了。
  
// 第二步:声明、定义。
  
public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
  
static int hKeyboardHook = 0;


// 第三步:写钩子子程
  
钩子子程就是钩子所要做的事情。  




参考:低层开发技术之Hook消息钩子攻略
laoyebin 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lzsh0622 的回复:]
上面链接共有三个例子,是演示如何管理影响WorkbookEvents的类库。
[/Quote]

呃,我说的不是你理解的那个意思哦
那3个例子是在控制台程序里操作,而且加的是工作簿级的事件,在VSTO里没有这么麻烦
我要的是捕捉EXCEL这个应用程序的最小化事件
laoyebin 2010-03-17
  • 打赏
  • 举报
回复
谢谢,我试试去
wuyq11 2010-03-17
  • 打赏
  • 举报
回复
FindWindow查询excel程序获取句柄
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int id);
Excel.Application excelApp= new Excel.Application();
Excel.Workbook excelWorkBook;

try
{
excelWorkBook.Close(true, Type.Missing, Type.Missing);
excelApp.Quit();
}
catch
{
IntPtr t = new IntPtr(excelApp.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
excelWorkBook = null;
excelApp = null;
GC.Collect();
laoyebin 2010-03-17
  • 打赏
  • 举报
回复
再顶一下,7楼来看看哦
laoyebin 2010-03-16
  • 打赏
  • 举报
回复
没全看懂,是我说的那个意思么?捕捉EXCEL应用程序窗口的最小化事件?
明天结给你
lzsh0622 2010-03-16
  • 打赏
  • 举报
回复
上面链接共有三个例子,是演示如何管理影响WorkbookEvents的类库。
laoyebin 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lzsh0622 的回复:]
IConnectionPoint and .NET or: How Managed Event Sinks (part 1): Sample 3
[/Quote]

有些代码不懂,能稍微帮解释一下么
laoyebin 2010-03-16
  • 打赏
  • 举报
回复
高手们来看看哦

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧