我正在开发一个(进程中)插件到应用程序,并作为我的插件的一部分,我想用我自己的replace应用程序的工具提示。 但是,我没有可用的API,所以我决定去低级。
我知道工具提示的窗口类,但问题是,如何检测它正在创build,然后如何closures它?
这是我迄今为止想要做的事情:
听起来怎么样? 假设确实没有API来处理工具提示,有什么我需要的更简单的方法吗?
谢谢!
PS标记为C ++ / C#,因为我打算用这两种语言编写它(C ++用于系统范围的钩子,C#用于其他任何东西)
如果您知道要阻止的窗口的类型,则可以简单地将其子类化并在您自己的WndProc
处理该破坏。 在工具提示类上使用GetClassLongPtr()和GCL_WNDPROC
,使用SetClassLongPtr()和GCL_WNDPROC
来设置你自己的WndProc
并让WM_CREATE
调用DestroyWindow(),然后调用旧的WndProc
。
这是行不通的。 考虑应用程序的视图,你正在替换的工具提示,并假设你可以告诉它摧毁Windows。 当应用程序决定需要关闭工具提示时会发生什么? 它没有你的新窗口的句柄,它具有旧窗口的句柄,你已经销毁了。 事情出错的时候了。
你的插件系统需要明确支持替换工具提示,如果你想这个工作顺利。 也许插件框架的可选部分可能是一个RequestTooltip函数。 如果它不存在,或者返回null,或者使用默认工具提示,否则使用你提供的插件。