c++ - Hook WM_SETTEXT 后更改字符串

标签 c++ winapi hook

我已经使用 WH_CALLWNDPROC 在 WM_SETTEXT 消息上设置了一个钩子(Hook)。

在钩子(Hook)程序中

CWPSTRUCT* info = (CWPSTRUCT*) lParam;
wchar_t *wsz = NULL;
switch(info->message)
{
case WM_SETTEXT:
wsz = (wchar_t *) info->lParam;
//info->lParam = (LPARAM) L"Hello";
//SendMessage(info->hWnd,WM_SETTEXT,0,(LPARAM)L"HEllo");
//SetWindowText(info->hWnd,L"Hello");


break;
}

是否可以像上面的代码那样更改字符串。 我尝试使用像

这样的 API
SendMessage(info->hWnd,WM_SETTEXT,0,(LPARAM)L"HEllo");
SetWindowText(info->hWnd,L"Hello");

但它们都不起作用。这里的想法是 Hook WM_SETTEXT 消息并在它到达目标窗口之前更改字符串。

最佳答案

不,WH_CALLWNDPROC 不允许您修改消息,CallWndProc 的文档直接说明了这一点。

WH_GETMESSAGE 允许您修改消息。请参阅 GetMsgProc 的文档.但是,这可能无法满足您的需求,因为它仅使用 GetMessage() 或 PeekMessage() 检索并发送消息直接调用 WndProc 而不是使用消息队列。

做你想做的事情的方法是使用 WH_CBT Hook 并为 HCBT_CREATEWND 事件列出。然后在创建窗口时对其进行子类化并处理 WM_SETTEXT 消息。

关于c++ - Hook WM_SETTEXT 后更改字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2163899/

相关文章:

c++ - 有没有办法在一个进程中使用 Clang 编译 C++ 多个文件?

vba - 在 VBA 中逐像素扫描图像

c - Unix daemon() 子例程的 win32 替代方案是什么?

c++ - winapi - 获取和/或更改我的钩子(Hook)的顺序和优先级

java - Cucumber 类扩展步骤定义和 Hook

java - 无密码登录 Liferay 用户

c++ - std::cout 在哪里定义?

c++ - ESP : Auto login/accept message by OS with redirect to page like public WIFI portals access points

c++ - C 风格、C++ 流或 Win32 API 文件 I/O?

c++ - Namespace or Class,只封装函数成员哪个更好