Я могу выбрать любое видимое окно, которое я хочу, и получить его главный дескриптор, но я не могу обрабатывать отправку или получение сообщений. Функция GetMessage() всегда возвращает 0. Что делать, если я хочу отправить сообщение о нажатой клавише, когда текстовое поле, принадлежащее другому окну, активно?
MSG msg;
WPARAM wParam;
LPARAM lParam;
UINT message;
while(TRUE)
{
GetMessage(&msg, rHwnd, 0, 0); // get message from another window
TranslateMessage(&msg);
wParam = msg.wParam;
lParam = msg.lParam;
message = msg.message;
switch(message) // check whether an user clicked the 't' key
{
case WM_CHAR:
switch(wParam)
{
case 't':
MessageBox(NULL, "t", "", 0);
break;
}
break;
}
}
Отправка сообщений в окно проста - используйте PostMessage()
или SendMessage...()
для этого (хотя для имитации ввода клавиатуры вы должны использовать SendInput()
). Однако GetMessage()
может только возвращать сообщения для окна, принадлежащего вызывающему потоку, он не может получать сообщения для окна, которое принадлежит другому потоку/процессу. Если вам нужно обработать сообщения, предназначенные для другого приложения, вы должны использовать крючок сообщения через SetWindowsHookEx()
.
*/
закрывающему комментарию?