2010-01-29 81 views
0

我已经使用WH_CALLWNDPROC在WM_SETTEXT消息上设置了挂钩。挂钩后更改字符串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"); 

但他们都不working.Idea这里是挂钩WM_SETTEXT消息,并更改字符串它到达目的地窗口前。

+2

挂钩是观察,而不是修改......不知道你在做什么,但我不认为挂钩是答案。 – Shog9 2010-01-29 17:47:09

回答

1

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

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

执行您想要的操作的方法是使用WH_CBT钩子并列出HCBT_CREATEWND事件。然后在窗口创建子类时处理该消息。