65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 keybd_event() 函数模拟键盘事件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (60投票s)

2004年6月5日

CPOL

2分钟阅读

viewsIcon

684177

downloadIcon

1

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

结论

本文可能不够详细。 没有任何文章可以满足所有人的期望。 但是,每篇文章都应该成为您技术成长的种子。 因此,我相信这将是一颗种子。 谢谢大家。

© . All rights reserved.