Click here to Skip to main content
Click here to Skip to main content

Keyboard Events Simulation using keybd_event() function

By , 4 Jun 2004
 

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

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).

  • 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.

Example 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)

About the Author

Naren Neelamegam
Software Developer
India India
Member
E-Mail : loveablevirus@yahoo.com
Web : http://www.narenn.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 4memberMD. Mohiuddin Ahmed16 Dec '12 - 6:22 
Questionwhat handle window to simulation ? if no active window simulate to where .please help me !membertieulamtu202118 Sep '12 - 22:54 
Questionhow can i download this code?memberMember 811215027 Jul '11 - 18:06 
GeneralSendkeys Modification of Above Code for CitrixmemberAndrewiski30 Aug '10 - 5:30 
QuestionHow to Use this Example to Send Tab to CitrixmemberAndrewiski26 Aug '10 - 10:47 
AnswerRe: How to Use this Example to Send Tab to CitrixmemberAndrewiski26 Aug '10 - 10:52 
GeneralSimulate key from servicememberfriendship200711 Nov '08 - 15:44 
GeneralNEED HEPL!!!!!!!!membersekharsam9 Jul '08 - 23:06 
GeneralNeed a Helpmembersekharsam9 Jul '08 - 20:03 
GeneralRe: Need a Helpmemberbryan_f4 Mar '09 - 3:06 
Questionkeep key pressedmemberSilverV29 Apr '08 - 6:08 
GeneralNotebook FN Keymembersnakeyeyess16 Apr '08 - 2:46 
Generalvirtual keyboardmemberthemancer12 Sep '07 - 9:40 
Generalsendkeys sucks :)membernekropatolog5 Aug '07 - 23:09 
GeneralA couple of notes on this articlememberCPU Killer5 Aug '07 - 12:21 
QuestionHow to simulate press and hold a character key?memberlc1234 Mar '07 - 12:04 
AnswerRe: How to simulate press and hold a character key?memberBODYPRINT26 Mar '08 - 0:44 
GeneralGood article!membervalmierietis2 Feb '07 - 4:04 
GeneralRe: Good article!membervalmierietis2 Feb '07 - 4:09 
GeneralSend ctrl+alt+delmemberseralav22 Oct '06 - 21:48 
GeneralRe: Send ctrl+alt+delmemberNaren Neelamegam27 Nov '06 - 18:09 
GeneralRe: Send ctrl+alt+delmemberMD. Mohiuddin Ahmed12 Dec '12 - 19:21 
GeneralRe: Send ctrl+alt+delmemberMember 11829802 Apr '13 - 22:36 
GeneralRe: Send ctrl+alt+delmemberSquat5 Jun '07 - 19:27 
GeneralRe: Send ctrl+alt+delmemberMD. Mohiuddin Ahmed12 Dec '12 - 19:17 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130523.1 | Last Updated 5 Jun 2004
Article Copyright 2004 by Naren Neelamegam
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid