日期:2014-05-17  浏览次数:20974 次

C# 捕获不到windows事件(消息)

我的应用启动后,希望能够捕获第三方应用的windows窗体事件(消息->创建、销毁、隐藏)。
比如启动个Notepad,我的应用 收到notepad主窗体创建的消息(WM_Create),并获得句柄。
或者 不是windows标准消息 能够有个什么标志也可以。
附件条件(explorer.exe已被干掉)

我尝试了一些方案:
1.override WndProc :
explorer被干掉后 这个方法就无效了。

2.RegisterWindowMessage+RegisterShellHookWindow+SetWindowLong:
与WndProc 一样 explorer被干掉后,这个方案也瞎了。

3.windows api -》EnumWindows、EnumDesktopWindows 枚举所有窗体。
这个可以得到所有的窗体句柄。但是轮询+枚举显然不靠谱...
而且枚举出500+的窗口句柄 也很难判断出,哪个是我真正需要的。

4.钩子
自己试着用键盘钩子改了个WH_CBT钩子 demo 没有成功
google了一圈 发现C#+全局钩子(WH_CBT) 完全没希望。

希望各位高手能提供个思路或者例子,帮忙解决一下。
非常感谢。

P.S;我发现QQ 等一些在系统托盘的应用,他们的窗体是隐藏 而不是走一般的窗体的 创建和销毁,所以在有explorer的时候 也时常抓不到他们,不知道 这个原理有懂的吗?
C# 消息 windows

------解决方案--------------------
用hook,借助c++写一个全局dll挂钩和做c#的代理
http://www.codeproject.com/Articles/18638/Using-Window-Messages-to-Implement-Global-System-H
------解决方案--------------------
用spy++看可以截到qq的窗口消息啊