Как ОС windows определяет, в какое окно должно быть отправлено сообщение - PullRequest
0 голосов
/ 30 марта 2020

Вопрос:

Допустим, у меня есть процесс с главным окном и дочерним окном. Когда я печатаю с помощью клавиатуры, как операционная система определяет HWND для отправки сообщения WM_KEYDOWN?

Я знаю о событии l oop и функциях GetMessage, TranslateMessage и DispatchMessage, но я не знаю понять, как поле hwnd установлено в структуре MSG.

Примеры:

Используя Spy ++, я вижу, что иногда дочернее окно получает сообщение WM_KEYDOWN, а иногда и родительское окно .

В winforms текстовое поле с фокусом получает сообщение. Однако в других интерфейсах сообщение пропускает дочернее окно и отправляется прямо в главное окно.

1 Ответ

0 голосов
/ 19 апреля 2020

Входные данные отправляются в окно с фокусом

Согласно комментарию от MSalters:

GITHREADINFO содержит переменную:

HWND  hwndFocus;

Type: HWND

A handle to the window that has the keyboard focus.

Это поведение по умолчанию. Если программа пересылает сообщение в другое окно, то такое поведение было реализовано разработчиком.

Существует много способов обнаружения и обработки ввода, но стандартным методом будет использование очереди сообщений. Вы можете найти программы, которые обнаруживают ввод, не имея фокуса, и это может быть потому, что они используют альтернативный метод чтения ввода, например, GetKeyboardState ().

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