繁体   English   中英

挂钩WM_SETTEXT后更改字符串

[英]Changing string after hooking WM_SETTEXT

我已经使用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消息并在字符串到达​​目标窗口之前对其进行更改。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM