键盘输入

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

本节内容

名称 说明
关于键盘输入 讨论键盘输入。
使用键盘输入 涵盖与键盘输入关联的任务。
键盘输入参考 包含 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 映射到 OEM 扫描代码和转移状态0x0FF。 该函数提供的信息允许程序通过模拟键盘输入将 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 指定死键生成的字符代码。 死键是生成字符(如 umlaut (双点) )的键,该键与另一个字符结合使用以形成复合字符。 例如,通过键入 umlaut 字符的死键,然后键入 O 键,生成 umlaut-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 包含有关输入设备(而不是键盘或鼠标)生成的模拟消息的信息。
输入 包含用于合成输入事件的信息,例如击键、鼠标移动和鼠标单击。
KEYBDINPUT 包含有关模拟键盘事件的信息。
LASTINPUTINFO 包含最后一个输入的时间。
MOUSEINPUT 包含有关模拟鼠标事件的信息。

常量

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

另请参阅