Изменение строки после перехвата WM_SETTEXT - PullRequest
0 голосов
/ 29 января 2010

Я установил перехват сообщения WM_SETTEXT с помощью WH_CALLWNDPROC.

В процедуре подключения

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 Ответ

1 голос
/ 29 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...