【问题标题】:How to set text for Static in subclass proc?如何在子类proc中为静态设置文本?
【发布时间】:2017-07-10 08:20:08
【问题描述】:

我正在尝试在另一个应用程序中更改静态控件的文本。

我无法使用我的程序中的 WM_SETTEXT 来更改其文本。 (目标应用有一些机制可以防止这种情况发生)

所以我向目标应用程序注入了一个库。在库中,我将静态控件子类化。

WNDPROC wndProcOrig;

LRESULT CALLBACK SubclassWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
    case WM_SETTEXT:
        DefWindowProc(hWnd, uMsg, wParam, (LPARAM)"1234");
        return TRUE;
    case WM_USER + 5003:
        return TRUE;
    }
    return CallWindowProc(wndProcOrig, hWnd, uMsg, wParam, lParam);
}


wndProcOrig = (WNDPROC)SetWindowLongPtr(textHandle, GWLP_WNDPROC, (LONG_PTR)SubclassWndProc);

我使用 Window Detective 将文本设置为静态,当我调试时,我可以在 SubclassWndProc 中中断程序。

我观察到的:

  1. SubclassWndProc 被调用。
  2. lParam 的字符串始终为空(该值由目标应用修改)
  3. 函数调用后,文本还是空的(不是'1234')

问题:

  1. 目标应用如何修改消息值?
  2. 'DefWindowProc' 是程序员可以用来更改静态控件文本的最底层 API 吗?如果不是,那么更改静态控件文本的最佳方法是什么? (用 WM_SETTEXT 试过 SetWindowText、SetDlgItemText、SendMessage,都不管用)

【问题讨论】:

    标签: winapi visual-c++ hook


    【解决方案1】:

    是的DefWindowProc基本上是最低级但是一个窗口does not have to use it,它可以直接回答WM_GETTEXT

    尝试将WM_GETTEXTWM_SETTEXT 直接传递给DefWindowProc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 2018-08-18
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2017-12-10
      • 2017-06-08
      • 1970-01-01
      相关资源
      最近更新 更多