zoukankan      html  css  js  c++  java
  • 整理分享C#通过user32.dll模拟物理按键操作的代码

    转载自:http://blog.skydev.cc/

    对系统模拟按键方面的知识和按键映射代码做了一下梳理,在这里分享出来,适用于开发自动操作工具和游戏外挂。

    主代码:

    复制代码
    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)
  • 相关阅读:
    Ubuntu adb devices :???????????? no permissions (verify udev rules) 解决方法
    ubuntu 关闭显示器的命令
    ubuntu android studio kvm
    ubuntu 14.04版本更改文件夹背景色为草绿色
    ubuntu 创建桌面快捷方式
    Ubuntu 如何更改用户密码
    ubuntu 14.04 返回到经典桌面方法
    ubuntu 信使(iptux) 创建桌面快捷方式
    Eclipse failed to get the required ADT version number from the sdk
    Eclipse '<>' operator is not allowed for source level below 1.7
  • 原文地址:https://www.cnblogs.com/AdvancePikachu/p/7606078.html
Copyright © 2011-2022 走看看