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
keybd_event(VK_MENU,0xb8,0 , 0);
keybd_event(VK_TAB,0x8f,0 , 0);
keybd_event(VK_TAB,0x8f, KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0x9d,0 , 0);
keybd_event(VkKeyScan(‘A’),0x9e,0 , 0);
keybd_event(VkKeyScan(‘A’),0x9e, KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0x9d,KEYEVENTF_KEYUP,0);
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.
Naren started coding during 1999 with FORTRAN, then COBOL, PASCAL, C, C++, VC++ ..... C#, Java, ASP so on, till today. He claims himself as techie who loves coding, but he is not even sure which technology or platform he loves, most of the time Windows, some time WinCE, some time Linux, nowadays Android and embedded platforms. He can do some query stuffs with Oracle, SQL Server, MySQL. He strongly believes that C/C++ is a must for all programmers, "if you know C/C++, you can do programming on any language". He is an electronic gadget guy who likes to buy small gadgets all the time, at least he will do window shopping on a gadget shop. His interest always have been with Automation in any form, call it a little automated program sitting in his Laptop or a home automation program runs on his mobile. Apart from coding, he likes to do...???