【问题标题】:Replacing a window's control with another at runtime在运行时将一个窗口的控件替换为另一个
【发布时间】:2010-03-11 15:31:51
【问题描述】:

我有一个窗口句柄及其richEdit 控件。我可以用我自己的一个替换上述控件吗?我希望它表现得像原来的那样,即成为窗口等的一部分。

我将进一步详细说明该场景 - 我目前正在反汇编一个应用程序,其功能之一是文本编辑器。我当前的(受限制的)环境中有各种程序挂钩,其中一个产生了编辑器窗口的句柄。另一个允许我获取 RichEdit20A 控件窗口主机的句柄。

我想做的是 - 用我自己的(大概是它的 .NET 等效项)覆盖控件并修补应用程序的 GetWindowText 调用以使用新的。为了实现它,我计划用 C#/托管 C++ 编写类库并将其导入我的应用程序(它是用非托管 C++ 编写的)。

此外,可以有任意数量的文本编辑器实例。

【问题讨论】:

  • 这是不可能的,没有办法让应用知道它需要使用不同的窗口句柄。或者将托管代码注入到非托管程序中。
  • 我当前的钩子允许我在 GetWindowTextA 调用(配备 asm 包装器的裸函数)之前修改调用堆栈,并且我不打算注入托管代码本身。你看,我的应用程序充当修补应用程序的非托管包装器。除了调用类库的方法来设置/获取后者的文本之外,它什么也不做。

标签: c# c++ winapi controls handle


【解决方案1】:

这听起来太复杂了。只需替换它的 WndProc(GWL_WNDPROC),什么都不转发,然后使 HWND 无效。这将强制重绘 (WM_PAINT),然后您可以捕获它。所有者可能甚至都不会注意到(当然,除非他们也将其钩住)

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多