键盘输入

本部分介绍系统如何生成键盘输入,以及应用程序如何接收和处理该输入。

本节内容

名称 描述
关于键盘输入 讨论键盘输入。
使用键盘输入 涵盖与键盘输入关联的任务。
键盘输入引用 包含 API 引用。

函数

名称 描述
ActivateKeyboardLayout 设置调用线程或当前进程的输入区域设置标识符(以前称为键盘布局句柄)。 输入区域设置标识符指定区域设置以及键盘的物理布局。
BlockInput 阻止键盘和鼠标输入事件到达应用程序。
EnableWindow 启用或禁用指定窗口或控件的鼠标和键盘输入。 禁用输入时,窗口不会接收鼠标单击和按键等输入。 启用输入时,窗口会接收所有输入。
GetActiveWindow 检索附加到调用线程消息队列中的活动窗口的句柄。
GetAsyncKeyState 确定调用函数时键是向上还是向下,以及上次调用 GetAsyncKeyState 后是否按下了该键。
GetFocus 如果窗口附加到调用线程的消息队列,则检索具有键盘焦点的窗口的句柄。
GetKeyboardLayout 检索指定线程的活动输入区域设置标识符(以前称为键盘布局)。 如果 idThread 参数为零,则返回活动线程的输入区域设置标识符。
GetKeyboardLayoutList 检索与系统中的当前输入区域设置集相对应的输入区域设置标识符(以前称为键盘布局句柄)。 该函数将标识符复制到指定的缓冲区。
GetKeyboardLayoutName 检索活动输入区域设置标识符的名称(以前称为键盘布局)。
GetKeyboardState 将 256 个虚拟密钥的状态复制到指定的缓冲区。
GetKeyNameText 检索表示键的名称的字符串。
GetKeyState 检索指定虚拟键的状态。 状态指定键是向上、向下还是切换(每次按键时交替打开、关闭)。
GetLastInputInfo 检索最后一个输入事件的时间。
IsWindowEnabled 确定是否针对鼠标和键盘输入启用指定的窗口。
LoadKeyboardLayout 将新的输入区域设置标识符(以前称为键盘布局)加载到系统中。 一次可以加载多个输入区域设置标识符,但每个进程一次只有一个处于活动状态。 加载多个输入区域设置标识符可以在它们之间快速切换。
MapVirtualKey 将虚拟键代码转换为(映射到)扫描代码或字符值,或将扫描代码转换为虚拟键代码。
若要指定用于转换指定代码的键盘布局的句柄,请使用 MapVirtualKeyEx 函数。
MapVirtualKeyEx 将虚拟键代码映射到扫描代码或字符值,或将扫描代码转换为虚拟键代码。 该函数使用输入语言和输入区域设置标识符转换代码。
OemKeyScan 将 OEMASCII 代码 0 到 0x0FF 映射到 OEM 扫描代码和偏移状态。 该函数提供的信息允许程序通过模拟键盘输入将 OEM 文本发送到另一个程序。
RegisterHotKey 定义系统范围内的热键。
SendInput 合成键击、鼠标动作和按钮单击。
SetActiveWindow 激活窗口。 窗口必须附加到调用线程的消息队列。
SetFocus 将键盘焦点设置为指定的窗口。 窗口必须附加到调用线程的消息队列。
SetKeyboardState 将键盘键状态的 256 字节数组复制到调用线程的键盘输入状态表中。 这是由 GetKeyboardStateGetKeyState 函数访问的同一个表。 对此表所做的更改不会影响任何其他线程的键盘输入。
ToAscii 将指定的虚拟键代码和键盘状态转换为相应的一个或多个字符。 该函数使用输入语言和由键盘布局句柄标识的物理键盘布局转换代码。
若要指定用于转换指定代码的键盘布局的句柄,请使用 ToAsciiEx 函数。
ToAsciiEx 将指定的虚拟键代码和键盘状态转换为相应的一个或多个字符。 该函数使用输入语言和由输入区域设置标识符标识的物理键盘布局转换代码。
ToUnicode 将指定的虚拟键代码和键盘状态转换为相应的一个或多个 Unicode 字符。
若要指定用于转换指定代码的键盘布局的句柄,请使用 ToUnicodeEx 函数。
ToUnicodeEx 将指定的虚拟键代码和键盘状态转换为相应的一个或多个 Unicode 字符。
UnloadKeyboardLayout 卸载输入区域设置标识符(以前称为键盘布局)。
UnregisterHotKey 释放以前由调用线程注册的热键。
VkKeyScanEx 将字符转换为相应的虚拟键代码和偏移状态。 该函数使用输入语言和由输入区域设置标识符标识的物理键盘布局转换字符。

以下函数已过时。

函数 说明
GetKBCodePage 检索当前代码页。
keybd_event 合成键击。 系统可以使用这种合成的键击来生成 WM_KEYUPWM_KEYDOWN 消息。 键盘驱动程序的中断处理程序调用 keybd_event 函数。
VkKeyScan 将字符转换为当前键盘的相应虚拟键代码和偏移状态。

消息

名称 描述
WM_GETHOTKEY 确定与窗口关联的热键。
WM_SETHOTKEY 将热键与窗口相关联。 当用户按下热键时,系统会激活窗口。

通知

名称 描述
WM_ACTIVATE 同步发送到正在激活的窗口和正在停用的窗口。 如果窗口使用相同的输入队列,则消息将同步发送,首先发送到正在停用的顶级窗口的窗口过程,然后发送到正在激活的顶级窗口的窗口过程。 如果窗口使用不同的输入队列,则消息将异步发送,因此会立即激活窗口。
WM_APPCOMMAND 通知窗口用户生成了应用程序命令事件,例如,使用鼠标单击应用程序命令按钮或在键盘上键入应用程序命令键。
WM_CHAR TranslateMessage 函数对 WM_KEYDOWN 消息进行转换后发布给具有键盘焦点的窗口。 WM_CHAR 消息包含所按的键的字符代码。
WM_DEADCHAR TranslateMessage 函数对 WM_KEYUP 消息进行转换后发布给具有键盘焦点的窗口。 WM_DEADCHAR 指定由死键生成的字符代码。 死键是与其他字符组合形成复合字符的键,例如元音变音符(双点)。 例如,通过键入元音变音符的死键,然后键入 O 键,生成元音变音符 O 字符。
WM_HOTKEY 在用户按下通过 RegisterHotKey 函数注册的热键时发送。 此消息放置在与注册了热键的线程关联的消息队列的顶部。
WM_KEYDOWN 按下非系统键时,使用键盘焦点发布到窗口。 非系统键是在未按下 ALT 键时按下的键。
WM_KEYUP 非系统键被释放时,发布到具有键盘焦点的窗口。 非系统键是未按下 ALT 键的情况下按下的键,或者当窗口具有键盘焦点时按下的键盘键。
WM_KILLFOCUS 在失去键盘焦点之前立即发送到窗口。
WM_SETFOCUS 在获得键盘焦点后发送到窗口。
WM_SYSDEADCHAR TranslateMessage 函数对 WM_SYSKEYDOWN 消息进行转换后,使用键盘焦点发送给窗口。 WM_SYSDEADCHAR 指定系统死键的字符代码,即按住 ALT 键时按下的死键。
WM_SYSKEYDOWN 当用户按下 F10 键(这将激活菜单栏)或按住 ALT 键然后按下另一个键时,发布到具有键盘焦点的窗口。 当目前没有窗口具有键盘焦点时也会发生这种情况;在这种情况下,WM_SYSKEYDOWN 消息被发送到活动窗口。 接收消息的窗口可以通过检查 lParam 参数中的上下文代码来区分这两个上下文。
WM_SYSKEYUP 当用户释放在按住 ALT 键的同时按下的键时,发布到具有键盘焦点的窗口。 当目前没有窗口具有键盘焦点时也会发生这种情况;在这种情况下,WM_SYSKEYUP 消息被发送到活动窗口。 接收消息的窗口可以通过检查 lParam 参数中的上下文代码来区分这两个上下文。
WM_UNICHAR TranslateMessage 函数对 WM_KEYDOWN 消息进行转换后发布给具有键盘焦点的窗口。 WM_UNICHAR 消息包含所按的键的字符代码。

结构

名称 描述
HARDWAREINPUT 包含有关由键盘或鼠标以外的输入设备生成的模拟消息的信息。
INPUT 包含用于合成输入事件的信息,例如键击、鼠标移动和鼠标单击。
KEYBDINPUT 包含有关模拟键盘事件的信息。
LASTINPUTINFO 包含最后一个输入的时间。
MOUSEINPUT 包含有关模拟鼠标事件的信息。

常量

名称 描述
虚拟键代码 系统使用的虚拟键代码的符号常量名称、十六进制值和鼠标或键盘等效项。 代码按数字顺序列出。

另请参阅