【发布时间】:2011-05-19 20:50:03
【问题描述】:
我正在为应用程序开发一个(进程中)插件,作为我插件的一部分,我想用我自己的替换应用程序的工具提示。但是,我没有可用的 API 来执行此操作,因此我决定使用低级。
我知道工具提示的窗口类,但问题是,如何检测它正在创建以及之后如何关闭它?
到目前为止,这是我想做的事情:
- 在 WM_CREATE 上创建系统范围的挂钩
- 当被捕获时,检查 WM_CREATE 目标的类和进程
- 验证它确实是我关心的窗口:
- 如果进程是我的插件所在的进程
- 如果类的类型正确
- 如果正确的应用程序是焦点(在多个应用程序的情况下)
- 向创建的窗口发送 WM_DESTROY 并在其位置创建我自己的窗口
听起来怎么样?假设确实没有 API 来处理工具提示,有没有更简单的方法来满足我的需要?
谢谢!
P.S 标记为 C++/C#,因为我打算用这两种语言编写它(C++ 用于系统范围的挂钩,C# 用于其他所有语言)
【问题讨论】:
-
工具提示通常是通过为每个顶级父窗口创建并保留 一个 工具提示窗口来完成的。然后在需要时调整并显示该工具提示窗口,并在不需要时隐藏。因此,您需要跟踪窗口何时显示,而不是创建时间,并且您显然不想销毁它(您可能会隐藏它)。
-
@Leo:感谢您的评论。这可能是非常正确的。
标签: c# c++ windows message-queue subclass