【发布时间】: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 中中断程序。
我观察到的:
- SubclassWndProc 被调用。
- lParam 的字符串始终为空(该值由目标应用修改)
- 函数调用后,文本还是空的(不是'1234')
问题:
- 目标应用如何修改消息值?
- 'DefWindowProc' 是程序员可以用来更改静态控件文本的最底层 API 吗?如果不是,那么更改静态控件文本的最佳方法是什么? (用 WM_SETTEXT 试过 SetWindowText、SetDlgItemText、SendMessage,都不管用)
【问题讨论】:
标签: winapi visual-c++ hook