我的应用启动后,希望能够捕获第三方应用的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
解决方案 »
- [求助]这样的一个画图,如何写比较高效率?
- 根据datagridview中所有显示的项进行画图
- 关于泛型的返回值
- datagridview显示数据库数据问题
- 求一正则表达式,在【A,E,I,O,U】中,除了【A,E】开头O结尾的组合外,其他的任意组合
- 如何通过word书签将数据库数据插入word中
- 求一延时3分钟并和进程条结合起来的示例程序
- gridview如何显示图片一行三例?
- delay函数
- =S.O.S= 大侠们,救命呀! 有效马上送分!
- “butLogin_Click”不是“ASP.default_aspx”的成员。 D:\VS\website1\Default.aspx
- 如何编辑Datagridview的Tooltiptext
http://www.codeproject.com/Articles/18638/Using-Window-Messages-to-Implement-Global-System-H
我需要截获第三方应用消息。
但是 就和我补充说明的一样。
对于 QQ 和其他一些特别的应用 截获不到主界面的消息。
(也许是因为界面生成来自dll 或者是因为在系统托盘)。我的原始需求是 干掉explorer后 自己仿一个任务栏,所以我是从截获窗口消息这条路思考的。
不知道 有没有更简单(优雅?)的办法直接替代windows的任务栏的部分功能,
比如能在我的界面上,针对第三方应用 自动完成“任务栏式”图标创建。
这个问题,我也还没有找到最好的解决思路,所以对于方式方法的选择,也还有些问题。
目前 我是从 委托api(or钩子)抓消息这个思路在思考的。我想要达到的:
第三方应用 创建(打开)一个窗口时,在我的的应用窗口,能及时创建出一个与windows任务栏中,该窗口相似的图标。(包含系统托盘处的应用)
感谢你的提醒,确实是我的问题。
demo下载后 我在x64下 用vs 运行的项目。GlobalCbtHook 重新编译后,找不到QQ 主窗体了。
改用他项目中自带的dll,现在可以了。
这个钩子 解决了我需求(#11)中的一部分问题,不过 我还需要继续试试。
钩子在64位系统中,截获不到32位应用的消息。
根据MSDN的说法,只能编两个版本dll。