Win32 API. Работа с клавиатурой


Этот беглый обзор рассматривает, как Windows создает вводимую информацию с клавиатуры и как прикладная программа принимает и обрабатывает эту вводимую информацию.

О вводе информации с клавиатуры

Все прикладные программы, написанные для Microsoft Windows должны принимать вводимую пользователем информацию с клавиатуры также как и от мыши. Базирующаяся на Windows программа, принимает ввод информации с клавиатуры в форме сообщений, посылаемых в ее окна. 

Модель ввода информации с клавиатуры

Windows обеспечивает аппаратно - независимую поддержку клавиатуры для прикладных программ, при помощи установки драйвера устройства, соответствующего текущей клавиатуре. Windows предоставляет независимую от языка поддержку клавиатуры, при помощи использования специфической для языка раскладки символов на клавиатуре, в настоящее время выбранную пользователем или прикладной программой. Драйвер устройства клавиатуры принимает от клавиатуры скэн-коды, которые передаются в соответствии с раскладкой символов на ней, где они преобразуются в сообщения, и посылаются в соответствующие окна в вашей прикладной программе.

Присвоенное для каждой клавиши на клавиатуре уникальное значение, называемое скэн-кодом (scan code), аппаратно-зависимый идентификатор для клавиши на клавиатуре. Клавиатура генерирует два скэн-кода, когда пользователь манипулирует клавишей - первый, когда пользователь нажимает клавишу, а второй, когда пользователь отпускает клавишу.

Драйвер устройства клавиатуры интерпретирует скэн-код и переводит его в код виртуальной клавиши (virtual-key code), в не зависящее от устройства значение, определяемое Windows, которое идентифицирует целевую клавишу. После трансляции скэн-кода, раскладка символов на клавиатуре создает сообщение, которое включает в себя скэн-код, код виртуальной клавиши и другую информацию о нажатии клавиши, а затем помещает сообщение в системную очередь сообщений. Windows удаляет сообщение из системной очереди сообщений и посылает его в очередь сообщений соответствующего потока. В конечном счете, цикл сообщения потока удаляет сообщение и посылает его соответствующей оконной процедуре для обработки.

 

 
« Предыдущая статья   Следующая статья »