Visual C++ 7.1Visual C++ 7.0Windows 2003Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
使用 keybd_event() 函数模拟键盘事件






4.88/5 (60投票s)
keybd_event() 函数的简要介绍,面向初学者。
引言
模拟键盘输入对于熟悉 Visual Basic 的人来说是一个众所周知的概念。 Visual Basic 中的 SendKeys()
可以完成所有事情,如果你想在没有键盘的情况下做任何事情。 但是 SendKeys()
函数内部是什么? 它做了什么? 我们可以用 Visual C++ 做这样的事情吗? 本文就是答案。 我认为这对于那些刚开始尝试用 VC++ 做一些不同事情的初学者来说会很有用。 让我们进入步骤……
函数语法
void keybd_event(BYTE bVirtualKey, BYTE bScanCode,
DWORD dwFlags, DWORD dwExtraInfo);
bVirtualKey //按键的虚拟键码。 例如,VK_RETURN, VK_TAB…
bScanCode //按键的扫描码值。 例如,0xb8 代表“左 Alt”键。
dwFlags //为按键状态设置的标志。 例如,KEYEVENTF_KEYUP。
dwExtraInfo //关于按键操作的 32 位附加信息。
函数详细信息
bVirtualKey
必须作为按键输入发送的虚拟键码。以下是可用的预定义虚拟键码
VK_NUMPAD7
0x67 VK_BACK
0x08 VK_NUMPAD8
0x68 VK_TAB
0x09 VK_NUMPAD9
0x69 VK_RETURN
0x0D VK_MULTIPLY
0x6A VK_SHIFT
0x10 VK_ADD
0x6B VK_CONTROL
0x11 VK_SEPARATOR
0x6C VK_MENU
0x12 VK_SUBTRACT
0x6D VK_PAUSE
0x13 VK_DECIMAL
0x6E VK_CAPITAL
0x14 VK_DIVIDE
0x6F VK_ESCAPE
0x1B VK_F1
0x70 VK_SPACE
0x20 VK_F2
0x71 VK_END
0x23 VK_F3
0x72 VK_HOME
0x24 VK_F4
0x73 VK_LEFT
0x25 VK_F5
0x74 VK_UP
0x26 VK_F6
0x75 VK_RIGHT
0x27 VK_F7
0x76 VK_DOWN
0x28 VK_F8
0x77 VK_PRINT
0x2A VK_F9
0x78 VK_SNAPSHOT
0x2C VK_F10
0x79 VK_INSERT
0x2D VK_F11
0x7A VK_DELETE
0x2E VK_F12
0x7B VK_LWIN
0x5B VK_NUMLOCK
0x90 VK_RWIN
0x5C VK_SCROLL
0x91 VK_NUMPAD0
0x60 VK_LSHIFT
0xA0 VK_NUMPAD1
0x61 VK_RSHIFT
0xA1 VK_NUMPAD2
0x62 VK_LCONTROL
0xA2 VK_NUMPAD3
0x63 VK_RCONTROL
0xA3 VK_NUMPAD4
0x64 VK_LMENU
0xA4 VK_NUMPAD5
0x65 VK_RMENU
0xA5 VK_NUMPAD6
0x66 可以使用
VkKeyScan(TCHAR ch)
函数将字符键转换为虚拟键。bScanCode
扫描码是按键的硬件键码(生成和断开代码)。以下是可用的扫描码(此参数将使用断开码)。
dwFlags
一组标志位,用于指定函数操作的各个方面。 应用程序可以使用以下预定义的常量值的任何组合来设置标志。
值 含义 KEYEVENTF_EXTENDEDKEY
如果指定,则扫描码前面有一个值为 0xE0 (224) 的前缀字节。 KEYEVENTF_KEYUP
如果指定,则按键已释放。 如果未指定,则按键被按下。 dwExtraInfo
与键盘输入一起使用的 32 位附加信息。
示例代码
// Simulating a Alt+Tab keystroke keybd_event(VK_MENU,0xb8,0 , 0); //Alt Press keybd_event(VK_TAB,0x8f,0 , 0); // Tab Press keybd_event(VK_TAB,0x8f, KEYEVENTF_KEYUP,0); // Tab Release keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0); // Alt Release // Simulating a Ctrl+A keystroke keybd_event(VK_CONTROL,0x9d,0 , 0); // Ctrl Press keybd_event(VkKeyScan(‘A’),0x9e,0 , 0); // ‘A’ Press keybd_event(VkKeyScan(‘A’),0x9e, KEYEVENTF_KEYUP,0); // ‘A’ Release keybd_event(VK_CONTROL,0x9d,KEYEVENTF_KEYUP,0); // Ctrl Release
结论
本文可能不够详细。 没有任何文章可以满足所有人的期望。 但是,每篇文章都应该成为您技术成长的种子。 因此,我相信这将是一颗种子。 谢谢大家。