1. keybd_event
基本用法(VB.NET)
声明 API
Imports System.Runtime.InteropServices
Public Class KeyboardSimulator
<DllImport("user32.dll", SetLastError:=True)>
Public Shared Sub keybd_event(
bVk As Byte, ' 虚拟键码(如 &H41 是 "A" 键)
bScan As Byte, ' 硬件扫描码(通常填 0)
dwFlags As UInteger, ' 按下(0) 或释放(&H2)
dwExtraInfo As IntPtr ' 额外信息(通常填 IntPtr.Zero)
)
End Sub
' 常用标志
Public Const KEYEVENTF_KEYDOWN As UInteger = &H0 ' 按下
Public Const KEYEVENTF_KEYUP As UInteger = &H2 ' 释放
Public Const KEYEVENTF_EXTENDEDKEY As UInteger = &H1 ' 扩展键(如小键盘的 Enter)
End Class
2. 实际示例
示例 1:按下并释放 A
键
' 按下 A 键
KeyboardSimulator.keybd_event(&H41, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 释放 A 键
KeyboardSimulator.keybd_event(&H41, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
示例 2:模拟组合键 Ctrl + C
(复制操作)
' 按下 Ctrl
KeyboardSimulator.keybd_event(&H11, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 按下 C
KeyboardSimulator.keybd_event(&H43, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 释放 C
KeyboardSimulator.keybd_event(&H43, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
' 释放 Ctrl
KeyboardSimulator.keybd_event(&H11, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
示例 3:按住 Shift
并输入 A
(输出大写 A)
' 按下 Shift
KeyboardSimulator.keybd_event(&H10, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 按下 A
KeyboardSimulator.keybd_event(&H41, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 释放 A
KeyboardSimulator.keybd_event(&H41, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
' 释放 Shift
KeyboardSimulator.keybd_event(&H10, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
示例 4:模拟方向键(如右箭头 →)
' 按下右箭头 →
KeyboardSimulator.keybd_event(&H27, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 释放右箭头 →
KeyboardSimulator.keybd_event(&H27, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
3. 常用虚拟键码(Virtual-Key Codes)
键名 | 十六进制 | 十进制 | 说明 |
---|---|---|---|
A –Z | &H41 –&H5A | 65–90 | 字母键 A–Z |
0 –9 | &H30 –&H39 | 48–57 | 数字键 0–9 |
F1 –F24 | &H70 –&H87 | 112–135 | 功能键 F1–F24 |
Backspace | &H08 | 8 | 退格键 |
Tab | &H09 | 9 | Tab 键 |
Enter | &H0D | 13 | 回车键 |
Shift | &H10 | 16 | Shift 键 |
Ctrl | &H11 | 17 | Ctrl 键 |
Alt | &H12 | 18 | Alt 键 |
Caps Lock | &H14 | 20 | 大写锁定键 |
Esc | &H1B | 27 | Esc 键 |
Space | &H20 | 32 | 空格键 |
Page Up | &H21 | 33 | Page Up |
Page Down | &H22 | 34 | Page Down |
End | &H23 | 35 | End 键 |
Home | &H24 | 36 | Home 键 |
← (左箭头) | &H25 | 37 | 左方向键 |
↑ (上箭头) | &H26 | 38 | 上方向键 |
→ (右箭头) | &H27 | 39 | 右方向键 |
↓ (下箭头) | &H28 | 40 | 下方向键 |
Print Screen | &H2C | 44 | 打印屏幕键 |
Insert | &H2D | 45 | Insert 键 |
Delete | &H2E | 46 | Delete 键 |
Num Lock | &H90 | 144 | 小键盘锁定键 |
Scroll Lock | &H91 | 145 | 滚动锁定键 |
音量+ | &HAF | 175 | 增加音量 |
音量- | &HAE | 174 | 减小音量 |
键名 | 十六进制 | 十进制 | 说明 |
---|---|---|---|
A | &H41 | 65 | 字母 A |
B | &H42 | 66 | 字母 B |
C | &H43 | 67 | 字母 C |
D | &H44 | 68 | 字母 D |
E | &H45 | 69 | 字母 E |
F | &H46 | 70 | 字母 F |
G | &H47 | 71 | 字母 G |
H | &H48 | 72 | 字母 H |
I | &H49 | 73 | 字母 I |
J | &H4A | 74 | 字母 J |
K | &H4B | 75 | 字母 K |
L | &H4C | 76 | 字母 L |
M | &H4D | 77 | 字母 M |
N | &H4E | 78 | 字母 N |
O | &H4F | 79 | 字母 O |
P | &H50 | 80 | 字母 P |
Q | &H51 | 81 | 字母 Q |
R | &H52 | 82 | 字母 R |
S | &H53 | 83 | 字母 S |
T | &H54 | 84 | 字母 T |
U | &H55 | 85 | 字母 U |
V | &H56 | 86 | 字母 V |
W | &H57 | 87 | 字母 W |
X | &H58 | 88 | 字母 X |
Y | &H59 | 89 | 字母 Y |
Z | &H5A | 90 | 字母 Z |
键名 | 十六进制 | 十进制 | 说明 |
---|---|---|---|
F1 | &H70 | 112 | 功能键 F1 |
F2 | &H71 | 113 | 功能键 F2 |
F3 | &H72 | 114 | 功能键 F3 |
F4 | &H73 | 115 | 功能键 F4 |
F5 | &H74 | 116 | 功能键 F5 |
F6 | &H75 | 117 | 功能键 F6 |
F7 | &H76 | 118 | 功能键 F7 |
F8 | &H77 | 119 | 功能键 F8 |
F9 | &H78 | 120 | 功能键 F9 |
F10 | &H79 | 121 | 功能键 F10 |
F11 | &H7A | 122 | 功能键 F11 |
F12 | &H7B | 123 | 功能键 F12 |
F13 | &H7C | 124 | 功能键 F13 |
F14 | &H7D | 125 | 功能键 F14 |
F15 | &H7E | 126 | 功能键 F15 |
F16 | &H7F | 127 | 功能键 F16 |
F17 | &H80 | 128 | 功能键 F17 |
F18 | &H81 | 129 | 功能键 F18 |
F19 | &H82 | 130 | 功能键 F19 |
F20 | &H83 | 131 | 功能键 F20 |
F21 | &H84 | 132 | 功能键 F21 |
F22 | &H85 | 133 | 功能键 F22 |
F23 | &H86 | 134 | 功能键 F23 |
F24 | &H87 | 135 | 功能键 F24 |
4. 常见问题
Q1: 为什么 keybd_event
有时无效?
-
窗口焦点问题:确保目标窗口处于激活状态。
-
权限问题:某些系统键(如
Win
键)可能需要管理员权限。 -
防病毒拦截:部分安全软件会阻止模拟按键。
Q2: 如何模拟小键盘的 Enter
键?
' 按下小键盘 Enter(需加 KEYEVENTF_EXTENDEDKEY 标志)
KeyboardSimulator.keybd_event(&H0D, 0, KeyboardSimulator.KEYEVENTF_EXTENDEDKEY, IntPtr.Zero)
' 释放小键盘 Enter
KeyboardSimulator.keybd_event(&H0D, 0, KeyboardSimulator.KEYEVENTF_EXTENDEDKEY Or KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
Q3: 如何模拟 Alt + Tab
切换窗口?
' 按下 Alt
KeyboardSimulator.keybd_event(&H12, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 按下 Tab
KeyboardSimulator.keybd_event(&H09, 0, KeyboardSimulator.KEYEVENTF_KEYDOWN, IntPtr.Zero)
' 释放 Tab
KeyboardSimulator.keybd_event(&H09, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
' 释放 Alt
KeyboardSimulator.keybd_event(&H12, 0, KeyboardSimulator.KEYEVENTF_KEYUP, IntPtr.Zero)
5. 总结
-
keybd_event
简单易用,适合快速模拟按键操作。 -
组合键 需要按顺序 按下 → 释放。
-
方向键、功能键、特殊键 都有对应的虚拟键码。
-
----来自deepseek