---
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, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
Возвращаемое значение:
Не используется.
Умолчательное действие:
Если нажата клавиша <F10>, функция 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 клавишных клавиатур расширенными клавишами являются следующие:
•правый <ALT> and <CTRL> на основной клавиатуре,
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
•</> и <ENTER> на дополнительной цифровой клавиатуре.
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра 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, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
Возвращаемое значение:
Не используется.
Умолчательное действие:
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если <F10> или <ALT> была отпущена. Значение параметра 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 клавишных клавиатур расширенными клавишами являются следующие:
•правый <ALT> and <CTRL> на основной клавиатуре,
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
•</> и <ENTER> на дополнительной цифровой клавиатуре.
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.


## WM_SYSCHAR

Это событие посылается в окно с клавиатурным фокусом, когда событие WM_SYSKEYDOWN обрабатывается функцией TRANSLATEMESSAGE. Оно позволяет получить код символа нажатой системной клавиши, то есть клавиши, которая была нажата при нажатой <ALT>.
Синтаксис::
WM_SYSCHAR chCharCode = (TCHAR) wParam;KeyData = lParam;
Параметры:
| wParam | - код клавиши вызова меню окна, |
| --- | --- |
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
Возвращаемое значение:
Не используется.
Умолчательное действие:
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня если <F10> или <Alt> была отпущена. Значение параметра 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 клавишных клавиатур расширенными клавишами являются следующие:
•правый <ALT> и <CTRL> на основной клавиатуре,
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
•</> и <ENTER> на дополнительной цифровой клавиатуре.
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
6. Это событие также генерируется, если нажимается <F10> без нажатой <Alt>.
7. Событие генерируется вместо WM_KEYUP, если нет окна с клавиатурным фокусом.
См. также:
WM_DEADCHAR, WM_CHAR и WM_SYSDEADCHAR.


## WM_SYSDEADCHAR

Это событие посылается в окно с клавиатурным фокусом, когда событие WM_SYSKEYDOWN обрабатывается функцией TRANSLATEMESSAGE. Оно позволяет получить код символа нажатой пассивной системной клавиши, то есть пассивной клавиши, которая была нажата при нажатой <ALT>.
Синтаксис:
```
WM_SYSDEADCHAR chCharCode = (TCHAR) wParam; lKeyData = lParam;
```
Параметры:
| wParam | - код клавиши, |
| --- | --- |
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
Возвращаемое значение:
Не используется.
Примечание:
1. К пассивным клавишам относятся, например, умляуты и ударения.
2. Событие может использоваться для получения обратной связи для клавиш, нажатие которых необязательно формирует символ как таковой.
См. также:
WM_DEADCHAR, WM_CHAR и WM_SYSDEADCHAR.


## WM_SYSKEYDOWN

Это событие посылается в окно с клавиатурным фокусом, когда клавиша нажимается при одновременно нажатой <Alt>. Также оно посылается, когда ни одно из окон не имеет клавиатурного фокуса; в этом случае WM_SYSKEYDOWN посылается в активное окно. Окно, которое принимает событие, может различить эти варианты проверкой разряда 29 (context code) параметра lKeyData.
Синтаксис:
```
WM_SYSKEYDOWN nVirtKey = (int) wParam; KeyData = lParam;
```
Параметры:
| wParam | - код виртуальной клавиши, |
| --- | --- |
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
Возвращаемое значение:
Не используется.
Умолчательное действие:
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если F10 или <Alt> была отпущена. Значение параметра 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 клавишных клавиатур расширенными клавишами являются следующие:
•правый <ALT> и <CTRL> на основной клавиатуре,
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
•</> и <ENTER> на дополнительной цифровой клавиатуре.
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
6. Это событие также генерируется, если нажимается <F10> без нажатой <Alt>.


## WM_SYSKEYUP

Это событие посылается в окно с клавиатурным фокусом, когда отпускается клавиша, которая была нажата при одновременно нажатой <Alt>. Также оно посылается, когда ни одно из окон не имеет клавиатурного фокуса; в этом случае WM_SYSKEYDOWN посылается в активное окно. Окно, которое принимает событие, может различить эти варианты проверкой разряда 29 (context code) параметра lKeyData.
Синтаксис::
WM_SYSKEYUP nVirtKey = (int) wParam; lKeyData = lParam;
Параметры:
| wParam | - код виртуальной клавиши, |
| --- | --- |
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
Возвращаемое значение:
Не используется.
Умолчательное действие:
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если <F10>или <Alt> была отпущена. Значение параметра 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 клавишных клавиатур расширенными клавишами являются следующие:
•правый <ALT> и <CTRL> на основной клавиатуре,
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
•</> и <ENTER> на дополнительной цифровой клавиатуре.
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
6. Это событие также генерируется, если нажимается <F10> без нажатой <Alt>.
