首页 > 学院 > 开发设计 > 正文

整理分享C#通过user32.dll模拟物理按键操作的代码

2019-11-17 02:47:27
字体:
来源:转载
供稿:网友
整理分享C#通过user32.dll模拟物理按键操作的代码

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

主代码:

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
上一篇:c# App.Config详解

下一篇:Lambda表达式图解

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表