Система пересылает сообщения клавиатуры в очередь сообщений активного потока, который создал окно с фокусом клавиатуры. Фокус клавиатуры (keyboard focus) - временное свойство окна. Система дает возможность совместно использовать клавиатуру всем окнам на экране, при помощи перемещения фокуса клавиатуры по указанию пользователя из одного окна в другое. Окно, которое имеет фокус клавиатуры, принимает (из очереди сообщений потока, который создал его) все сообщения клавиатуры до тех пор, пока фокус не перейдет к другому окну.
Поток может вызывать функцию GetFocus, чтобы определить, которое из его окон (если есть в наличии) в настоящее время имеет фокус клавиатуры. Поток может дать фокус клавиатуры одному из своих окон, при помощи вызова функции SetFocus. Когда фокус клавиатуры меняет одно окно на другое, система отправляет сообщение WM_KILLFOCUS окну, которое потеряет фокус, а затем отправляет сообщение WM_SETFOCUS окну, которое приобретает фокус.
Концепция фокуса клавиатуры связывается с понятием активного окна. Активное окно (active window) - окно верхнего уровня, с которым пользователь в настоящее время работает. Окно с фокусом клавиатуры является или активным окном, или дочерним окном активного окна. Чтобы помочь пользователю идентифицировать активное окно, система размещает его сверху в Z-последовательности и выделяет подсветкой область его заголовка (если оно является единственным) и рамку.
Пользователь может активизировать окно верхнего уровня, щелкнув по нему мышью, выбрать его, используя комбинацию клавиш ALT+TAB или ALT+ESC, или выбрать его, если оно в Списке Задач (Task List). Поток может активизировать окно верхнего уровня, используя функцию SetActiveWindow. Он может определить, является ли окно верхнего уровня, которое он создал активным, используя функцию GetActiveWindow.
Когда одно окно деактивизируется, а другое активизируется, система отправляет сообщение WM_ACTIVATE. Младшее слово параметра wParam равно нулю, если окно деактивизируется, и не нуль, если оно активизируется. Когда заданная по умолчанию оконная процедура принимает сообщение WM_ACTIVATE, она устанавливает фокус клавиатуры в активном окне.
Чтобы блокировать события ввода с клавиатуры и от мыши из связанных приложений, используйте функцию BlockInput.
Обратите внимание! на то, что, функция BlockInput не будет мешать асинхронной таблице входного состояния клавиатуры. Это означает что вызов функция SendInput, в то время, когда ввод блокирован, изменит асинхронную таблицу входного состояния клавиатуры. |