출처: http://www.codeproject.com/KB/system/keyboard.aspx?display=Print
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.
Discussions and Feedback
31 messages have been posted for this article. Visit http://www.codeproject.com/KB/system/keyboard.aspx to post and view comments on this article, or click here to get a print view with messages.
PermaLink | Privacy | Terms of Use Last Updated: 4 Jun 2004 Editor: Smitha Vijayan |