--- title: "WM_KEYDOWN" type: guide api: [api7] tags: [guide, api7, wm] sources: - wm_keydown.html --- ## WM_KEYDOWN Событие WM_KEYDOWN посылается в окно с клавиатурным фокусом, если была нажата несистемная клавиша. Синтаксис: ``` WM_KEYDOWN nVirtKey = (int) wParam; KeyData = lParam; ``` Параметры: | wParam | - код виртуальной клавиши, | | --- | --- | | lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, | | LParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата , бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. | Возвращаемое значение: Не используется. Умолчательное действие: Если нажата клавиша , функция DEFWINDOWPROC устанавливает внутренний флаг. Когда DEFWINDOWPROC принимает событие WM_KEYUP, она проверяет, установлен ли внутренний флаг, и если это так, посылает событие WM_SYSCOMMAND в окно верхнего уровня. Значение параметра wParam становится равным SC_KEYMENU. Примечание: 1. Приложение должно вернуть 0, если оно обрабатывает это событие. 2. Для этого события биты 13 и 15 в lParamHi будут нулевыми. 3. Если ни одно из окон не имеет клавиатурного фокуса, то вместо событий WM_KEYDOWN, WM_CHAR и WM_KEYUP посылаются события WM_SYSKEYDOWN, WM_SYSCHAR и WM_SYSKEYUP. 4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой. 5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие: •правый and на основной клавиатуре, •, , , , , и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры, • и на дополнительной цифровой клавиатуре. Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam. См. также: WM_DEADCHAR, WM_SYSCHAR и WM_SYSDEADCHAR. ## WM_KEYUP Событие WM_KEYDOWN посылается в окно с клавиатурным фокусом, если была отпущена несистемная клавиша. Синтаксис: ``` WM_KEYUP nVirtKey = (int) wParam; lKeyData = lParam; ``` Параметры: | wParam | - код виртуальной клавиши, | | --- | --- | | lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, | | LParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата , бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. | Возвращаемое значение: Не используется. Умолчательное действие: Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если или была отпущена. Значение параметра wParam становится равным SC_KEYMENU. Примечание: 1. Приложение должно вернуть 0, если оно обрабатывает это событие. 2. Для этого события биты 13 и 15 в lParamHi будут нулевыми. 3. Если ни одно из окон не имеет клавиатурного фокуса, то вместо события WM_KEYUP посылается событие WM_SYSKEYUP. 4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой. 5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие: •правый and на основной клавиатуре, •, , , , , и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры, • и на дополнительной цифровой клавиатуре. Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam. ## WM_SYSCHAR Это событие посылается в окно с клавиатурным фокусом, когда событие WM_SYSKEYDOWN обрабатывается функцией TRANSLATEMESSAGE. Оно позволяет получить код символа нажатой системной клавиши, то есть клавиши, которая была нажата при нажатой . Синтаксис:: WM_SYSCHAR chCharCode = (TCHAR) wParam;KeyData = lParam; Параметры: | wParam | - код клавиши вызова меню окна, | | --- | --- | | lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, | | IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата , бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. | Возвращаемое значение: Не используется. Умолчательное действие: Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня если или была отпущена. Значение параметра wParam становится равным SC_KEYMENU. Примечание: 1. Приложение должно вернуть 0, если оно обрабатывает это событие. 2. Для этого события бит 15 в lParamHi будет нулевым. 3. Если бит 13 IParamHi (context code) параметра flags =0, это событие может проследовать для обработки функцией TRANSLATEACCELERATOR, которая обработает его как событие нажатия стандартной клавиши, вместо системной. Это позволяет использовать горячие клавиши в активном окне, даже если это окно не имеет клавиатурного фокуса. 4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой. 5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие: •правый и на основной клавиатуре, •, , , , , и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры, • и на дополнительной цифровой клавиатуре. Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam. 6. Это событие также генерируется, если нажимается без нажатой . 7. Событие генерируется вместо WM_KEYUP, если нет окна с клавиатурным фокусом. См. также: WM_DEADCHAR, WM_CHAR и WM_SYSDEADCHAR. ## WM_SYSDEADCHAR Это событие посылается в окно с клавиатурным фокусом, когда событие WM_SYSKEYDOWN обрабатывается функцией TRANSLATEMESSAGE. Оно позволяет получить код символа нажатой пассивной системной клавиши, то есть пассивной клавиши, которая была нажата при нажатой . Синтаксис: ``` WM_SYSDEADCHAR chCharCode = (TCHAR) wParam; lKeyData = lParam; ``` Параметры: | wParam | - код клавиши, | | --- | --- | | lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, | | IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата , бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. | Возвращаемое значение: Не используется. Примечание: 1. К пассивным клавишам относятся, например, умляуты и ударения. 2. Событие может использоваться для получения обратной связи для клавиш, нажатие которых необязательно формирует символ как таковой. См. также: WM_DEADCHAR, WM_CHAR и WM_SYSDEADCHAR. ## WM_SYSKEYDOWN Это событие посылается в окно с клавиатурным фокусом, когда клавиша нажимается при одновременно нажатой . Также оно посылается, когда ни одно из окон не имеет клавиатурного фокуса; в этом случае WM_SYSKEYDOWN посылается в активное окно. Окно, которое принимает событие, может различить эти варианты проверкой разряда 29 (context code) параметра lKeyData. Синтаксис: ``` WM_SYSKEYDOWN nVirtKey = (int) wParam; KeyData = lParam; ``` Параметры: | wParam | - код виртуальной клавиши, | | --- | --- | | lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, | | IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата , бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. | Возвращаемое значение: Не используется. Умолчательное действие: Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если F10 или была отпущена. Значение параметра wParam становится равным SC_KEYMENU. Примечание: 1. Приложение должно вернуть 0, если оно обрабатывает это событие. 2. Для этого события бит 15 в lParamHi будет нулевым. 3. Если бит 13 IParamHi (context code) параметра flags =0, это событие может проследовать для обработки функцией TRANSLATEACCELERATOR, которая обработает его как событие нажатия стандартной клавиши, вместо системной. Это позволяет использовать горячие клавиши в активном окне, даже если это окно не имеет клавиатурного фокуса. 4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой. 5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие: •правый и на основной клавиатуре, •, , , , , и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры, • и на дополнительной цифровой клавиатуре. Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam. 6. Это событие также генерируется, если нажимается без нажатой . ## WM_SYSKEYUP Это событие посылается в окно с клавиатурным фокусом, когда отпускается клавиша, которая была нажата при одновременно нажатой . Также оно посылается, когда ни одно из окон не имеет клавиатурного фокуса; в этом случае WM_SYSKEYDOWN посылается в активное окно. Окно, которое принимает событие, может различить эти варианты проверкой разряда 29 (context code) параметра lKeyData. Синтаксис:: WM_SYSKEYUP nVirtKey = (int) wParam; lKeyData = lParam; Параметры: | wParam | - код виртуальной клавиши, | | --- | --- | | lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, | | IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата , бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. | Возвращаемое значение: Не используется. Умолчательное действие: Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если или была отпущена. Значение параметра wParam становится равным SC_KEYMENU. Примечание: 1. Приложение должно вернуть 0, если оно обрабатывает это событие. 2. Для этого события бит 15 в lParamHi будет нулевым. 3. Если бит 13 IParamHi (context code) параметра flags =0, это событие может проследовать для обработки функцией TranslateAccelerator, которая обработает его как событие нажатия стандартной клавиши, вместо системной. Это позволяет использовать горячие клавиши в активном окне, даже если это окно не имеет клавиатурного фокуса. 4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой. 5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие: •правый и на основной клавиатуре, •, , , , , и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры, • и на дополнительной цифровой клавиатуре. Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam. 6. Это событие также генерируется, если нажимается без нажатой .