挂钩WM_SETTEXT后更改字符串

时间:2010-01-29 17:44:03

标签: c++ winapi hook

我使用WH_CALLWNDPROC在WM_SETTEXT消息上设置了一个钩子。

挂钩程序

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");

但是没有一个工作。这里的理念是挂钩WM_SETTEXT消息并在到达目标窗口之前更改字符串。

1 个答案:

答案 0 :(得分:1)

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

WH_GETMESSAGE允许您修改邮件。请参阅GetMsgProc的文档。但是,这可能不适用于您想要的内容,因为它只使用GetMessage()或PeekMessage()检索的消息和发送消息直接调用WndProc而不是使用消息队列。

执行所需操作的方法是使用WH_CBT挂钩并列出HCBT_CREATEWND事件。然后在创建窗口时对其进行子类化并处理WM_SETTEXT消息。