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