我使用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;
}
是否可以在代码中更改上面的字符串。 我试过使用像
这样的APISendMessage(info->hWnd,WM_SETTEXT,0,(LPARAM)L"HEllo");
SetWindowText(info->hWnd,L"Hello");
但是没有一个工作。这里的理念是挂钩WM_SETTEXT消息并在到达目标窗口之前更改字符串。
答案 0 :(得分:1)
不,WH_CALLWNDPROC
不允许您修改消息,CallWndProc的文档直接说明了这一点。
WH_GETMESSAGE
允许您修改邮件。请参阅GetMsgProc的文档。但是,这可能不适用于您想要的内容,因为它只使用GetMessage()或PeekMessage()检索的消息和发送消息直接调用WndProc而不是使用消息队列。
执行所需操作的方法是使用WH_CBT
挂钩并列出HCBT_CREATEWND
事件。然后在创建窗口时对其进行子类化并处理WM_SETTEXT
消息。