修改所有者绘制的控件

时间:2016-08-05 18:53:25

标签: c# windows winapi win32gui

我有第三方应用程序我正在编写一个加载项,如果可能的话我需要能够修改一个特定的对话框。该对话框有许多控件和组......似乎是所有者绘制的,因此不会将窗口句柄暴露给像spy ++等工具。我欢迎任何有关如何禁用此对话框上的控件的见解。

由于我在进程中运行,我可以使用绕道(https://www.microsoft.com/en-us/research/project/detours/)拦截函数并使用enumwindows / enumchildwindows等调用来查找控件的句柄,然后我可以使用NativeWindow(C#)等技术来覆盖wndproc消息并进行操作。我也熟悉setwindowshookex并挂钩消息队列。

只是寻找使用所有者绘制控件的一些想法和模式。谢谢!

[Edit1]我也熟悉UI自动化(C#/ C ++)和IAccessible框架。这些将允许我一些控制(潜在的),如检测鼠标点击等,但我希望更优雅的东西。例如:使用普通的组合框,如果我有一个句柄,我可以使用sendmessage()向它发送CB_ *消息来操纵它的内容。如果你不能得到句柄,你如何使用组合框呢?因为它是所有者绘制的(大概是)并且是另一个所有者绘制的父母的一部分。

1 个答案:

答案 0 :(得分:0)

  因此,不要向像spy ++和其他工具

这样的工具公开窗口句柄

然后就操作系统而言,它们不是真正的控件,因此您无法直接访问/操作它们 。该应用程序必须为它们公开API或UI自动化接口。据推测,该应用程序不会提供比真正想要附加组件更多的访问权限。

您应与应用作者联系,以获取实现目标的帮助。