天天看点

keybd_event函数详解(请别忽视了scan codes!)

Introduction

Simulation of a keyboard input is a well known concept for those who are all familiar with Visual Basic.

SendKeys()

in Visual Basic does all the things, if you want to do anything without keyboard. But what is in

SendKeys()

function? What does it do? Can we do such a thing with Visual C++? This article is the answer. I think this will be useful for beginners who are all just trying to do something different with VC++. Let us get into the steps�

Function Syntax

keybd_event函数详解(请别忽视了scan codes!)

Collapse

keybd_event函数详解(请别忽视了scan codes!)

Copy Code

void keybd_event(BYTE bVirtualKey, BYTE bScanCode, 
                         DWORD dwFlags, DWORD dwExtraInfo);      
  • bVirtualKey //Virtual Keycode of keys. E.g., VK_RETURN, VK_TAB�

  • bScanCode //Scan Code value of keys. E.g., 0xb8 for �Left Alt� key.

  • dwFlags //Flag that is set for key state. E.g., KEYEVENTF_KEYUP.

  • dwExtraInfo //32-bit extra information about keystroke.

Function Details:

  • bVirtualKey

    Virtual keycode that has to be send as key input. The following are the available predefined virtual key codes:

    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
    Character key can be converted into virtual key using

    VkKeyScan(TCHAR ch)

    function.
  • bScanCode

    Scan code is the hardware key code for the key (make and break codes). The following are the available scan codes (break code will be used in this parameter).
    keybd_event函数详解(请别忽视了scan codes!)
    keybd_event函数详解(请别忽视了scan codes!)
  • dwFlags

    A set of flag bits that specify various aspects of function operation. An application can use any combination of the following predefined constant values to set the flags.
    Value Meaning

    KEYEVENTF_EXTENDEDKEY

    If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).

    KEYEVENTF_KEYUP

    If specified, the key is being released. If not specified, the key is being depressed.
  • dwExtraInfo

    32-bit extra information along with the keyboard input.
    keybd_event函数详解(请别忽视了scan codes!)

Example Code

keybd_event函数详解(请别忽视了scan codes!)

Collapse

keybd_event函数详解(请别忽视了scan codes!)

Copy Code

// 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      

Conclusion

This article may not be that much detailed. None of the articles can satisfy one's expectations. But, each article should be a seed for your technical growth. Thus, I believe that this would be a seed. Thank you all.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

继续阅读