Win32 API. Функции и сообщения ввода информации с клавиатуры

ОГЛАВЛЕНИЕ

Следующие функции используются, чтобы принимать и обрабатывать ввод информации с клавиатуры.

 

Функция ActivateKeyboardLayout

(АктивизацияРаскладкиКлавиатуры)

Выполнение функции < b>в среде Windows 95 и Windows NT существенно различается. Чтобы выявить эти различия, эта страница справочника первые представляет ее реализацию в среде Windows 95 во всей полноте, в соответствии с версией Windows NT.

Windows 95:

Функция ActivateKeyboardLayout устанавливает язык ввода для текущего потока. Эта функция принимает дескриптор раскладки символов на клавиатуре, который идентифицирует регион также как и физическую раскладку клавиатуры.

Синтаксис

HKL ActivateKeyboardLayout
(
HKL hkl, // дескриптор раскладки клавиатуры
UINT Flags // флажки раскладки клавиатуры
);

Параметры
hkl
Дескриптор раскладки символов на клавиатуре или дополненный нулями идентификатор региона. Этот параметр может быть любой допустимый дескриптор раскладки символов на клавиатуре, полученный при помощи использования функции LoadKeyboardLayout или GetKeyboardLayoutList или одного из следующих значений:

  • HKL_NEXT - Выбирает следующую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.
  • HKL_PREV - Выбирает предыдущую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.

Flags
Определяет флажки раскладки символов на клавиатуре. Значение этого параметра может быть:

  • KLF_REORDER - Переупорядочивает список раскладок символов на клавиатуре, перемещая данный дескриптор раскладки в начало списка. Если это значение не дается, список пролистывается без изменения порядка. Например, если пользователь имеет активной Английскую раскладку, а также имеет загруженные Французскую, Немецкую и Испанскую раскладки (вот в таком порядке), то активизация Немецкой раскладки с установленным битом KLF_REORDER создаст следующий порядок: Немецкая, Английская, Французская, Испанская раскладки. Активизация Немецкой раскладки без установки значения KLF_REORDER создала бы следующий порядок: Немецкая, Испанская, Английская, Французская раскладки.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - дескриптор предыдущей раскладки символов на клавиатуре. Иначе, оно нулевое. Чтобы получить расширенные данные об ошибках, используйте функцию GetLastError.

Замечания
Несколько раскладок символов на клавиатуре могут быть загруженными в любой момент, но в каждый отдельный момент, активной - может быть только одна. Загрузка многочисленных раскладок клавиатуры делает возможным быстро переключаться между ними.
Прикладная программа может создать правильный дескриптор раскладки, при помощи установки в старшем слове нулей, а младшем слове идентификатора региона. Использование таких дескрипторов раскладки символов на клавиатуре изменяет язык ввода данных без воздействия на физическую раскладку.
Когда для каждого региона предусмотрены многочисленные редакторы метода ввода данных (IME), передающийся дескриптор раскладки символов на клавиатуре, в котором старшее слово (дескриптор устройства) является нулевым, приводит в действие первый IME в списке "принадлежащем" региону.

Смотри также
LoadKeyboardLayout, GetKeyboardLayoutName, UnloadKeyboardLayout

Windows NT:

Функция ActivateKeyboardLayout активизирует другую раскладку символов на клавиатуре и устанавливает активную раскладку символов в целом для системы, а не для вызывающего потока.

Синтаксис

BOOL ActivateKeyboardLayout(
HKL hkl, // дескриптор раскладки клавиатуры
UINT Flags // флажки раскладки клавиатуры
);

Параметры
hkl
Идентифицирует раскладку символов на клавиатуре, которая будет активизирована. Раскладка должна быть загружена предыдущим вызовом функции LoadKeyboardLayout. Этот параметр должен быть или дескриптор раскладки символов на клавиатуре или одно из следующих значений:

  • HKL_NEXT - Выбирает следующую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.
  • HKL_PREV - Выбирает предыдущую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.

Flags
Определяет, какая раскладка символов на клавиатуре должна быть активизирована. Этот параметр может быть одним из следующих значений:

  • KLF_REORDER - Если этот бит установлен, кольцевой список системы загруженных раскладок символов на клавиатуре переупорядычевается. Если этот бит не установлен, список чередуется без изменения порядка. Например, если пользователь имел активной Английскую раскладку, а также имеет загруженные Французскую, Немецкую и Испанскую раскладки (вот в таком порядке), то активизация Немецкой раскладки с установленным битом KLF_REORDER создаст следующий порядок: Немецкая, Английская, Французская, Испанская раскладки. Активизация Немецкой раскладки без установки значения KLF_REORDER создала бы следующий порядок: Немецкая, Испанская, Английская, Французская раскладки.Если загружены меньше чем три раскладки символов на клавиатуре, значение этого флажка не применяется.
  • KLF_UNLOADPREVIOUS - Предварительно загружает активную раскладку клавиатуры.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - ИСТИНА (TRUE).
Если функция не выполняет задачу, величина возвращаемого значения - ЛОЖЬ(FALSE). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Несколько раскладок символов на клавиатуре могут быть загруженными в любой момент, но в каждый момент времени активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключиться между раскладками.

Смотри также
LoadKeyboardLayout, GetKeyboardLayoutName, UnloadKeyboardLayout

Размещение и совместимость ActivateKeyboardLayout

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция EnableWindow

(ВключитьОкно)

Функция EnableWindow включает или отключает мышь и ввод информации с клавиатуры заданного окна или органа управления. Когда ввод информации заблокирован, окно не принимает ввод информации типа щелчков клавишами мыши и нажатий клавиш клавиатуры. Когда ввод информации включен, окно принимает всю вводимую информацию.

Синтаксис

BOOL EnableWindow
(
HWND hWnd, // дескриптор окна
BOOL bEnable // флажок для включения или отключения ввода
);

Параметры
hWnd
Идентифицирует окно, которое будет включено или заблокировано.
bEnable
Определяет, включить или отключить окно. Если этот параметр - ИСТИНА (TRUE), окно включено. Если параметр - ЛОЖЬ(FALSE), окно заблокировано.

Возвращаемые значения
Если окно было предварительно заблокировано, величина возвращаемого значения отличная от нуля.
Если окно предварительно не было заблокировано, величина возвращаемого значения нулевая. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Если включенное состояние окна изменяется, отправляется сообщение WM_ENABLE перед возвратом значения функцией EnableWindow. Если окно уже заблокировано, все его дочерние окна неявно заблокированы, хотя они не отправляют сообщение WM_ENABLE.
Окно должно быть включено прежде, чем оно может быть активизировано. Например, если прикладная программа показывает немодальное диалоговое окно, и отключила свое главное окно, перед разрушением диалогового окна программа должна включить главное окно. Иначе, другое окно примет фокус клавиатуры и будет активизировано. Если дочернее окно заблокировано, оно игнорируется, когда Windows пробует установить, какое окно должно принять сообщения мыши.
По умолчанию окно включается тогда, когда создается. Чтобы создать окно, которое первоначально заблокировано, прикладная программа, может определить в функции CreateWindow или CreateWindowEx стиль WS_DISABLED. После того, как окно будет создано, прикладная программа может использовать EnableWindow, чтобы включать или отключать окно.
Прикладная программа может использовать эту функцию, чтобы включить или отключить орган управления в диалоговом окне. Заблокированный элемент управления не может принимать фокус клавиатуры, и при этом пользователь не может получить доступ к нему.

Смотри также
CreateWindow, CreateWindowEx, IsWindowEnabled, WM_ENABLE

Размещение и совместимость EnableWindow

Windows NT					Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция GetActiveWindow

(ПолучитьАктивноеОкно)

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

Синтаксис

HWND GetActiveWindow(VOID)

Параметры
У этой функции нет параметров.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - дескриптор активного окна, связанного с потоком, который вызывает функцию. Если вызывающий поток не имеет активного окна, величина возвращаемого значения - ПУСТО (NULL).

Смотри также
SetActiveWindow

Размещение и совместимость GetActiveWindow

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция GetAsyncKeyState

(ПолучитьАсинхронноСостояниеКлавиши)

Функция GetAsyncKeyState устанавливает, в нажатом или отпущенном состоянии находится клавиша во время, когда вызывается функция и была ли клавиша нажата после предыдущего вызова GetAsyncKeyState().

Синтаксис

SHORT GetAsyncKeyState
(
int vKey // код виртуальной клавиши
);

Параметры
vKey
Определяет один из 256 возможных кодов виртуальной клавиши.

Windows NT: Вы можете использовать лево - и правосторонние константы, чтобы определять некоторые клавиши. Для дополнительной информации см. раздел Замечания.
Windows 95: Windows 95 не поддерживает лево - и правосторонние константы, доступные в Windows NT.

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

Замечания
Вы можете использовать константы кода виртуальной клавиши VK_SHIFT, VK_CONTROL и VK_MENU как значения для параметра vKey. Это дает состояние клавиш SHIFT, CTRL или ALT без различия между левой и правой сторонами.
Windows NT: Вы можете использовать следующие константы кода виртуальной клавиши как значения для vKey, чтобы делать различие между левыми и правыми экземплярами этих клавиш:

VK_LSHIFT	VK_RSHIFT
VK_LCONTROL VK_RCONTROL
VK_LMENU VK_RMENU

Эти лево- и правосторонние константы доступны только тогда, когда Вы вызываете функции GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState и MapVirtualKey
Windows 95: Windows 95 не поддерживает лево - и правосторонние константы и возвращается 0, когда Вы используете эти константы.
Функция GetAsyncKeyState работает с кнопками мыши. Однако она контролирует состояние физических, а не логических кнопок мыши, которыми физические кнопки отображаются. Например, вызов GetAsyncKeyState (VK_LBUTTON) всегда возвращает состояние левой физической кнопки мыши, которая может отображать левую или правую логическую кнопку мыши. Вы можете установить текущее отображение физических кнопок мыши в логических кнопках мыши системой путем вызова функции

GetSystemMetrics(SM_SWAPBUTTON)

которая возвращает значение ИСТИНА (TRUE), если кнопки мыши менялись.

Смотри также
GetKeyboardState, GetKeyState, GetSystemMetrics, MapVirtualKey, SetKeyboardState

Размещение и совместимость GetAsyncKeyState

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция GetFocus

(ПолучитьФокус)

Функция GetFocus извлекает дескриптор окна, которое имеет фокус клавиатуры, если окно связано с очередью сообщений вызывающего потока.

Синтаксис

HWND GetFocus(VOID)

Параметры
У этой функции нет параметров.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - дескриптор окна с фокусом клавиатуры. Если очередь сообщений вызывающего потока не имеет связанного окна с фокусом клавиатуры, величина возвращаемого значения - ПУСТО (NULL).

Замечания
Даже если GetFocus возвращает значение ПУСТО (NULL), очередь другого потока может быть связана с окном, которое имеет фокус клавиатуры.
Используйте функцию GetForegroundWindow, чтобы извлечь дескриптор окна, с которым пользователь в настоящее время работает. Вы можете сопоставить очередь сообщений вашего потока с окнами, принадлежащими другому потоку, используя функцию AttachThreadInput.

Смотри также
AttachThreadInput, GetForegroundWindow, SetFocus, WM_KILLFOCUS, WM_SETFOCUS

Размещение и совместимость GetFocus

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция GetKeyboardLayout

(ПолучитьРаскладкуКлавиатуры)

[Теперь поддерживается Windows NT]

Функция GetKeyboardLayout извлекает данные об активной раскладке символов на клавиатуре для заданного потока. Если параметр dwLayout нулевой, возвращается значение раскладки для активного потока.

Синтаксис

HKL GetKeyboardLayout
(
DWORD dwLayout // идентификатор потока
);

Параметры
dwLayout
Идентифицирует поток, который делает запрос или является нулем для текущего потока.

Возвращаемые значения
Величина возвращаемого значения - дескриптор раскладки символов на клавиатуре для потока. Младшее слово содержит идентификатор региона, идентифицирующий язык ввода, а старшее слово содержит дескриптор устройства, идентифицирующий физическую раскладку клавиатуры.

Смотри также
ActivateKeyboardLayout, CreateThread, LoadKeyboardLayout

Размещение и совместимость GetKeyboardLayout

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция GetKeyboardLayoutList

(ПолучитьСписокРаскладокКлавиатуры)

[Теперь поддерживается Windows NT]

Функция GetKeyboardLayoutList() извлекает дескрипторы раскладки символов на клавиатуре, соответствующие текущему набору входящих регионов в системе. Функция копирует дескрипторы в данный буфер.

Синтаксис

UINT GetKeyboardLayoutList
(
int nBuff, // размер буфера в элементе массива
HKL FAR *lpList // буфер для дескрипторов раскладки символов на клавиатуре
);

Параметры
nBuff
Определяет максимальное число дескрипторов, которые буфер может содержать.
lpList
Указывает на буфер, массив которого принимает дескрипторы раскладки символов на клавиатуре.

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

Смотри также
GetKeyboardLayout

Размещение и совместимость GetKeyboardLayoutList

Windows NT			Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция GetKeyboardLayoutName

(ПолучитьИмяРаскладкиКлавиатуры)

Функция GetKeyboardLayoutName извлекает данные о названии активной раскладки символов на клавиатуре.

Синтаксис

BOOL GetKeyboardLayoutName
(
LPTSTR pwszKLID //адрес буфера для названия раскладки клавиатуры
);

Параметры
pwszKLID
Указывает на буфер, по крайней мере, символов KL_NAMELENGTH, который должен принять название раскладки символов на клавиатуре, включая признак конца (нуль-терминатор). Это должна быть копия строки, предоставленная функции LoadKeyboardLayout, если замена раскладки не происходила.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения отличная от нуля.
Если функция не выполняет задачу, величина возвращаемого значения нулевая. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Windows NT:
GetKeyboardLayoutName получает название активной раскладки символов на клавиатуре для системы.
Windows 95:
GetKeyboardLayoutName получает название активной раскладки символов на клавиатуре для вызывающего потока.

Смотри также
ActivateKeyboardLayout, LoadKeyboardLayout, UnloadKeyboardLayout

Размещение и совместимость GetKeyboardLayoutName

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode WinNT
Замечания по платформе Не имеется

 

Функция GetKeyboardState

(ПолучитьСостояниеКлавиатуры)

Функция GetKeyboardState копирует состояние 256 виртуальных клавиш в заданный буфер.

Синтаксис

BOOL GetKeyboardState
(
PBYTE lpKeyState // адрес массива, который принимает данные состояния
);

Параметры
lpKeyState
Указывает на 256-байтовый массив, который принимает данные состояния для каждой виртуальной клавиши.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения отличная от нуля.
Если функция не выполняет задачу, величина возвращаемого значения нулевая. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Прикладная программа может вызвать эту функцию, чтобы извлечь данные о текущем состоянии всех виртуальных клавиш. Состояние изменяется тогда, когда поток удаляет сообщения клавиатуры из ее очереди сообщений. Состояние не изменяется тогда, когда сообщения клавиатуры посланы в очередь сообщений.
Когда функция возвращает значение, каждый элемент массива, указанного параметром lpKeyState содержит данные о состоянии виртуальной клавиши. Если старший бит равен 1, клавиша нажата; иначе она не отпущена. Если младший бит равен 1, клавиша переключилась. Клавиша, такая как CAPS LOCK, переключается, если она является включенной. Клавиша выключена и не переключает, если младший бит равен 0. Когда клавиша переключается, индикатор переключения клавиши на клавиатуре (если он есть) должен быть включен, и отключен, когда клавиша не переключается.
Чтобы извлекать информацию состояния для отдельной клавиши, используйте функцию GetKeyState.
Прикладная программа может использовать константы кодов виртуальных клавиш VK_SHIFT, VK_CONTROL и VK_MENU как индексы в массиве, указанном lpKeyState. Это дает состояние клавиш SHIFT, CTRL или ALT без различия между левой и правой сторонами. Прикладная программа может также использовать следующие константы кода виртуальной клавиши как индексы, чтобы различить между левыми и правыми экземплярами этих клавиш:

VK_LSHIFT	VK_RSHIFT
VK_LCONTROL VK_RCONTROL
VK_LMENU VK_RMENU

Эти лево- и правосторонние константы доступны прикладной программе только через функции GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState и MapVirtualKey.

Смотри также
GetKeyState, GetAsyncKeyState, MapVirtualKey, SetKeyboardState

Размещение и совместимость GetKeyboardState

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция GetKeyNameText

(ПолучитьТекстИмениКлавиши)

Функция GetKeyNameText извлекает строку, которая представляет название клавиши.

Синтаксис

int GetKeyNameText(
LONG lParam, // второй параметр сообщения клавиатуры
LPTSTR lpString, // адрес буфера с именем клавиши
int nSize // максимальная длина строки с именем клавиши
);

Параметры
lParam
Определяет второй параметр сообщения клавиатуры (типа WM_KEYDOWN) для обработки. Функция интерпретирует следующие части lParam (Бит-Предназначение):

  • 16-23 - Скэн-код.
  • 24 - Флажок дополнительной клавиши. Дает отличительный признак для некоторых клавиш расширенной клавиатуры.
  • 25 - Бит " Безразличное состояние ". Прикладная программа, вызывающая эту функцию устанавливает этот бит, чтобы указать, что функция не должна различать, например, между левыми и правыми клавишами CTRL и SHIFT.

lpString
Указывает на буфер, который примет название клавиши.
nSize
Определяет максимальную длину, в символах, названия клавиши, включая символ завершения строки (нуль-терминатор). (Этот параметр должен быть равен размеру буфера, указанного параметром lpString.)

Возвращаемые значения
Если функция завершается успешно, строка с символом нуля в конце копируется в заданный буфер, а величина возвращаемого значения - длина строки, в символах, не считая символа завершения строки (нуль-терминатора).

Замечания
Формат строки с названием клавиши зависит от текущей раскладки символов на клавиатуре. Драйвер клавиатуры поддерживает список названий в форме символьных строк для клавиш с названиями длиннее, чем один символ. Название клавиши транслируется в соответствии с текущей раскладкой установленной клавиатуры. Названием символьных клавиш является сам символ, обозначающий её. Названия мертвых клавиш вполне обстоятельно разъяснены.

Размещение и совместимость GetKeyNameText

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode WinNT
Замечания по платформе Не имеется


Функция GetKeyState

(ПолучитьСостояниеКлавиши)

Функция GetKeyState извлекает данные о состоянии заданной виртуальной клавиши. Состояние определяет, является ли клавиша нажатой, не нажатой или переключенной (вкл., выкл. - чередуется, каждый раз, когда нажимается клавиша).

Синтаксис

SHORT GetKeyState
(
int nVirtKey // код виртуальной клавиши
);

Параметры
nVirtKey
Определяет виртуальную клавишу. Если нужная виртуальная клавиша - буква или цифра (от А до Z, от а до z или от 0 до 9), nVirtKey должен быть установлен в значение ASCII этого символа. Для других клавиш, он должен быть кодом виртуальной клавиши.
Если на клавиатуре используется неанглийская раскладка символов, используются виртуальные клавиши со значениями в диапазоне ASCII от А до Z и от 0 до 9, чтобы определить большинство знаковых клавиш. Например, для немецкой раскладки символов на клавиатуре, виртуальная клавиша «O» со значение ASCII (0x4F) представляет клавишу "o", принимая во внимание, что VK_OEM_1 представляет клавишу "o с умлаутом".

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения определяет состояние данной виртуальной клавиши. Если старший бит равен 1, клавиша нажата; иначе она отпущена. Если младший бит равен 1, клавиша переключилась. Клавиша, такая как CAPS LOCK, переключается, если она является включенной. Клавиша выключена и не переключает, если младший бит равен 0. Когда клавиша переключается, индикатор переключения клавиши на клавиатуре (если он есть) должен быть включен, и отключен, когда клавиша не переключается.

Замечания
Состояние клавиши, возвращенное этой функцией, изменяется, так как данный поток читает клавишные сообщения из ее очереди сообщений. Состояние клавиши не отражает состояния уровня прерывания, связанное с аппаратными средствами. Используйте функцию GetAsyncKeyState, чтобы получить эту информацию.
Прикладная программа, в ответ на сообщение ввода информации с клавиатуры, вызывает GetKeyState. Эта функция извлекает данные о состоянии клавиши, когда было сгенерировано сообщение о вводе данных.
Чтобы получить информацию о состоянии для всех виртуальных клавиш, используйте функцию GetKeyboardState.
Прикладная программа может использовать константы кодов виртуальных клавиш VK_SHIFT, VK_CONTROL и VK_MENU как значения для параметра nVirtKey. Это дает состояние клавиш SHIFT, CTRL или ALT без различия между ними левого и правого расположения. Прикладная программа может также использовать следующие константы кода виртуальной клавиши как значения для nVirtKey, чтобы различить между левыми и правыми экземплярами этих клавиш:

VK_LSHIFT	VK_RSHIFT
VK_LCONTROL VK_RCONTROL
VK_LMENU VK_RMENU

Эти лево- и правосторонние константы доступны прикладной программе только через функции GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState и MapVirtualKeyM.

Смотри также
GetAsyncKeyState, GetKeyboardState, MapVirtualKey, SetKeyboardState

Размещение и совместимость GetKeyState

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция IsWindowEnabled

(ОкноВключено)

Функция IsWindowEnabled устанавливает, включено ли заданное окно для ввода информации от мыши и клавиатуры.

Синтаксис

BOOL IsWindowEnabled
(
HWND hWnd // дескриптор окна, которое тестируется
);

Параметры
hWnd
Идентифицирует окно, которое тестируется

Возвращаемые значения
Если окно включено, величина возвращаемого значения отличная от нуля.
Если окно не включено, величина возвращаемого значения нуль.

Замечания
Дочернее окно принимает ввод информации, только тогда, если оно не только включено, но и видимое.

Смотри также
EnableWindow, IsWindowVisible

Размещение и совместимость IsWindowEnabled

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция keybd_event

(событие_клавиатуры)

Функция keybd_event синтезирует нажатие клавиши. Система может использовать такое синтезируемое нажатие клавиши, чтобы создать сообщение WM_KEYUP или WM_KEYDOWN. Вызывает функцию keybd_event программа обработки прерываний драйвера клавиатуры.

Синтаксис

VOID keybd_event
(
BYTE bVk, // код виртуальной клавиши
BYTE bScan, // аппаратный скэн-код
DWORD dwFlags, // флажки, определяющие различные параметры функции
DWORD dwExtraInfo // дополнительные данные, связанные с нажатием клавиши
);

Параметры
bVk
Определяет код виртуальной клавиши. Код должен быть значением в диапазоне от 1 до 254.
bScan
Определяет для клавиши аппаратный скэн-код.
dwFlags
Набор флаговых битов, которые определяют различные виды операций функции. Прикладная программа может использовать любую комбинацию следующих предопределенных постоянных значений, чтобы установить флажки:

  • KEYEVENTF_EXTENDEDKEY - Если она установлена, скэн-коду предшествует префиксный байт, имеющий значение 0xE0 (224).
  • KEYEVENTF_KEYUP - Если установлена, клавиша была отпущена. Если не установлена, клавиша была нажата.

dwExtraInfo
Определяет дополнительное 32-разрядное значение, связанное с нажатием клавиши.

Возвращаемые значения
У этой функции нет возвращаемых значений.

Замечания
Несмотря на то, что keybd_event посылает в Windows OEM-зависимый аппаратный скэн-код, прикладные программы не должны использовать скэн-код. Windows внутри себя преобразует его в коды виртуальной клавиши и сбрасывает/устанавливает биты в скэн-коде перед передачей его в прикладную программу.
Прикладная программа может смоделировать нажатие клавиши PrintScreen, чтобы получить снимок экрана и сохранить его в буфере обмена Windows. Чтобы делать это, вызовите keybd_event с установленным параметром bVk в VK_SNAPSHOT, а параметром bScan установите в 0 для снимка полного экрана, или установите bScan в 1 для снимка активного окна.

Смотри также
GetAsyncKeyState, GetKeyState, MapVirtualKey, SetKeyboardState

Размещение и совместимость keybd_event

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция LoadKeyboardLayout

Реализация LoadKeyboardLayout в Windows 95 и Windows NT существенно различаются. Чтобы выявить эти различия, эта страница справочника первые представляет ее реализацию в среде Windows 95 во всей полноте, в соответствии с версией Windows NT.

Windows 95:

Функция LoadKeyboardLayout загружает новую раскладку символов на клавиатуре в систему. Одновременно могут быть загруженными несколько раскладок символов на клавиатуре, но в одно и тоже время активизируется только одна на процесс. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключаться между ними.

Синтаксис

HKL LoadKeyboardLayout(
LPCTSTR pwszKLID, // название раскладки, которая загружена
UINT Flags // флажки раскладки клавиатуры
);

Параметры
pwszKLID
Указывает на буфер, который определяет название раскладки символов на клавиатуре. Это название является строкой, составленной из шестнадцатеричного значения первичного идентификатора языка (младшее слово) и идентификатора устройства (старшее слово). Например, Американский Английский язык имеет идентификатор языка 0x0409, так что первичная Американская Английская раскладка имеет название "00000409". Варианты раскладки Американского Английского языка, такие как раскладки Дворака, названы "00010409", "00020409" и так далее. За списком первичных и вторичных идентификаторов языка, которые составляют общий идентификатор языка, следит макрокоманда MAKELANGID.
Flags
Определяет, как раскладка символов на клавиатуре должна быть загружена. Этот параметр может быть одним из следующих значений:

  • KLF_ACTIVATE - Если данная раскладка ещё не загружена, функция загружает и активизирует раскладку для текущего потока, вставляя раскладку в голову списка раскладок символов на клавиатуре, впереди активной предыдущей раскладки. Если раскладка уже загружена, а значение KLF_REORDER не дается, функция просто вращает список раскладок символов на клавиатуре, делая следующую раскладку активной.
  • KLF_NOTELLSHELL - Препятствует подключаемой процедуре ShellProc принимать код hook-точки HSHELL_LANGUAGE, когда загружается новая раскладка. Это значение обычно используется тогда, когда прикладная программа загружает многочисленные раскладки, одну за другой. Применение этого значения, ко всем кроме последней раскладки, задерживает обработку оболочки, пока не будут добавлены все раскладки.
  • KLF_REORDER - Перемещает данную раскладку в голову списка раскладок символов на клавиатуре, делая её активной для текущего потока. Это значение переупорядочивает список раскладок символов на клавиатуре, даже если не дается KLF_ACTIVATE
  • KLF_REPLACELANG - Если новая раскладка имеет тот же самый идентификатор языка, как и текущая раскладка, новая раскладка заменяет текущую как раскладку для этого языка. Если это значение не дается, а раскладки имеют те же самые идентификаторы языка, текущая раскладка не заменяется, а функция возвращает значение ПУСТО (NULL).
  • KLF_SUBSTITUTE_OK - Меняет заданную раскладку символов на клавиатуре другой раскладкой, предпочитаемой пользователем. Замена происходит, только тогда, если ключ регистрации HKEY_CURRENT_USER\Keyboard Layout\Substitutes явно определяет замену раскладки. Например, если ключ включает в себя значение названия "00000409" со значением "00010409", загрузка Американской Английского языка раскладки ("00000409") вынуждает быть загруженной вместо её раскладку США Английского языка Дворака ("00010409"). Система использует KLF_SUBSTITUTE_OK при загрузке, и рекомендуется, чтобы все прикладные программы использовали также это значение.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - дескриптор раскладки символов на клавиатуре, согласованного с требуемым названием или ПУСТО (NULL), если никакая согласующаяся клавиатура не доступна.

Замечания
Если раскладка загружается с тем же самым языком, какой был до этого загружен, а флажок KLF_REPLACELANG не устанавливается, вызов функции терпит неудачу. Только одна загруженная раскладка может быть связана с данным языком. (Это приемлемо для многих IMEs, которые загружаются связанные с тем же самым языком.)
Прикладная программа может и должна, обычно желательно, загрузить заданную по умолчанию раскладку или IME для языка, а может сделать так при помощи определения только строковой версии идентификатора языка. Если прикладная программа хочет загрузить заданную раскладку или IME, она должна прочитать системный реестр, чтобы установить заданный идентификатор раскладки, чтобы передать его в LoadKeyboardLayout. В этом случае, запрос активизирует заданный по умолчанию дескриптор раскладки символов на клавиатуре для региона, который приведет в действие одно из первых соответствий. Заданный IME должен быть активизирован, используя явный дескриптор раскладки символов на клавиатуре, возвращенный от одной из функций GetKeyboardLayout, GetKeyboardLayoutList или LoadKeyboardLayout.

Смотри также
ActivateKeyboardLayout, GetKeyboardLayout, GetKeyboardLayoutName, MAKELANGID, UnloadKeyboardLayout

Windows NT:

Функция LoadKeyboardLayout загружает раскладку символов на клавиатуре.

Синтаксис

HKL LoadKeyboardLayout(
LPCTSTR pwszKLID, // адрес буфера с названием раскладки
UINT Flags // флажки раскладки клавиатуры
);

Параметры
pwszKLID
Указывает на буфер, который определяет название раскладки символов на клавиатуре. Название должно быть получено из шестнадцатеричного значения идентификатора языка, соответствующего раскладке. Например, Американский Английский язык имеет идентификатор языка 0x0409, так что первичная Американская Английского языка раскладка называется "00000409". Варианты Американской Английского языка раскладки, типа раскладки Дворака, названы "00010409", "00020409", и так далее. За списком первичных идентификаторов языка и идентификаторов подмножества языка, которые составляют идентификатор языка, следит макрокоманда MAKELANGID.
Flags
Устанавливает, как раскладка символов на клавиатуре должна быть загружена. Этот параметр может быть одним из следующих значений:

  • KLF_ACTIVATE - Функция загружает раскладку, если она ещё не загружена, и активизирует её. Это значение активизирует раскладку для системы, взятой в целом, а не только для вызывающего потока.
  • KLF_REORDER - Этот флажок значим, только тогда, если установлен флажок KLF_ACTIVATE, а раскладка уже загружена. Если эти условия выполнены и бит KLF_REORDER установлен, функция удаляет заданную раскладку из её позиции в круговом списке системы загруженных раскладок и перемещает её в голову списка как активную раскладку.Если бит KLF_ACTIVATE установлен и раскладка загружена, но бит KLF_REORDER не установлен, функция просто вращает круговой список загруженных раскладок в системе.Если флажок KLF_ACTIVATE установлен, а раскладка ещё не загружена, она загружается как активная раскладка и вставляется в системный круговой список раскладок клавиатуры впереди активной предыдущей раскладки.
  • KLF_SUBSTITUTE_OK - Заданная раскладка ищет в конфигурации пользователя (в системном реестре под ключом HKEY_CURRENT_USER\Keyboard Layout\Substitutes) раскладку замены, предпочитаемую пользователем. Например, если в этом разделе имелось значение названия "00000409" равное "00010409", загружается Американская Английского языка раскладка ("00000409") с установкой флажка KLF_SUBSTITUTE_OK, который заставит быть загруженной раскладку США Английского языка Дворака ("00010409")
  • KLF_UNLOADPREVIOUS - Если флажок KLF_ACTIVATE установлен, а раскладка успешно загружена и активизирована, функция выгружает активную предыдущую раскладку. Иначе, функция игнорирует этот флажок.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - дескриптор раскладки символов на клавиатуре.
Если функция не выполняет задачу, величина возвращаемого значения - ПУСТО (NULL). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Одновременно могут быть загруженными несколько раскладок символов на клавиатуре, но активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключаться между ними.

Смотри также
ActivateKeyboardLayout, GetKeyboardLayoutName, UnloadKeyboardLayout

Размещение и совместимость LoadKeyboardLayout

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode WinNT
Замечания по платформе Windows 95: В одно и то же время загружается только 1 клавиатура


Функция MapVirtualKey

(ПреобразоватьВиртуальнуюКлавишу)

Функция MapVirtualKey транслирует код виртуальной клавиши в скэн-код или символьное значение, или переводит скэн-код в код виртуальной клавиши.

Синтаксис

UINT MapVirtualKey(
UINT uCode, // код виртуальной клавиши или скэн-код
UINT uMapType // трансляция для исполнения
);

Параметры
uCode
Определяет код виртуальной клавиши или скэн-код для клавиши. Как это значение интерпретируется, зависит от значения параметра uMapType.
uMapType
Определяет трансляцию для исполнения. Значение этого параметра зависит от значения параметра uCode:

Значение 		Предназначение
0 uCode - код виртуальной клавиши и транслируется в скэн-код. Если это код виртуальной клавиши,
который не делает различия между лево - и правосторонними клавишами, возвращается скэн-код левой клавиши.
Если не происходит никакой трансляции, функция возвращает значение 0.

1 uCode - скэн-код и транслируется в код виртуальной клавиши, который не делает различия между лево -
и правосторонними клавишами. Если не происходит никакой трансляции, функция возвращает значение 0.

2 uCode - код виртуальной клавиши и транслируется в значение символов нижнего регистра, в младшем
слове величина возвращаемого значения. Мертвые клавиши (диакритические знаки) обозначаются при
помощи установки старшего бита величины возвращаемого значения. Если не происходит никакой
трансляции, функция возвращает значение 0.

3 uCode - скэн-код и транслируется в код виртуальной клавиши, который делает различие между
лево - и правосторонними клавишами. Если не производится никакой трансляции, функция
возвращает значение 0.

Возвращаемые значения
Величина возвращаемого значения является или скэн-кодом, кодом виртуальной клавиши, или символьным значением, которое зависит от значения uCode и uMapType. Если не производится никакой трансляции, величина возвращаемого значения нулевая.

Замечания
Прикладная программа может использовать MapVirtualKey, чтобы перевести скэн-коды в константы кода виртуальной клавиши VK_SHIFT, VK_CONTROL и VK_MENU и наоборот. Эти трансляции не делают различия между левыми и правыми экземплярами клавиш SHIFT, CTRL или ALT. Прикладная программа может получить скэн-код, соответствующий для левого или правого экземпляра одной из этих клавиш путем вызова MapVirtualKey с установкой uCode в одну из следующих констант кода виртуальной клавиши:

VK_LSHIFT	VK_RSHIFT
VK_LCONTROL VK_RCONTROL
VK_LMENU VK_RMENU

Эти лево - и правосторонние константы доступны прикладной программе только через функции GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState и MapVirtualKey.

Смотри также
GetAsyncKeyState, GetKeyboardState, GetKeyState, SetKeyboardState

Размещение и совместимость MapVirtualKey

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode WinNT
Замечания по платформе Не имеется

 

Функция MapVirtualKeyEx

(ПреобразоватьВиртуальнуюКлавишуРасширенная)

[Теперь поддерживается в Windows NT]

Функция MapVirtualKeyEx транслирует (преобразует) код виртуальной клавиши в скэн-код или символьное значение, или переводит скэн-код в код виртуальной клавиши. Функция транслирует коды, используя язык ввода и физическую раскладку символов на клавиатуре, идентифицированную данным дескриптором раскладки.

Синтаксис

UINT MapVirtualKeyEx(
UINT uCode, // код виртуальной клавиши или скэн-код
UINT uMapType, // трансляция для выполнения
HKL dwhkl // дескриптор раскладки символов для клавиатуры
);

Параметры
uCode
Определяет код виртуальной клавиши или скэн-код для клавиши. Как это значение интерпретируется, зависит от значения параметра uMapType.
uMapType
Определяет трансляцию для исполнения. Значение этого параметра зависит от значения параметра uCode:

Значение 		Предназначение
0 uCode - код виртуальной клавиши и транслируется в скэн-код. Если это код виртуальной клавиши,
который не делает различия между лево - и правосторонними клавишами, возвращается скэн-код левой
клавиши. Если не происходит никакой трансляции, функция возвращает значение 0.

1 uCode - скэн-код и транслируется в код виртуальной клавиши, который не делает различия между
лево - и правосторонними клавишами. Если не происходит никакой трансляции, функция возвращает
значение 0.

2 uCode - код виртуальной клавиши и транслируется в значение символов нижнего регистра, в
младшем слове величина возвращаемого значения. Мертвые клавиши (диакритические знаки) обозначаются
при помощи установки старшего бита величины возвращаемого значения. Если не происходит никакой
трансляции, функция возвращает значение 0.

3 uCode - скэн-код и транслируется в код виртуальной клавиши, который делает различие между лево -
и правосторонними клавишами. Если не производится никакой трансляции, функция возвращает значение 0.

dwhkl
Идентифицирует раскладку символов на клавиатуре, которая используется для трансляции данного кода. Этот параметр может быть любой дескриптор раскладки символов на клавиатуре, предварительно возвращенный функцией LoadKeyboardLayout.

Возвращаемые значения
Величина возвращаемого значения является или скэн-кодом, кодом виртуальной клавиши, или символьным значением, которое зависит от значения uCode и uMapType. Если не производится никакой трансляции, величина возвращаемого значения нулевая.

Замечания
Прикладная программа может использовать MapVirtualKeyEx, чтобы перевести скэн-коды в константы кода виртуальной клавиши VK_SHIFT, VK_CONTROL и VK_MENU и наоборот. Эти трансляции не делают различия между левыми и правыми экземплярами клавиш SHIFT, CTRL или ALT. Прикладная программа может получить скэн-код, соответствующий для левого или правого экземпляра одной из этих клавиш путем вызова MapVirtualKeyEx с установкой uCode в одну из следующих констант кода виртуальной клавиши:

VK_LSHIFT	VK_RSHIFT
VK_LCONTROL VK_RCONTROL
VK_LMENU VK_RMENU

Эти лево - и правосторонние константы доступны прикладной программе только через функции GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, MapVirtualKey и MapVirtualKeyEx.

Смотри также
GetAsyncKeyState, GetKeyboardState, GetKeyState, LoadKeyboardLayout, MapVirtualKey, SetKeyboardState

Размещение и совместимость MapVirtualKeyEx

Windows NT			Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode WinNT
Замечания по платформе Не имеется


Функция OemKeyScan

(ОпределитьКлавишуОЕМ)

Функция OemKeyScan преобразует OEM ASCII коды от 0 до 0x0FF в OEM скэн-коды и состояние переключения. Функция предоставляет информацию, которая позволяет программе посылать текст OEM другой программе, моделируя ввод информации с клавиатуры.

Синтаксис

DWORD OemKeyScan
(
WORD wOemChar // значение ASCII символа OEM
);

Параметры
wOemChar
Определяет значение ASCII символа OEM.

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

Бит 	Значение
1 Любая клавиша SHIFT нажата.
2 Любая клавиша CTRL нажата.
4 Любая клавиша ALT нажата.

Если символ не может быть произведен единственным нажатием клавиши, при использовании текущей раскладки символов на клавиатуре, величина возвращаемого значения - 0xFFFFFFFF.

Замечания
Эта функция не предусматривает трансляции для символов, которые требуют CTRL+ALT или мертвых клавиш. Символы, не оттранслированные этой функцией должны быть скопированы, при помощи моделирования ввода, используя ALT + механизм вспомогательной клавиатуры. Клавиша NUMLOCK должна быть отключена.
Эта функция не предусматривает трансляции для символов, которые не могут быть введены с клавиатуры одним нажатием клавиши, используя текущую раскладку символов на клавиатуре, типа символов с диакритическими знаками, требующими мертвых клавиш. Символы, не оттранслированные этой функцией могут моделироваться, используя ALT + механизм вспомогательной клавиатуры. Клавиша NUMLOCK должна быть включена.
Эта функция является инструментом, использующим функцию VkKeyScan.

Смотри также
VkKeyScan

Размещение и совместимость OemKeyScan

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция RegisterHotKey

(РегистрацияГрячейКлавиши)

Функция RegisterHotKey определяет комбинацию "горячая" клавиша для текущего потока.

Синтаксис

BOOL RegisterHotKey
(
HWND hWnd, // окно, которое принимает уведомление "горячей" клавиши
int id, // идентификатор "горячей" клавиши
UINT fsModifiers, // флажки модификации клавиш
UINT vk // код виртуальной клавиши
);

Параметры
hWnd
Идентифицирует окно, которое примет сообщения WM_HOTKEY, сгенерированные комбинацией "горячая" клавиша. Если этот параметр - ПУСТО (NULL), сообщения WM_HOTKEY посылаются в очередь сообщений вызывающего потока и должны быть обработаны в цикле сообщений.
id
Определяет идентификатор комбинации "горячая" клавиша. Никакая другая "горячая" клавиша в вызывающем потоке не может иметь тот же самый идентификатор. Прикладная программа должна определить значение в диапазоне от 0x0000 до 0xBFFF. Динамически подключаемая библиотека DLL совместного использования должна определить значение в диапазоне от 0xC000 до 0xFFFF (диапазон, возвращаемый функцией GlobalAddAtom). Чтобы избежать конфликтов с идентификаторами "горячей" клавиши, определенными другими разделяемыми DLL, динамически подключаемая библиотека, чтобы получить идентификатор "горячей" клавиши, должна использовать функцию GlobalAddAtom.
fsModifiers
Определяет клавиши, которые должны быть нажаты в комбинации с клавишей, заданной параметром nVirtKey, чтобы генерировать сообщение WM_HOTKEY. Параметр fsModifiers может быть комбинацией следующих значений:

  • MOD_ALT - Любая клавиша ALT должна удерживаться нажатой.
  • MOD_CONTROL - Любая клавиша CTRL должна удерживаться нажатой.
  • MOD_SHIFT - Любая клавиша SHIFT должна удерживаться нажатой.

vk
Определяет код виртуальной клавиши комбинации "горячая" клавиша.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение - ноль.

Замечания
Когда клавиша нажимается, система ищет соответствие во всех комбинациях "горячая" клавиша потока. После обнаружения соответствия, система посылает сообщение WM_HOTKEY в очередь сообщений потока, который зарегистрировал комбинацию "горячая" клавиша. Это сообщение посылается в начало очереди, так что оно удаляется следующим повтором цикла сообщений.
Эта функция не может связывать комбинацию "горячая" клавиша с окном, созданным другим потоком.
Функция RegisterHotKey терпит неудачу, если нажатия клавиш, определенные для "горячей" клавиши были уже зарегистрированы другой "горячей" клавишей.
Если окно, идентифицированное параметром hWnd, уже зарегистрировало комбинацию "горячая" клавиша с тем же самым идентификатором, как тот, что определен параметром id, новые значения для параметров fsModifiers и vk заменяют предварительно заданные величины для этих параметров.

Смотри также
GlobalAddAtom, UnregisterHotKey, WM_HOTKEY

Размещение и совместимость RegisterHotKey

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция SetActiveWindow

(УстановитьАктивноеОкно)

Функция SetActiveWindow активизирует окно.

Синтаксис

HWND SetActiveWindow
(
HWND hWnd // дескриптор окна, которое активизируется
);

Параметры
hWnd
Идентифицирует окно верхнего уровня, которое будет активизировано.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - дескриптор окна, которое было до этого активно.

Замечания
Функция SetActiveWindow активизирует окно, но только не в том случае, когда прикладная программа в фоновом режиме. Окно будет приведено в активный режим (на вершину Z-последовательности), если прикладная программа являлась высокоприоритетной, когда ему устанавливали активность.
Если окно, идентифицированное параметром hWnd, было создано вызывающим потоком, состояние активного окна вызывающего потока устанавливается в hWnd. Иначе, состояние активного окна вызывающего потока устанавливается в значение ПУСТО (NULL).
С другой стороны, функция окна SetForegroundWindow, активизирует окно и переводит его в разряд приоритетных. Прикладная программа должна вызвать SetForegroundWindow только тогда, если требуется отобразить критические ошибки или информацию, которая нуждается в немедленном внимании пользователя.

Смотри также
GetActiveWindow, SetForegroundWindow, WM_ACTIVATE

Размещение и совместимость SetActiveWindow

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция SetFocus

(УстановитьФокус)

Функция SetFocus устанавливает фокус клавиатуры в заданном окне. Окно должно быть связано с очередью сообщений вызывающего потока.

Синтаксис

HWND SetFocus
(
HWND hWnd // дескриптор окна, которому передается фокус
);

Параметры
hWnd
Идентифицирует окно, которое примет ввод информации с клавиатуры. Если этот параметр - ПУСТО (NULL), нажатия клавиши игнорируются.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - дескриптор окна, которое до этого имело фокус клавиатуры. Если параметр hWnd недопустимый или окно не связано с очередью сообщений вызывающего потока, величина возвращаемого значения - ПУСТО (NULL).

Замечания
Функция SetFocus отправляет сообщение WM_KILLFOCUS окну, которое теряет фокус клавиатуры, а сообщение WM_SETFOCUS окну, которое принимает фокус клавиатуры. Она также активизирует или окно, которое принимает фокус или родителя этого окна.
Если окно активное, но не имеет фокуса, любая нажатая клавиша произведет сообщение WM_SYSCHAR, WM_SYSKEYDOWN или WM_SYSKEYUP. Если клавиша VK_MENU также нажата, параметр lParam сообщения будет иметь установленным 30-й бит. Иначе, созданные сообщения не получат установки этого бита.
При использовании функции AttachThreadInput, поток может подключить обработку своего ввода информации к другому потоку. Это дает возможность потоку вызывать SetFocus, чтобы установить фокус клавиатуры в окно, связанное с очередью сообщений другого потока.

Смотри также
AttachThreadInput, GetFocus, WM_KILLFOCUS, WM_SETFOCUS, WM_SYSCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP

Размещение и совместимость SetFocus

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция SetKeyboardState

(УстановитьСостояниеКлавиатуры)

Функция SetKeyboardState копирует 256-байтовый массив состояний клавиш клавиатуры в таблицу состояния ввода информации с клавиатуры вызывающего потока. Это - та же самая таблица, к которой обращаются функции GetKeyboardState и GetKeyState. Изменения, сделанные в этой таблице, не воздействуют на ввод информации с клавиатуры любого другого потока.

Синтаксис

BOOL SetKeyboardState
(
LPBYTE lpKeyState // адрес массива с кодами виртуальных клавиш
);

Параметры
lpKeyState
Указывает на 256-байтовый массив, который содержит состояния клавиш клавиатуры.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение - ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Замечания
Поскольку функция SetKeyboardState изменяет состояние ввода данных вызывающего потока, а не глобальное состояние ввода данных системы, прикладная программа не может использовать SetKeyboardState, чтобы установить свечение индикаторов NUM LOCK, CAPS LOCK или SCROLL LOCK на клавиатуре.

Смотри также
GetAsyncKeyState, GetKeyboardState, GetKeyState, MapVirtualKey

Размещение и совместимость SetKeyboardState

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция ToAscii

(в ASCII)

Функция ToAscii переводит заданный код виртуальной клавиши и состояние клавиатуры в соответствующий символ или символы Windows. Функция переводит код, используя язык ввода данных и физическую раскладку символов на клавиатуре, идентифицированную данным дескриптором раскладки символов.

Синтаксис

int ToAscii
(
UINT uVirtKey, // код виртуальной клавиши
UINT uScanCode, // скэн-код
PBYTE lpKeyState, // адрес массива состояния клавиши
LPWORD lpChar, // буфер для трансляции клавиши
UINT uFlags // флажок активного меню
);

Параметры
uVirtKey
Определяет код виртуальной клавиши, который будет оттранслирован.
uScanCode
Определяет аппаратный скэн-код клавиши, которая будет оттранслирована. Старший бит этого значения установлен, если клавиша вверху (не нажата).
lpKeyState
Указывает на 256-байтовый массив, который содержит текущее состояние клавиатуры. Каждый элемент (байт) в массиве содержит состояние в одной из клавиш. Если старший бит байта установлен, клавиша - внизу (нажата).
Если установлен младший бит, он указывает на то, что клавиша подключена. В этой функции важен только бит подключения клавиши CAPS LOCK. Состояние переключения клавиш NUM LOCK и SCROLL LOCK игнорируется.
lpChar
Указывает на буфер, который примет оттранслированный символ или символы Windows.
uFlags
Определяет, является ли меню активным. Этот параметр должен быть 1, если меню активно, или иначе 0.

Возвращаемые значения
Если заданная клавиша - мертвая клавиша, величина возвращаемого значения отрицательная. Иначе, она равна одному из следующих значений:

  • 0 - Заданная виртуальная клавиша не транслируется для текущего состояния клавиатуры.
  • 1 - Один символ Windows был скопирован в буфер.
  • 2 - Два символа были скопированы в буфер. Это обычно случается тогда, когда символ мертвой клавиши (знак ударения или диакритический знак), сохраненный в раскладке символов на клавиатуре, не может быть скомбинирован с заданной виртуальной клавишей, чтобы сформировать единый символ.

Замечания
Параметров, данных в функции ToAscii, может быть не достаточно, чтобы транслировать код виртуальной клавиши, потому что предыдущая мертвая клавиша сохраняется в раскладке символов на клавиатуре.
Как правило, ToAscii исполняет трансляцию, опираясь на код виртуальной клавиши. Однако в некоторых случаях, бит 15 параметра uScanCode может быть использован, чтобы различить между нажатием клавиши и её отпуском. Скэн-код используется для трансляции комбинации клавиш ALT + числовая клавиша.
Хотя NUM LOCK - клавиша - переключатель, которая воздействует на поведение клавиатуры, ToAscii игнорирует установку переключателя (младший бит) lpKeyState (VK_NUMLOCK), потому что одного параметра uVirtKey достаточно, чтобы отличить клавиши управления курсором (VK_HOME, VK_INSERT и так далее) от числовых клавиш (VK_DECIMAL, VK_NUMPAD0 - VK_NUMPAD9).

Смотри также
OemKeyScan, ToUnicode, VkKeyScan

Размещение и совместимость ToAscii

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция ToAsciiEx

(вASCIIРасширенная)

[Теперь поддерживается в Windows NT]

Функция ToAscii транслирует заданный код виртуальной клавиши и состояние клавиатуры в соответствующий символ или символы Windows. Функция переводит код, используя язык ввода данных и физическую раскладку символов на клавиатуре, идентифицированную данным дескриптором раскладки символов.

Синтаксис

int ToAsciiEx
(
UINT uVirtKey, // код виртуальной клавиши
UINT uScanCode, // скэн-код
PBYTE lpKeyState, // адрес массива состояния клавиши
LPWORD lpChar, // буфер для трансляции клавиши
UINT uFlags, // флажок активного меню
HKL dwhkl // дескриптор раскладки символов на клавиатуре
);

Параметры
uVirtKey
Определяет код виртуальной клавиши, который будет оттранслирован.
uScanCode
Определяет аппаратный скэн-код клавиши, которая будет оттранслирована. Старший бит этого значения установлен, если клавиша вверху (не нажата).
< b>
Указывает на 256-байтовый массив, который содержит текущее состояние клавиатуры. Каждый элемент (байт) в массиве содержит состояние в одной из клавиш. Если старший бит байта установлен, клавиша - внизу (нажата).
Если установлен младший бит, он указывает на то, что клавиша подключена. В этой функции важен только бит подключения клавиши CAPS LOCK. Состояние переключения клавиш NUM LOCK и SCROLL LOCK игнорируется.
lpChar
Указывает на буфер, который примет оттранслированный символ или символы Windows.
uFlags
Определяет, является ли меню активным. Этот параметр должен быть 1, если меню активно, или иначе 0.
dwhkl
Идентифицирует раскладку символов на клавиатуре, чтобы использовать для перевода данного кода. Этот параметр может быть любой дескриптор раскладки символов на клавиатуре, предварительно возвращенный функцией LoadKeyboardLayout.

Возвращаемые значения
Если заданная клавиша - мертвая клавиша, величина возвращаемого значения отрицательная. Иначе, она - одно из следующих значений:

  • 0 - Заданная виртуальная клавиша не транслируется для текущего состояния клавиатуры.
  • 1 - Один символ Windows был скопирован на буфер.
  • 2 - Два символа были скопированы в буфер. Это обычно случается, когда символ мертвой клавиши (знак ударения или диакритический знак), сохраненный в раскладке символов на клавиатуре, не может быть скомбинирован с заданной виртуальной клавишей, чтобы сформировать единый символ.

Замечания
Параметров, данных в функции ToAscii, может быть не достаточно, чтобы перевести код виртуальной клавиши, потому что предыдущая мертвая клавиша сохраняется в раскладке символов на клавиатуре.

Как правило, ToAscii исполняет трансляцию, опираясь на код виртуальной клавиши. Однако в некоторых случаях, бит 15 параметра uScanCode может быть использован, чтобы различить между нажатием клавиши и её отпуском. Скэн-код используется для трансляции комбинации клавиш ALT + числовая клавиша.

Хотя NUM LOCK - клавиша - переключатель, которая воздействует на поведение клавиатуры, ToAscii игнорирует установку переключателя (младший бит) lpKeyState (VK_NUMLOCK), потому что одного параметра uVirtKey достаточно, чтобы отличить клавиши управления курсором (VK_HOME, VK_INSERT и так далее) от числовых клавиш (VK_DECIMAL, VK_NUMPAD0 - VK_NUMPAD9).

Смотри также
LoadKeyboardLayout, MapVirtualKeyEx, OemKeyScan, ToAscii, VkKeyScan

Размещение и совместимость ToAsciiEx

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция ToUnicode

(вУникод)

Функция ToUnicode переводит заданный код виртуальной клавиши и состояние клавиатуры в соответствующий символ или символы Unicode.

Синтаксис

int ToUnicode(
UINT wVirtKey, // код виртуальной клавиши
UINT wScanCode, // скэн-код
PBYTE lpKeyState, // адрес массива состояния клавиши
LPWSTR pwszBuff, // буфер для трансляции клавиши
int cchBuff, // размер буфера для трансляции клавиши
UINT wFlags // установка флажков, согласования функций
);

Параметры
wVirtKey
Определяет код виртуальной клавиши, который будет оттранслирован.
wScanCode
Определяет аппаратный скэн-код клавиши, которая будет оттранслирована. Старший бит этого значения установлен, если клавиша вверху (не нажата).
lpKeyState
Указывает на 256-байтовый массив, который содержит текущее состояние клавиатуры. Каждый элемент (байт) в массиве содержит состояние одной из клавиш. Если старший бит байта установлен, клавиша - внизу (нажата).
pwszBuff
Указывает на буфер, который примет оттранслированный символ или символы Unicode.
cchBuff
Определяет размер буфера, указанного параметром pwszBuff, в символах.
wFlags
Набор битовых флажков, которые определяют поведение функции. Бит 0 установлен, если меню активно. Биты от 1 до 31 зарезервированы.

Возвращаемые значения
Функция возвращает одно из следующих значений:

  • - 1 - Заданная виртуальная клавиша - символ мертвой клавиши (знак ударения или диакритический знак). Это значение возвращается независимо от раскладки символов на клавиатуре, даже если несколько символов были введены с клавиатуры и сохранены в состоянии клавиатуры. Если возможно, наравне с раскладками символов Уникода на клавиатуре, функция запишет разделенную пробелами версию символа мертвой клавиши в буфер, заданный pwszBuffer. Например, функция запишет символ SPACING ACUTE (0x00B4), а не символ NON_SPACING ACUTE (0x0301).
  • 0 - Заданная виртуальная клавиша не транслируется для текущего состояния клавиатуры. Ничего не пишется в буфер, определенный при помощи pwszBuffer
  • 1 - Один символ был записан в буфер, заданный pwszBuffer.
  • 2 или больше - Два или больше символа были записаны в буфер, заданный pwszBuff. Наиболее общая причина для этого является то, что символ мертвой клавиши (знак ударения или диакритический знак) сохраненный в раскладке символов на клавиатуре не может быть объединен с заданной виртуальной клавишей, чтобы сформировать единый символ.

Замечания
Параметров, данных в функции ToUnicode, может быть не достаточно, чтобы перевести код виртуальной клавиши, потому что предыдущая мертвая клавиша сохраняется в раскладке символов на клавиатуре.
Как правило, ToUnicode исполняет трансляцию, опираясь на код виртуальной клавиши. Однако в некоторых случаях, бит 15 параметра wScanCode может быть использован, чтобы различить между нажатием клавиши и её отпуском.

Смотри также
ToAscii, VkKeyScan

Размещение и совместимость ToUnicode

Windows NT			Да 
Win95 Нет
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция UnloadKeyboardLayout

(ВыгрузитьРаскладкуКлавиатуры)

Функция UnloadKeyboardLayout удаляет раскладку символов на клавиатуре.

Синтаксис

BOOL UnloadKeyboardLayout
(
HKL hkl // дескриптор раскладки символов на клавиатуре
);

Параметры
hkl
Идентифицирует раскладку символов на клавиатуре, которую надо выгрузить.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения отличная от нуля.
Если функция не выполняет задачу, величина возвращаемого значения нулевая. Функция может потерпеть неудачу по следующим причинам:

  1. Был послан недопустимый дескриптор раскладки символов на клавиатуре.
  2. Раскладка была предварительно загружена.
  3. Раскладка находится в использовании.

Замечания
Windows 95: UnloadKeyboardLayout не может выгрузить системную, по умолчанию раскладку символов на клавиатуре. Это гарантирует то, что соответствующий набор символов всегда доступен для пользователя, чтобы ввести с клавиатуры команды для оболочки или названий для файловой системы.
Windows NT: UnloadKeyboardLayout может выгрузить системную, по умолчанию раскладку символов на клавиатуре.

Смотри также
ActivateKeyboardLayout, GetKeyboardLayoutName, LoadKeyboardLayout

Размещение и совместимость UnloadKeyboardLayout

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция UnregisterHotKey

(РегистрацияГорячейКлавиши)

Функция UnregisterHotKey освобождает комбинацию "горячая" клавиша, предварительно зарегистрированную вызывающим потоком.

Синтаксис

BOOL UnregisterHotKey
(
HWND hWnd, // окно, связанное с "горячей" клавишей
int id // идентификатор "горячей" клавиши
);

Параметры
hWnd
Идентифицирует окно, связанное с комбинацией "горячая" клавиша, которая будет освобождена. Этот параметр должен иметь значение ПУСТО (NULL), если комбинация "горячая" клавиша не связана с окном.
id
Определяет идентификатор комбинации "горячая" клавиша, которая будет освобождена.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение - ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Смотри также
RegisterHotKey, WM_HOTKEY

Размещение и совместимость UnregisterHotKey

Windows NT			Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция VkKeyScan

(СканироватьВиртуальнуюКлавишу)

Функция VkKeyScan переводит символ в соответствующий код виртуальной клавиши и состояние переключения для текущей клавиатуры.

Синтаксис

SHORT VkKeyScan
(
TCHAR ch // символ, который транслируется
);

Параметры
ch
Определяет символ, который будет оттранслирован в код виртуальной клавиши.

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

  • 1 бит - Нажата любая клавиша SHIFT.
  • 2 бит - Нажата любая клавиша CTRL.
  • 4 бит - Нажата любая клавиша ALT.

Если функция не находит клавишу, которая транслируется, чтобы послать код буквы, то младшие и старшие байты содержат – (минус)1.

Замечания
Для раскладок символов на клавиатуре, которые используют правостороннюю клавишу ALT как клавишу SHIFT (например, Французская раскладка символов на клавиатуре), состояние переключения представлено значением 6, потому что правосторонняя клавиша ALT внутренне преобразуется в CTRL+ALT.
Трансляция для цифрового клавишного поля (от VK_NUMPAD0 до VK_DIVIDE) игнорируется. Эта функция предназначена для того, чтобы переводить символы в нажатия клавиш только из главного раздела клавиатуры. Например, символ "7" транслируется в VK_7, не VK_NUMPAD7.
VkKeyScan используется прикладными программами, которые посылают символы, используя сообщения WM_KEYDOWN и WM_KEYUP.

Смотри также
GetAsyncKeyState, GetKeyboardState, GetKeyNameText, GetKeyState, SetKeyboardState, WM_KEYDOWN, WM_KEYUP

Размещение и совместимость VkKeyScan

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode WinNT
Замечания по платформе Не имеется


Функция VkKeyScanEx

(СканироватьВиртуальнуюКлавишуРасширенная)

[Теперь поддерживается в Windows NT]

Функция VkKeyScanEx переводит символ в соответствующий код виртуальной клавиши и состояние переключения. Функция переводит символ, используя входящий язык и физическую раскладку символов на клавиатуре, идентифицированную данным дескриптором раскладки символов на клавиатуре.

Синтаксис

SHORT VkKeyScanEx
(
CHAR ch, // символ, который транслируется
HKL dwhkl // дескриптор раскладки символов на клавиатуре
);

Параметры
ch
Определяет символ, который будет оттранслирован в код виртуальной клавиши.
dwhkl
Идентифицирует раскладку символов на клавиатуре, которая используется, чтобы оттранслировать символ. Этот параметр может быть дескриптор любой раскладки символов на клавиатуре, предварительно возвращенный функцией LoadKeyboardLayout.

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

  • 1 бит - Нажата любая клавиша SHIFT.
  • 2 бит - Нажата любая клавиша CTRL.
  • 4 бит - Нажата любая клавиша ALT.

Если функция не находит клавишу, которая транслируется, чтобы послать код буквы, то младшие и старшие байты содержат – (минус)1.

Замечания
Для раскладок символов на клавиатуре, которые используют правостороннюю клавишу ALT как клавишу SHIFT (например, Французская раскладка символов на клавиатуре), переключение состояния представлено значением 6, потому что правосторонняя клавиша ALT внутренне преобразуется в CTRL+ALT.
Трансляции для цифровой клавиатуры (от VK_NUMPAD0 до VK_DIVIDE) игнорируются. Эта функция предназначена для того, чтобы переводить символы в нажатия клавиш только из главного раздела клавиатуры. Например, символ "7" транслируется в VK_7, не VK_NUMPAD7.
VkKeyScanEx используется прикладными программами, которые посылают символы, используя сообщения WM_KEYDOWN и WM_KEYUP.

Смотри также
GetAsyncKeyState, GetKeyboardState, GetKeyNameText, GetKeyState, LoadKeyboardLayout, SetKeyboardState, ToAsciiEx, VkKeyScan

Размещение и совместимость VkKeyScanEx

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode WinNT
Замечания по платформе Не имеется


Функция GetKBCodePage

Устаревшая функция

Функция GetKBCodePage предусмотрена для совместимости с более ранними версиями Windows. В прикладном программном интерфейсе (API)Win32 она только вызывает функцию GetOEMCP. Новые прикладные программы должны использовать функцию GetOEMCP.

Синтаксис

UINT GetKBCodePage(VOID)

Параметры
У этой функции нет параметров.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - идентификатор OEM кодовой страницы, или оно - заданный по умолчанию идентификатор, если значение системного реестра не читаемо. Список OEM идентификаторов кодовой страницы, см. GetOEMCP.

Смотри также: GetACP, GetOEMCP

Размещение и совместимость GetKBCodePage:

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщения при вводе информации с клавиатуры

Следующие сообщения используются, чтобы принимать и обрабатывать ввод информации с клавиатуры.

 

Сообщение WM_ACTIVATE

Сообщение WM_ACTIVATE отправляется, когда активизируется или деактивизируется окно. Это сообщение посылается сначала оконной процедуре деактивизируемого окна верхнего уровня; затем оно посылается оконной процедуре активизируемого окна верхнего уровня.

Синтаксис

WM_ACTIVATE
fActive = LOWORD(wParam); // флажок активизации
fMinimized = (BOOL) HIWORD(wParam); // флажок минимизации
hwndPrevious = (HWND) lParam; // дескриптор окна

Параметры
fActive
Значение младшего слова wParam. Определяет, активизируется ли окно или деактивизируется. Этот параметр может быть одним из следующих значений:

  • WA_ACTIVE - Активизация некоторым другим методом, чем щелчок клавишей мыши (например, вызовом к функции SetActiveWindow или при помощи использования интерфейса клавиатуры, чтобы выбрать окно).
  • WA_CLICKACTIVE - Активизация при помощи щелчка мыши.
  • WA_INACTIVE - Деактивизация.

fMinimized
Значение старшего слова wParam. Определяет свернутое состояние окна, активизируемого или деактивизируемого. Значение отличное от нуля указывает, что окно свернуто (минимизировано).

hwndPrevious
Значение lParam. Идентифицирует окно, которое активизированное или деактивизированное, что зависит от значения параметра fActive. Если значение fActive - WA_INACTIVE, hwndPrevious - дескриптор активизированного окна. Если значение fActive - WA_ACTIVE или WA_CLICKACTIVE, hwndPrevious - дескриптор дезактивируемого окна. Этот дескриптор может быть ПУСТО (NULL).

Возвращаемые значения
Если приложение обрабатывает это сообщение, оно должно возвратить нуль.
Действие по умолчанию
Если окно активизируется и не свернуто, функция DefWindowProc устанавливает фокус клавиатуры в окне.

Замечания
Если окно активизировано щелчком клавиши мыши, оно принимает также сообщение WM_MOUSEACTIVATE.

Смотри также: DefWindowProc, SetActiveWindow, WM_MOUSEACTIVATE, WM_NCACTIVATE

Размещение и совместимость WM_ACTIVATE

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Сообщение WM_CHAR

Сообщение WM_CHAR посылается окну с фокусом клавиатуры тогда, когда функцией TranslateMessage транслируется сообщение WM_KEYDOWN. WM_CHAR содержит код буквы клавиши, которая была нажата.

Синтаксис

WM_CHAR
chCharCode = (TCHAR) wParam; // код буквы
lKeyData = lParam; // данные на клавишу

Параметры
chCharCode
Значение wParam. Определяет код буквы клавиши.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша дополнительной клавишей, типа правосторонних клавиш ALT и CTRL, которые появляются на усовершенствованной 101- или 102-клавишной клавиатуре. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Значение рано 1, если клавиша ALT удерживается, в то время как клавиша нажата; иначе, значение равно 0.
  • 30 - Определяет предыдущее состояние клавиши. Значение равно 1, если клавиша была нажата перед посылкой сообщения или оно равно 0, если клавиша была не нажата.
  • 31 - Определяет переходное состояние. Значение равно 1, если клавиша отпускается или оно равно 0, если клавиша нажимается.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Замечания
Поскольку не имеется обязательного соответствия один к одному между нажатыми клавишами и сгенерированными символьными сообщениями, информация в старшем слове параметра lKeyData вообще-то бесполезна для прикладных программ. Информация в старшем слове применяется только к самому последнему сообщению WM_KEYDOWN, которое предшествует регистрации сообщения WM_CHAR.
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются правая ALT и правая CTRLINS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; делитель (/) и клавиши ENTER в цифровой клавиатуре. Некоторые другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.

Смотри также
TranslateMessage, WM_KEYDOWN

Размещение и совместимость WM_CHAR

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_DEADCHAR

Синтаксис

WM_DEADCHAR
chCharCode = (TCHAR) wParam; // код буквы
lKeyData = lParam; // данные для клавиши

Сообщение WM_DEADCHAR посылается окну с фокусом клавиатуры тогда, когда функцией TranslateMessage транслируется сообщение WM_KEYUP. WM_DEADCHAR определяет код буквы, сгенерированный мертвой клавишей. Мертвая клавиша - клавиша, которая генерирует символ, типа умлаута (две точки над буквой), который объединяется с другим символом, чтобы формировать составной символ. Например, символ O - умлаут (O) сгенерирован при помощи ввода с клавиатуры мертвой клавиши для символа умлаута, а затем ввода клавиши O.

Параметры
chCharCode
Значение wParam>. Определяет код символа, сгенерированный мертвой клавишей.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша дополнительной клавишей, типа правосторонних клавиш ALT и CTRL, которые появляются на усовершенствованной 101- или 102-клавишной клавиатуре. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Значение равно 1, если клавиша ALT удерживается, в то время как клавиша нажата; иначе, значение равно 0.
  • 30 - Определяет предыдущее состояние клавиши. Значение равно 1, если клавиша была нажата перед посылкой сообщения или оно равно 0, если клавиша была не нажата.
  • 31 - Определяет переходное состояние. Значение равно 1, если клавиша отпускается или оно равно 0, если клавиша нажимается.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Замечания
Сообщение WM_DEADCHAR обычно используется прикладными программами, чтобы дать пользователю обратную связь о каждой нажатой клавише. Например, прикладная программа может отображать знак ударения в текущей позиции символа без перемещения каретки.
Поскольку не имеется обязательного соответствия один к одному между нажатыми клавишами и сгенерированными символьными сообщениями, информация в старшем слове параметра lKeyData вообще-то бесполезна для прикладных программ. Информация в старшем слове применяется только к самому последнему сообщению WM_KEYDOWN, которое предшествует посылке сообщения WM_DEADCHAR.
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются - правая ALT и правая CTRL в основной части клавиатуры; INS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; делитель (/) и клавиши ENTER в цифровой клавиатуре. Некоторые другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.

Смотри также
TranslateMessage, WM_KEYDOWN, WM_KEYUP, WM_SYSDEADCHAR

Размещение и совместимость WM_DEADCHAR

Windows NT				Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Сообщение WM_GETHOTKEY

Прикладная программа отправляет сообщение WM_GETHOTKEY, чтобы установить комбинацию "горячая" клавиша, связанную с окном.

Синтаксис

WM_GETHOTKEY
wParam = 0; // не используется; должно быть нуль
lParam = 0; // не используется; должно быть нуль

Параметры
У этого сообщения нет параметров.

Возвращаемые значения
Величина возвращаемого значения - код виртуальной клавиши и модификаторы для комбинации "горячая" клавиша, или ПУСТО (NULL), если никакая комбинация "горячая" клавиша не связана с окном. Код виртуальной клавиши находится в младшем байте величины возвращаемого значения, а модификаторы находятся в старшем байте. Модификаторы могут быть комбинацией следующих флажков:

  • HOTKEYF_ALT - Клавиша ALT
  • HOTKEYF_CONTROL - Клавиша CTRL
  • HOTKEYF_EXT - Расширенная клавиша
  • HOTKEYF_SHIFT - Клавиша SHIFT

Замечания
Эти комбинации "горячая" клавиша не связаны с комбинациями "горячая" клавиша, которые устанавливаются при помощи функции RegisterHotKey.

Смотри также: RegisterHotKey, WM_SETHOTKEY

Размещение и совместимость WM_GETHOTKEY

Windows NT				Да 
Win95 Да
Win32s Нет
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_HOTKEY

Сообщение WM_HOTKEY посылается тогда, когда пользователь нажимает комбинацию "горячая" клавиша, зарегистрированную функцией RegisterHotKey(). Сообщение помещается наверху очереди сообщений, связанной с потоком, который зарегистрировал комбинацию "горячая" клавиша.

Синтаксис

WM_HOTKEY
idHotKey = (int) wParam; // идентификатор комбинации "горячая" клавиша
fuModifiers = (UINT) LOWORD(lParam); // флажки модификаторы клавиш
uVirtKey = (UINT) HIWORD(lParam); // код виртуальной клавиши

Параметры
idHotKey
Значение wParam. Определяет идентификатор комбинации "горячая" клавиша, которая генерировала сообщение. Если сообщение было создано комбинацией "горячая" клавиша, которая определена системой, параметр idHotKey будет одним из следующих значений:

  • IDHOT_SNAPDESKTOP - Была нажата комбинация "горячая клавиша" делающая "моментальный снимок рабочего стола".
  • IDHOT_SNAPWINDOW - Была нажата комбинация "горячая клавиша" делающая "моментальный снимок окна".

fuModifiers
Определяет клавиши, которые должны были быть нажаты в комбинации с клавишей, заданной параметром nVirtKey, чтобы генерировать сообщение WM_HOTKEY. Параметр fuModifiers может быть комбинацией следующих значений:

  • MOD_ALT - Любая клавиша ALT удерживалась нажатой.
  • MOD_CONTROL - Любая клавиша CTRL удерживалась нажатой.
  • MOD_SHIFT - Любая клавиша SHIFT удерживалась нажатой.
  • MOD_WIN - Любая клавиша WINDOWS удерживалась нажатой. Эти клавиши появляются только на клавиатуре Microsoft Ergonomic и помечены эмблемой Microsoft Windows.

uVirtKey
Определяет код виртуальной клавиши комбинации "горячая" клавиша.

Замечания
Сообщение WM_HOTKEY не связано с сообщениями WM_GETHOTKEY и WM_SETHOTKEY комбинаций "горячая" клавиша. Сообщение WM_HOTKEY отправляется для общих комбинаций "горячая" клавиша, в то время как сообщения WM_SET\GETHOTKEY касаются комбинаций "горячая" клавиша активизации окна.

Смотри также: RegisterHotKey, WM_GETHOTKEY, WM_SETHOTKEY

Размещение и совместимость WM_HOTKEY:

Windows NT			Да 
Win95 Да
Win32s Нет
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Сообщение WM_KEYDOWN

Сообщение WM_KEYDOWN посылается окну с фокусом клавиатуры тогда, когда нажата несистемная клавиша. Несистемная клавиша является клавишей, которая нажимается, когда клавиша ALT не нажата.

Синтаксис

WM_KEYDOWN
nVirtKey = (int) wParam; // код виртуальной клавиши
lKeyData = lParam; // данные на клавишу

Параметры
nVirtKey
Значение wParam. Определяет код виртуальной клавиши для несистемной клавиши.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша дополнительной клавишей, типа правосторонних клавиш ALT и CTRL, которые появляются на усовершенствованной 101- или 102-клавишной клавиатуре. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Для сообщения WM_KEYDOWN это значение всегда 0.
  • 30 - Определяет предыдущее состояние клавиши. Значение равно 1, если клавиша была нажата перед посылкой сообщения или оно равно 0, если клавиша была не нажата.
  • 31 - Определяет переходное состояние. Для сообщения WM_KEYDOWN это значение всегда 0.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Действие по умолчанию
Если нажата клавиша F10, функция DefWindowProc устанавливает внутренний флажок. Когда DefWindowProc принимает сообщение WM_KEYUP, функция проверяет, установлен ли внутренний флажок и, если это так, посылает сообщение WM_SYSCOMMAND окну верхнего уровня. Параметр wParam сообщения устанавливается в SC_KEYMENU.

Замечания
Благодаря функции автоповтора, до посылки сообщения WM_KEYUP может быть послано больше чем одно сообщение WM_KEYDOWN. Предыдущее состояние клавиши (бит 30) может быть использовано, чтобы установить, указывает ли сообщение WM_KEYDOWN первое нажатие или повторное нажатие.
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются правая ALT и правая CTRL в основной части клавиатуры; INS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; и делитель (/) и клавиши ENTER в цифровой клавиатуре. Некоторые другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.

Смотри также
DefWindowProc, WM_CHAR, WM_KEYUP, WM_SYSCOMMAND

Размещение и совместимость WM_KEYDOWN

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_KEYUP

Сообщение WM_KEYUP посылается окну с фокусом клавиатуры тогда, когда отпущена несистемная клавиша. Несистемная клавиша - это клавиша, которая нажата, когда клавиша ALT не нажата или клавиша клавиатуры, которая нажимается тогда, когда окно имеет фокус клавиатуры.

Синтаксис

WM_KEYUP
nVirtKey = (int) wParam; // код виртуальной клавиши
lKeyData = lParam; // данные на клавишу

Параметры
nVirtKey
Значение wParam. Определяет код виртуальной клавиши для несистемной клавиши.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой. Для сообщения WM_KEYUP счет повторений равен всегда одному.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша расширенной клавишей, типа правосторонних клавиш ALT и CTRL, которые появляются на усовершенствованной 101- или 102-клавишной клавиатуре. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Для сообщения WM_KEYUP это значение всегда 0.
  • 30 - Определяет предыдущее состояние клавиши. Для сообщения WM_KEYUP это значение всегда 1.
  • 31 - Определяет переходное состояние. Для сообщения WM_KEYUP это значение всегда 1.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Действие по умолчанию
Если клавиша F10 или ALT была отпущена, функция DefWindowProc посылает сообщение WM_SYSCOMMAND окну верхнего уровня. Параметр wParam сообщения устанавливается в SC_KEYMENU.

Замечания
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются - правая ALT и правая CTRL в основной части клавиатуры; INS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; делитель (/) и клавиши ENTER в цифровой клавиатуре. Другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.

Смотри также: DefWindowProc, WM_KEYDOWN, WM_SYSCOMMAND

Размещение и совместимость WM_KEYUP

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Сообщение WM_KILLFOCUS

Сообщение WM_KILLFOCUS отправляется окну немедленно перед тем, как оно теряет фокус клавиатуры.

Синтаксис

WM_KILLFOCUS
hwndGetFocus = (HWND) wParam; // дескриптор окна, принимающего фокус

Параметры
hwndGetFocus
Значение wParam. Идентифицирует окно, которое принимает фокус клавиатуры (может быть значением ПУСТО (NULL)).

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Замечания
Если прикладная программа отображает каретку, в этот момент каретка должна быть разрушена.

Смотри также: SetFocus, WM_SETFOCUS

Размещение и совместимость WM_KILLFOCUS

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_SETFOCUS

Сообщение WM_SETFOCUS посылается окну после того, как оно получило фокус клавиатуры.

Синтаксис

WM_SETFOCUS
hwndLoseFocus = (HWND) wParam; // дескриптор окна, теряющего фокус

Параметры
hwndLoseFocus
Значение wParam. Идентифицирует окно, которое потеряло фокус клавиатуры (может быть значением ПУСТО (NULL)).

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Замечания
Чтобы отобразить на экране каретку, прикладная программа, когда она принимает сообщение WM_SETFOCUS, должна вызвать соответствующие функции каретки.

Смотри также: SetFocus, WM_KILLFOCUS

Размещение и совместимость WM_SETFOCUS

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_SETHOTKEY

Прикладная программа посылает сообщение WM_SETHOTKEY окну, чтобы связать комбинацию "горячая" клавиша с окном. Когда пользователь нажимает комбинацию "горячая" клавиша, система активизирует окно.

Синтаксис

WM_SETHOTKEY
wParam = (WPARAM) MAKEWORD (vkey, modifiers)
// код виртуальной клавиши и
// модификаторы горячих клавиш
lParam = 0; // не используется, должно быть нуль

Параметры
vkey
Значение wParam. Определяет код виртуальной клавиши и модификаторы комбинаций "горячая" клавиша, которые связаны с окном. Код виртуальной клавиши находится в младшем байте параметра, а флажки модификатора находятся в старшем байте. Установка этого параметра в значение ПУСТО (NULL) удаляет комбинацию "горячая" клавиша, связанную с окном. Байт модификатора может быть комбинацией следующих флажков:

  • HOTKEYF_ALT - Клавиша ALT
  • HOTKEYF_CONTROL - Клавиша CTRL
  • HOTKEYF_EXT - Расширенная клавиша
  • HOTKEYF_SHIFT - Клавиша SHIFT

Возвращаемые значения
Величина возвращаемого значения является одной из ниже перечисленных:

  • -1 - Функция потерпела неудачу - комбинация "горячая" клавиша является недопустимой.
  • 0 - Функция потерпела неудачу - окно является недопустимым.
  • 1 - Функция завершила свою работу успешно, и ни у какого другого окна нет той же самой комбинации "горячая" клавиша.
  • 2 - Функция завершила свою работу успешно, но другое окно уже имеет ту же самую комбинацию "горячая" клавиша.

Замечания
Комбинация "горячая" клавиша не может быть связана с дочерним окном.
VK_ESCAPE, VK_SPACE и VK_TAB - недопустимые комбинации "горячая" клавиша.
Когда пользователь нажимает комбинацию "горячая" клавиша, система генерирует сообщение WM_SYSCOMMAND с wParam равным SC_HOTKEY.
Окно может иметь только одну комбинацию "горячая" клавиша. Если окно уже связано с комбинацией "горячая" клавиша, новая "горячая" клавиша заменяет старую. Если больше чем одно окно связаны с той же самой комбинацией "горячая" клавиша, окно, которое активизировано этой комбинацией, является выбранным наудачу.
Эти комбинации "горячая" клавиша несвязанны с "горячими" клавишами установленными при помощи RegisterHotKey.

Смотри также
RegisterHotKey, WM_GETHOTKEY, WM_SYSCOMMAND

Размещение и совместимость WM_SETHOTKEY

Windows NT			Да 
Win95 Да
Win32s Нет
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_SYSCHAR

Сообщение WM_SYSCHAR посылается окну с фокусом клавиатуры тогда, когда сообщение WM_SYSKEYDOWN оттранслировано функцией TranslateMessage. Оно определяет код буквы системной клавиши - то есть клавиши знака, которая была нажата одновременно с клавишей ALT.

Синтаксис

WM_SYSCHAR
chCharCode = (TCHAR) wParam; // код буквы
lKeyData = lParam; // данные на клавишу

Параметры
chCharCode
Значение wParam. Определяет код буквы клавиши меню окна.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша дополнительной клавишей, типа правосторонних клавиш ALT и CTRL, которые появляются на усовершенствованной 101- или 102-клавишной клавиатуре. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Значение равно 1, если клавиша ALT удерживается, в то время как клавиша нажата; иначе, значение равно 0.
  • 30 - Определяет предыдущее состояние клавиши. Значение равно 1, если клавиша была нажата перед посылкой сообщения или оно равно 0, если клавиша была не нажата.
  • 31 - Определяет переходное состояние. Значение равно 1, если клавиша отпускается или оно равно 0, если клавиша нажимается.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Замечания
Когда контекстный код нулевой, сообщение может быть послано в функцию TranslateAccelerator, которая обработает его, как если бы это было стандартное клавишное сообщение вместо системного сообщения символьной клавиши. Это позволяет клавишам - ускорителям быть использованным с активным окном, даже если активное окно не имеет фокуса клавиатуры.
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются - правая ALT и правая CTRL в основной части клавиатуры; INS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; клавиша PRINT SCRN; клавиша BREAK; клавиша NUMLOCK; и делитель (/), и клавиши ENTER в цифровой клавиатуре. Некоторые другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.

Смотри также
TranslateAccelerator, TranslateMessage, WM_SYSKEYDOWN

Размещение и совместимость WM_SYSCHAR

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_SYSDEADCHAR

Сообщение WM_SYSDEADCHAR отправляется окну с фокусом клавиатуры, когда сообщение WM_SYSKEYDOWN оттранслировано функцией TranslateMessage. WM_SYSDEADCHAR определяет код буквы системной мертвой клавиши, то есть мертвая клавиша, которая нажата при удержании нажатой клавиши ALT.

Синтаксис

WM_SYSDEADCHAR
chCharCode = (TCHAR) wParam; // код буквы
lKeyData = lParam; // данные для клавиши

Параметры
chCharCode
Значение wParam. Определяет код буквы, сгенерированный системной мертвой клавишей, то есть мертвой клавишей, которая нажата при удержании нажатой клавиши ALT.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша дополнительной клавишей, типа правосторонних клавиш ALT и CTRL, которые появляются на усовершенствованной 101- или 102-клавишной клавиатуре. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Значение равно 1, если клавиша ALT удерживается, в то время как клавиша нажата; иначе, значение равно 0.
  • 30 - Определяет предыдущее состояние клавиши. Значение равно 1, если клавиша была нажата перед посылкой сообщения или оно равно 0, если клавиша была не нажата.
  • 31 - Определяет переходное состояние. Значение равно 1, если клавиша отпускается или оно равно 0, если клавиша нажимается.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Замечания
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются - правая ALT и правая CTRL в основной части клавиатуры; INS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; и делитель (/) и клавиши ENTER в цифровой клавиатуре. Некоторые другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.

Смотри также: TranslateMessage, WM_DEADCHAR, WM_SYSKEYDOWN

Размещение и совместимость WM_SYSDEADCHAR

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_SYSKEYDOWN

Сообщение WM_SYSKEYDOWN посылается окну с фокусом клавиатуры тогда, когда пользователь удерживает нажатой клавишу ALT, а затем нажимает другую клавишу. Это происходит также тогда, когда никакое окно в настоящее время не имеет фокуса клавиатуры; в этом случае сообщение WM_SYSKEYDOWN посылается активному окну. Окно, которое принимает сообщение, может различать между этими двумя ситуациями, проверяя контекстный код в параметре lKeyData.

Синтаксис

WM_SYSKEYDOWN
nVirtKey = (int) wParam; // код виртуальной клавиши
lKeyData = lParam; // данные на клавишу

Параметры
nVirtKey
Значение wParam. Определяет виртуальной код нажимаемой клавиши.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша дополнительной клавишей, типа правосторонних клавиш ALT и CTRL, которые появляются на усовершенствованной 101- или 102-клавишной клавиатуре. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Значение является 1, если клавиша ALT является нажатой, в то время, когда нажимается символьная клавиша; оно является 0, если сообщение WM_SYSKEYDOWN посылается активному окну, потому что никакое окно не имеет фокуса клавиатуры.
  • 30 - Определяет предыдущее состояние клавиши. Значение является 1, если клавиша нажимается перед оправкой сообщения, или оно равно 0, если клавиша не нажимается.
  • 31 - Определяет переходное состояние. Для сообщения WM_SYSKEYDOWN это значение всегда 0.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Действие по умолчанию
Функция DefWindowProc проверяет данную клавишу и генерирует сообщение WM_SYSCOMMAND, если клавиша является или TAB или ENTER.

Замечания
Когда контекстный код нулевой, сообщение может быть послано в функцию TranslateAccelerator, которая обработает его, как если бы это было нормальное клавишное сообщение вместо системного сообщения символьной клавиши. Это позволяет клавишам - ускорителям быть использованными с активным окном, даже если активное окно не имеет фокуса клавиатуры.
Из-за функции автоповтора, до посылки сообщения WM_SYSKEYUP может быть послано больше чем одно сообщение WM_SYSKEYDOWN. Предыдущее состояние клавиши (бит 30) может быть использован, чтобы установить, указывает ли сообщение WM_SYSKEYDOWN первое нажатие или повторное нажатие.
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются - правая ALT и правая CTRL в основной части клавиатуры; INS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; и делитель (/) и клавиши ENTER в цифровой клавиатуре. Некоторые другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.

Смотри также: DefWindowProc, TranslateAccelerator, WM_SYSCOMMAND, WM_SYSKEYUP

Размещение и совместимость WM_SYSKEYDOWN

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Сообщение WM_SYSKEYUP

Сообщение WM_SYSKEYUP посылается окну с фокусом клавиатуры тогда, когда пользователь отпускает клавишу, которая была нажата, в то время когда удерживалась нажатой клавиша ALT. Это происходит также тогда, когда никакое окно в настоящее время не имеет фокуса клавиатуры; в этом случае, сообщение WM_SYSKEYUP отправляется активному окну. Окно, которое принимает сообщение, может делать различие между этими двумя ситуациями, проверяя контекстный код в параметре lKeyData.

Синтаксис

WM_SYSKEYUP
nVirtKey = (int) wParam; // код виртуальной клавиши
lKeyData = lParam; // данные на клавишу

Параметры
nVirtKey
Значение wParam. Определяет код виртуальной клавиши, которая была отпущена.
lKeyData
Значение lParam. Определяет счет повторений, скэн-код, флажок дополнительной клавиши, контекстный код, флажок предыдущего состояния клавиши и флажок переходного состояния, как показано в следующем списке:

  • 0-15 - Определяет счет повторений. Значение равно числу повторений нажатия клавиши в результате того, что пользователь удерживает клавишу нажатой. Для сообщения WM_SYSKEYUP счет повторений всегда равен единице.
  • 16-23 - Определяет скэн-код. Значение зависит от фирмы - изготовителя комплектного оборудования (OEM).
  • 24 - Определяет, является ли клавиша дополнительной клавишей, типа правосторонних клавиш ALT и CTRL, которые применяются на усовершенствованных 101- или 102-клавишных клавиатурах. Значение равно 1, если это дополнительная клавиша; иначе, оно равно 0.
  • 25-28 - Зарезервировано; не используется.
  • 29 - Определяет контекстный код. Значение равно 1, если клавиша ALT нажимается, в то время как символьная клавиша отпускается; оно равно 0, если сообщение WM_SYSKEYDOWN посылается активному окну, потому что никакое окно не имеет фокуса клавиатуры.
  • 30 - Определяет предыдущее состояние клавиши. Для сообщения WM_SYSKEYUP это значение всегда 1.
  • 31 - Определяет переходное состояние. Для сообщения WM_SYSKEYUP это значение всегда 1.

Возвращаемые значения
Прикладная программа должна возвратить нуль, если она обрабатывает это сообщение.

Действие по умолчанию
Если клавиша F10 или ALT была отпущена, функция DefWindowProc отправляет сообщение WM_SYSCOMMAND окну верхнего уровня. Параметр wParam сообщения устанавливается в SC_KEYMENU.

Замечания
Когда контекстный код нулевой, сообщение может быть послано в функцию TranslateAccelerator, которая обработает его, как если бы оно было нормальное клавишное сообщение вместо системного сообщения символьной клавиши. Это позволяет клавишам - ускорителям быть использованными с активным окном, даже если активное окно не имеет фокуса клавиатуры.
Для усовершенствованных 101- и 102-клавишных клавиатур, дополнительными клавишами являются - правая ALT и правая CTRL в основной части клавиатуры; INS, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши курсора в группах слева от цифровой клавиатуры; делитель (/) и клавиши ENTER в цифровой клавиатуре. Другие клавиатуры могут поддерживать бит дополнительной клавиши в параметре lKeyData.
Для не американских усовершенствованных 102-клавишных клавиатур, правая клавиша ALT обрабатывается как клавиша CTRL + ALT. Следующая таблица показывает последовательность сообщений, которые появляются в результате того, когда пользователь нажимает и отпускает эту клавишу:

Сообщение	Код виртуальной клавиши
WM_KEYDOWN VK_CONTROL
WM_KEYDOWN VK_MENU
WM_KEYUP VK_CONTROL
WM_SYSKEYUP VK_MENU

Смотри также: DefWindowProc, TranslateAccelerator, WM_SYSCOMMAND, WM_SYSKEYDOWN

Размещение и совместимость WM_SYSKEYUP

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека -
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется