对系统模拟按键方面的知识和按键映射代码做了一下梳理,在这里分享出来,适用于开发自动操作工具和游戏外挂。
主代码:
- public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key click flag
- public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag
- [DllImport("user32.dll")]
- private static extern void keybd_event(byte bVk, byte bSCan, int dwFlags, int dwExtraInfo);
- [DllImport("user32.dll")]
- private static extern byte MapVirtualKey(byte wCode, int wMap);
- public static void 模拟按下按键(VirtualKeyCode 虚拟按键代码)
- {
- var code = (byte)虚拟按键代码;
- keybd_event(code, 0, 0, 0);
- }
- public static void 模拟弹起按键(VirtualKeyCode 虚拟按键代码)
- {
- var code = (byte) 虚拟按键代码;
- keybd_event(code, 0, KEYEVENTF_KEYUP, 0);
- }
- public static void 模拟单击按键(VirtualKeyCode 虚拟按键代码)
- {
- var code = (byte)虚拟按键代码;
- keybd_event(code, 0, KEYEVENTF_EXTENDEDKEY, 0);
- }
网上关于keybd_event的dwFlags参数功能说法很混乱,经我测试貌似是KEYEVENTF_EXTENDEDKEY表示一次单击,0表示按下,KEYEVENTF_KEYUP表示弹起,不一定完全正确,希望高人指点一下。
另外MapVirtualKey的作用实在不懂,所以就没用上,看到有人这么调用不知有什么区别:
- var code = (byte)虚拟按键代码;
- keybd_event(code, MapVirtualKey(code, 0), 0, 0);
我试过好像也没什么变化~到底MapVirtualKey是干什么用的呢??
VirtualKeyCode枚举:
- /// <summary>
- /// 虚拟按键代码
- /// 参考于 http://msdn.microsoft.com/zh-cn/library/dd375731(v=vs.85).aspx
- /// </summary>
- public enum VirtualKeyCode {
- /// <summary>
- /// Left mouse button
- /// </summary>
- Left_mouse_button = 0x01,
- /// <summary>
- /// Right mouse button
- /// </summary>
- Right_mouse_button = 0x02,
- /// <summary>
- /// Control-break processing
- /// </summary>
- Control_break_processing = 0x03,
- /// <summary>
- /// Middle mouse button (three-button mouse)
- /// </summary>
- Middle_mouse_button = 0x04,
- /// <summary>
- /// X1 mouse button
- /// </summary>
- X1_mouse_button = 0x05,
- /// <summary>
- /// X2 mouse button
- /// </summary>
- X2_mouse_button = 0x06,
- /// <summary>
- /// Undefined
- /// </summary>
- Undefined1 = 0x07,
- /// <summary>
- /// BACKSPACE key
- /// </summary>
- BACKSPACE_key = 0x08,
- /// <summary>
- /// TAB key
- /// </summary>
- TAB_key = 0x09,
- /// <summary>
- /// CLEAR key
- /// </summary>
- CLEAR_key = 0x0C,
- /// <summary>
- /// ENTER key
- /// </summary>
- ENTER_key = 0x0D,
- /// <summary>
- /// SHIFT key
- /// </summary>
- SHIFT_key = 0x10,
- /// <summary>
- /// CTRL key
- /// </summary>
- CTRL_key = 0x11,
- /// <summary>
- /// ALT key
- /// </summary>
- ALT_key = 0x12,
- /// <summary>
- /// PAUSE key
- /// </summary>
- PAUSE_key = 0x13,
- /// <summary>
- /// CAPS LOCK key
- /// </summary>
- CAPS_LOCK_key = 0x14,
- /// <summary>
- /// IME Kana mode
- /// </summary>
- IME_Kana_mode = 0x15,
- /// <summary>
- /// IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
- /// </summary>
- IME_Hanguel_mode = 0x15,
- /// <summary>
- /// IME Hangul mode
- /// </summary>
- IME_Hangul_mode = 0x15,
- /// <summary>
- /// Undefined
- /// </summary>
- Undefined2 = 0x16,
- /// <summary>
- /// IME Junja mode
- /// </summary>
- IME_Junja_mode = 0x17,
- /// <summary>
- /// IME final mode
- /// </summary>
- IME_final_mode = 0x18,
- /// <summary>
- /// IME Hanja mode
- /// </summary>
- IME_Hanja_mode = 0x19,
- /// <summary>
- /// IME Kanji mode
- /// </summary>
- IME_Kanji_mode = 0x19,
- /// <summary>
- /// Undefined
- /// </summary>
- Undefined = 0x1A,
- /// <summary>
- /// ESC key
- /// </summary>
- ESC_key = 0x1B,
- /// <summary>
- /// IME convert
- /// </summary>
- IME_convert = 0x1C,
- /// <summary>
- /// IME nonconvert
- /// </summary>
- IME_nonconvert = 0x1D,
- /// <summary>
- /// IME accept
- /// </summary>
- IME_accept = 0x1E,
- /// <summary>
- /// IME mode change request
- /// </summary>
- IME_mode_change_request = 0x1F,
- /// <summary>
- /// SPACEBAR
- /// </summary>
- SPACEBAR = 0x20,
- /// <summary>
- /// PAGE UP key
- /// </summary>
- PAGE_UP_key = 0x21,
- /// <summary>
- /// PAGE DOWN key
- /// </summary>
- PAGE_DOWN_key = 0x22,
- /// <summary>
- /// END key
- /// </summary>
- END_key = 0x23,
- /// <summary>
- /// HOME key
- /// </summary>
- HOME_key = 0x24,
- /// <summary>
- /// LEFT ARROW key
- /// </summary>
- LEFT_ARROW_key = 0x25,
- /// <summary>
- /// UP ARROW key
- /// </summary>
- UP_ARROW_key = 0x26,
- /// <summary>
- /// RIGHT ARROW key
- /// </summary>
- RIGHT_ARROW_key = 0x27,
- /// <summary>
- /// DOWN ARROW key
- /// </summary>
- DOWN_ARROW_key = 0x28,
- /// <summary>
- /// SELECT key
- /// </summary>
- SELECT_key = 0x29,
- /// <summary>
- /// PRINT key
- /// </summary>
- PRINT_key = 0x2A,
- /// <summary>
- /// EXECUTE key
- /// </summary>
- EXECUTE_key = 0x2B,
- /// <summary>
- /// PRINT SCREEN key
- /// </summary>
- PRINT_SCREEN_key = 0x2C,
- /// <summary>
- /// INS key
- /// </summary>
- INS_key = 0x2D,
- /// <summary>
- /// DEL key
- /// </summary>
- DEL_key = 0x2E,
- /// <summary>
- /// HELP key
- /// </summary>
- HELP_key = 0x2F,
- /// <summary>
- /// 0 key
- /// </summary>
- _0_key = 0x30,
- /// <summary>
- /// 1 key
- /// </summary>
- _1_key = 0x31,
- /// <summary>
- /// 2 key
- /// </summary>
- _2_key = 0x32,
- /// <summary>
- /// 3 key
- /// </summary>
- _3_key = 0x33,
- /// <summary>
- /// 4 key
- /// </summary>
- _4_key = 0x34,
- /// <summary>
- /// 5 key
- /// </summary>
- _5_key = 0x35,
- /// <summary>
- /// 6 key
- /// </summary>
- _6_key = 0x36,
- /// <summary>
- /// 7 key
- /// </summary>
- _7_key = 0x37,
- /// <summary>
- /// 8 key
- /// </summary>
- _8_key = 0x38,
- /// <summary>
- /// 9 key
- /// </summary>
- _9_key = 0x39,
- /// <summary>
- /// A key
- /// </summary>
- A_key = 0x41,
- /// <summary>
- /// B key
- /// </summary>
- B_key = 0x42,
- /// <summary>
- /// C key
- /// </summary>
- C_key = 0x43,
- /// <summary>
- /// D key
- /// </summary>
- D_key = 0x44,
- /// <summary>
- /// E key
- /// </summary>
- E_key = 0x45,
- /// <summary>
- /// F key
- /// </summary>
- F_key = 0x46,
- /// <summary>
- /// G key
- /// </summary>
- G_key = 0x47,
- /// <summary>
- /// H key
- /// </summary>
- H_key = 0x48,
- /// <summary>
- /// I key
- /// </summary>
- I_key = 0x49,
- /// <summary>
- /// J key
- /// </summary>
- J_key = 0x4A,
- /// <summary>
- /// K key
- /// </summary>
- K_key = 0x4B,
- /// <summary>
- /// L key
- /// </summary>
- L_key = 0x4C,
- /// <summary>
- /// M key
- /// </summary>
- M_key = 0x4D,
- /// <summary>
- /// N key
- /// </summary>
- N_key = 0x4E,
- /// <summary>
- /// O key
- /// </summary>
- O_key = 0x4F,
- /// <summary>
- /// P key
- /// </summary>
- P_key = 0x50,
- /// <summary>
- /// Q key
- /// </summary>
- Q_key = 0x51,
- /// <summary>
- /// R key
- /// </summary>
- R_key = 0x52,
- /// <summary>
- /// S key
- /// </summary>
- S_key = 0x53,
- /// <summary>
- /// T key
- /// </summary>
- T_key = 0x54,
- /// <summary>
- /// U key
- /// </summary>
- U_key = 0x55,
- /// <summary>
- /// V key
- /// </summary>
- V_key = 0x56,
- /// <summary>
- /// W key
- /// </summary>
- W_key = 0x57,
- /// <summary>
- /// X key
- /// </summary>
- X_key = 0x58,
- /// <summary>
- /// Y key
- /// </summary>
- Y_key = 0x59,
- /// <summary>
- /// Z key
- /// </summary>
- Z_key = 0x5A,
- /// <summary>
- /// Left Windows key (Natural keyboard)
- /// </summary>
- Left_Windows_key = 0x5B,
- /// <summary>
- /// Right Windows key (Natural keyboard)
- /// </summary>
- Right_Windows_key = 0x5C,
- /// <summary>
- /// Applications key (Natural keyboard)
- /// </summary>
- Applications_key = 0x5D,
- /// <summary>
- /// Reserved
- /// </summary>
- Reserved1 = 0x5E,
- /// <summary>
- /// Computer Sleep key
- /// </summary>
- Computer_Sleep_key = 0x5F,
- /// <summary>
- /// Numeric keypad 0 key
- /// </summary>
- Numeric_keypad_0_key = 0x60,
- /// <summary>
- /// Numeric keypad 1 key
- /// </summary>
- Numeric_keypad_1_key = 0x61,
- /// <summary>
- /// Numeric keypad 2 key
- /// </summary>
- Numeric_keypad_2_key = 0x62,
- /// <summary>
- /// Numeric keypad 3 key
- /// </summary>
- Numeric_keypad_3_key = 0x63,
- /// <summary>
- /// Numeric keypad 4 key
- /// </summary>
- Numeric_keypad_4_key = 0x64,
- /// <summary>
- /// Numeric keypad 5 key
- /// </summary>
- Numeric_keypad_5_key = 0x65,
- /// <summary>
- /// Numeric keypad 6 key
- /// </summary>
- Numeric_keypad_6_key = 0x66,
- /// <summary>
- /// Numeric keypad 7 key
- /// </summary>
- Numeric_keypad_7_key = 0x67,
- /// <summary>
- /// Numeric keypad 8 key
- /// </summary>
- Numeric_keypad_8_key = 0x68,
- /// <summary>
- /// Numeric keypad 9 key
- /// </summary>
- Numeric_keypad_9_key = 0x69,
- /// <summary>
- /// Multiply key
- /// </summary>
- Multiply_key = 0x6A,
- /// <summary>
- /// Add key
- /// </summary>
- Add_key = 0x6B,
- /// <summary>
- /// Separator key
- /// </summary>
- Separator_key = 0x6C,
- /// <summary>
- /// Subtract key
- /// </summary>
- Subtract_key = 0x6D,
- /// <summary>
- /// Decimal key
- /// </summary>
- Decimal_key = 0x6E,
- /// <summary>
- /// Divide key
- /// </summary>
- Divide_key = 0x6F,
- /// <summary>
- /// F1 key
- /// </summary>
- F1_key = 0x70,
- /// <summary>
- /// F2 key
- /// </summary>
- F2_key = 0x71,
- /// <summary>
- /// F3 key
- /// </summary>
- F3_key = 0x72,
- /// <summary>
- /// F4 key
- /// </summary>
- F4_key = 0x73,
- /// <summary>
- /// F5 key
- /// </summary>
- F5_key = 0x74,
- /// <summary>
- /// F6 key
- /// </summary>
- F6_key = 0x75,
- /// <summary>
- /// F7 key
- /// </summary>
- F7_key = 0x76,
- /// <summary>
- /// F8 key
- /// </summary>
- F8_key = 0x77,
- /// <summary>
- /// F9 key
- /// </summary>
- F9_key = 0x78,
- /// <summary>
- /// F10 key
- /// </summary>
- F10_key = 0x79,
- /// <summary>
- /// F11 key
- /// </summary>
- F11_key = 0x7A,
- /// <summary>
- /// F12 key
- /// </summary>
- F12_key = 0x7B,
- /// <summary>
- /// F13 key
- /// </summary>
- F13_key = 0x7C,
- /// <summary>
- /// F14 key
- /// </summary>
- F14_key = 0x7D,
- /// <summary>
- /// F15 key
- /// </summary>
- F15_key = 0x7E,
- /// <summary>
- /// F16 key
- /// </summary>
- F16_key = 0x7F,
- /// <summary>
- /// F17 key
- /// </summary>
- F17_key = 0x80,
- /// <summary>
- /// F18 key
- /// </summary>
- F18_key = 0x81,
- /// <summary>
- /// F19 key
- /// </summary>
- F19_key = 0x82,
- /// <summary>
- /// F20 key
- /// </summary>
- F20_key = 0x83,
- /// <summary>
- /// F21 key
- /// </summary>
- F21_key = 0x84,
- /// <summary>
- /// F22 key
- /// </summary>
- F22_key = 0x85,
- /// <summary>
- /// F23 key
- /// </summary>
- F23_key = 0x86,
- /// <summary>
- /// F24 key
- /// </summary>
- F24_key = 0x87,
- /// <summary>
- /// NUM LOCK key
- /// </summary>
- NUM_LOCK_key = 0x90,
- /// <summary>
- /// SCROLL LOCK key
- /// </summary>
- SCROLL_LOCK_key = 0x91,
- /// <summary>
- /// Left SHIFT key
- /// </summary>
- Left_SHIFT_key = 0xA0,
- /// <summary>
- /// Right SHIFT key
- /// </summary>
- Right_SHIFT_key = 0xA1,
- /// <summary>
- /// Left CONTROL key
- /// </summary>
- Left_CONTROL_key = 0xA2,
- /// <summary>
- /// Right CONTROL key
- /// </summary>
- Right_CONTROL_key = 0xA3,
- /// <summary>
- /// Left MENU key
- /// </summary>
- Left_MENU_key = 0xA4,
- /// <summary>
- /// Right MENU key
- /// </summary>
- Right_MENU_key = 0xA5,
- /// <summary>
- /// Browser Back key
- /// </summary>
- Browser_Back_key = 0xA6,
- /// <summary>
- /// Browser Forward key
- /// </summary>
- Browser_Forward_key = 0xA7,
- /// <summary>
- /// Browser Refresh key
- /// </summary>
- Browser_Refresh_key = 0xA8,
- /// <summary>
- /// Browser Stop key
- /// </summary>
- Browser_Stop_key = 0xA9,
- /// <summary>
- /// Browser Search key
- /// </summary>
- Browser_Search_key = 0xAA,
- /// <summary>
- /// Browser Favorites key
- /// </summary>
- Browser_Favorites_key = 0xAB,
- /// <summary>
- /// Browser Start and Home key
- /// </summary>
- Browser_Start_and_Home_key = 0xAC,
- /// <summary>
- /// Volume Mute key
- /// </summary>
- Volume_Mute_key = 0xAD,
- /// <summary>
- /// Volume Down key
- /// </summary>
- Volume_Down_key = 0xAE,
- /// <summary>
- /// Volume Up key
- /// </summary>
- Volume_Up_key = 0xAF,
- /// <summary>
- /// Next Track key
- /// </summary>
- Next_Track_key = 0xB0,
- /// <summary>
- /// Previous Track key
- /// </summary>
- Previous_Track_key = 0xB1,
- /// <summary>
- /// Stop Media key
- /// </summary>
- Stop_Media_key = 0xB2,
- /// <summary>
- /// Play/Pause Media key
- /// </summary>
- Play_Or_Pause_Media_key = 0xB3,
- /// <summary>
- /// Start Mail key
- /// </summary>
- Start_Mail_key = 0xB4,
- /// <summary>
- /// Select Media key
- /// </summary>
- Select_Media_key = 0xB5,
- /// <summary>
- /// Start Application 1 key
- /// </summary>
- Start_Application_1_key = 0xB6,
- /// <summary>
- /// Start Application 2 key
- /// </summary>
- Start_Application_2_key = 0xB7,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters1 = 0xBA,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters2 = 0xBF,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters3 = 0xC0,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters4 = 0xDB,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters5 = 0xDC,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters6 = 0xDD,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters7 = 0xDE,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters8 = 0xDF,
- /// <summary>
- /// Reserved
- /// </summary>
- Reserved2 = 0xE0,
- /// <summary>
- /// OEM specific
- /// </summary>
- OEM_specific1 = 0xE1,
- /// <summary>
- /// Either the angle bracket key or the backslash key on the RT 102-key keyboard
- /// </summary>
- Either_the_angle_bracket_key_or_the_backslash_key_on_the_RT_102_key_keyboard = 0xE2,
- /// <summary>
- /// IME PROCESS key
- /// </summary>
- IME_PROCESS_key = 0xE5,
- /// <summary>
- /// OEM specific
- /// </summary>
- OEM_specific2 = 0xE6,
- /// <summary>
- /// Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
- /// </summary>
- Used_to_pass_Unicode_characters_as_if_they_were_keystrokes = 0xE7,
- /// <summary>
- /// Unassigned
- /// </summary>
- Unassigned = 0xE8,
- /// <summary>
- /// Attn key
- /// </summary>
- Attn_key = 0xF6,
- /// <summary>
- /// CrSel key
- /// </summary>
- CrSel_key = 0xF7,
- /// <summary>
- /// ExSel key
- /// </summary>
- ExSel_key = 0xF8,
- /// <summary>
- /// Erase EOF key
- /// </summary>
- Erase_EOF_key = 0xF9,
- /// <summary>
- /// Play key
- /// </summary>
- Play_key = 0xFA,
- /// <summary>
- /// Zoom key
- /// </summary>
- Zoom_key = 0xFB,
- /// <summary>
- /// Reserved
- /// </summary>
- Reserved = 0xFC,
- /// <summary>
- /// PA1 key
- /// </summary>
- PA1_key = 0xFD,
- /// <summary>
- /// Clear key
- /// </summary>
- Clear_key = 0xFE
- }
调用演示:
- //模拟实现Ctrl+O操作
- 模拟按下按键(VirtualKeyCode.CTRL_key)
- 模拟单击按键(VirtualKeyCode.O_key)
- 模拟弹起按键(VirtualKeyCode.CTRL_key)
来源: http://www.bubuko.com/infodetail-2328993.html