2010-01-29 4 views
0

У меня есть настройка на 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"); 

Но ни один из них working.Idea здесь не зацепить WM_SETTEXT сообщение и изменить строку, прежде чем он достиг окна назначения.

+2

Крючки предназначены для наблюдения, а не для изменения ... Не уверен, что вы пытаетесь сделать, но я не думаю, что крючки являются ответом. – Shog9

ответ

1

Нет, WH_CALLWNDPROC не позволяет изменять сообщения, в документации для CallWndProc указано это прямо.

WH_GETMESSAGE позволяет вам изменять сообщение. См. Документацию для GetMsgProc. Однако это, вероятно, не будет работать для того, что вы хотите, поскольку только сообщения, которые извлекаются с помощью GetMessage() или PeekMessage(), и отправлять сообщения, вызывают WndProc напрямую, а не используют очередь сообщений.

Способ сделать то, что вы хотите, использовать крюк WH_CBT и указан для HCBT_CREATEWND событий. Затем подкласс окна, когда он создан, и обрабатывает сообщение WM_SETTEXT.

Смежные вопросы