对系统模拟按键方面的知识和按键映射代码做了一下梳理,在这里分享出来,适用于开发自动操作工具和游戏外挂。
主代码:
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 ke
新闻热点
疑难解答