我正在开发应用程序的(进程中)插件,作为插件的一部分,我想用我自己的工具提示替换应用程序的工具提示。但是,没有可供我执行此操作的 API,因此我决定使用低级别。
我知道工具提示的窗口类,但问题是,我如何检测它正在创建以及之后如何关闭它?
这是我到目前为止想做的事情:
- 在 WM_CREATE 上创建一个系统范围的钩子(Hook)
- 捕获时,检查WM_CREATE目标的类和进程
- 验证它确实是我关心的窗口:
- 如果进程是我的插件所在的进程
- 如果类是正确的类型
- 并且如果正确的应用程序处于焦点(在多个应用程序的情况下)
- 向创建的窗口发送 WM_DESTROY 并在其位置创建我自己的窗口
听起来怎么样?假设确实没有 API 来处理工具提示,是否有更简单的方法来满足我的需要?
谢谢!
P.S 标记为 C++/C#,因为我打算用这两种语言编写它(C++ 用于系统范围的 Hook ,C# 用于其他一切)
最佳答案
如果您知道要阻止的窗口的类型,您可以简单地将其子类化并在您自己的 WndProc
中处理销毁。使用 GetClassLongPtr()在工具提示类上使用 GCL_WNDPROC
,使用 SetClassLongPtr()使用 GCL_WNDPROC
设置您自己的 WndProc
并让它在 WM_CREATE
上调用 DestroyWindow() 并调用旧的 WndProc
其余的..
关于c# - 在窗口出现之前拦截并隐藏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4347803/