我正在开发一个(进程内)插件到应用程序,作为我的插件的一部分,我想用我自己的替换应用程序的工具提示。但是,我没有可用的API,所以我决定进入低级别。
我知道工具提示的窗口类,但问题是,我如何检测它正在创建以及如何在之后关闭它?
这是我到目前为止所做的事情:
听起来怎么样?假设确实没有API来处理工具提示,那么我需要一种更简单的方法吗?
谢谢!
P.S标记为C ++ / C#,因为我打算用这两种语言编写它(C ++用于系统范围的钩子,C#用于其他所有语言)
答案 0 :(得分:2)
如果您知道要阻止的窗口类型,则可以简单地将其子类化并在您自己的WndProc
中处理销毁。在工具提示类上使用GetClassLongPtr()和GCL_WNDPROC
,在GCL_WNDPROC
上使用SetClassLongPtr()设置自己的WndProc
,并在WM_CREATE
上调用DestroyWindow()并为剩下的人调用旧的WndProc
..
答案 1 :(得分:0)
这不会奏效。考虑您正在替换工具提示的应用程序视图,并假设您可以告诉它销毁窗口。当应用决定需要关闭工具提示时会发生什么?它没有新窗口的把手,它有旧窗口的把手,你已经销毁了它。事情出错的时候。
如果您希望此工作提示顺利运行,您的插件系统需要明确支持替换工具提示。也许插件框架的可选部分可以是RequestTooltip函数。如果它不存在,或者返回null,或者使用默认的工具提示,则使用默认的工具提示,否则将使用您提供的插件。