虚拟键盘可以模拟大多数点快捷键,使用起来非常方便实用。比如说Alt + F4 (关闭程序), LCtrl + LWin + D (新建桌面),LCtrl +LWin + F4 (删除桌面),LWin + D (显示桌面)等。通过快捷键,我们可以实现各种有趣点功能。

废话不多说,具体实现如下:


    /// <summary>
    /// 虚拟键盘
    /// </summary>
    public class VirtualKeyboard
    {
        /// <summary>
        /// 模拟发送键盘消息
        /// </summary>
        /// <param name="keys">虚拟键码</param>
        /// <param name="bScan">硬件扫描码,一般设置为0</param>
        /// <param name="dwFlags">函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY(0)则该键被按下,如果值为KEYEVENTF_KEYUP(2)则该按键被释放</param>
        /// <param name="dwExtraInfo">定义与击键相关的附加的32位值,通常为0</param>
        [DllImport("user32.dll", EntryPoint = "keybd_event")]
        private static extern void keybd_event(byte keys, byte bScan, int dwFlags, int dwExtraInfo);

        /// <summary>
        /// 发送单一按键
        /// </summary>
        /// <param name="key"></param>
        public static void SendKey(KeyboardKeys key)
        {
            keybd_event((byte)key, 0, 0, 0);
            keybd_event((byte)key, 0, 2, 0);
        }

        /// <summary>
        /// 发送组合键
        /// </summary>
        /// <param name="keys"></param>
        public static void SendCompositeKey(params KeyboardKeys[] keys)
        {
            foreach (var key in keys)
            {
                keybd_event((byte)key, 0, 0, 0);
            }

            foreach (var key in keys)
            {
                keybd_event((byte)key, 0, 2, 0);
            }
        }
    }

    public enum KeyboardKeys
    {
        //
        // 摘要:
        //     若要从一个密钥值中提取修饰符位掩码。
        Modifiers = -65536,
        //
        // 摘要:
        //     不按任何键。
        None = 0,
        //
        // 摘要:
        //     鼠标左键。
        LButton = 1,
        //
        // 摘要:
        //     鼠标右键按钮中。
        RButton = 2,
        //
        // 摘要:
        //     CANCEL 键。
        Cancel = 3,
        //
        // 摘要:
        //     鼠标中键 (三个按钮的鼠标)。
        MButton = 4,
        //
        // 摘要:
        //     第一个 x 鼠标按钮 (五个按钮的鼠标)。
        XButton1 = 5,
        //
        // 摘要:
        //     第二个鼠标按钮 (五个按钮的鼠标) x。
        XButton2 = 6,
        //
        // 摘要:
        //     BACKSPACE 键。
        Back = 8,
        //
        // 摘要:
        //     TAB 键。
        Tab = 9,
        //
        // 摘要:
        //     LINEFEED 键。
        LineFeed = 10,
        //
        // 摘要:
        //     CLEAR 键。
        Clear = 12,
        //
        // 摘要:
        //     RETURN 键。
        Return = 13,
        //
        // 摘要:
        //     ENTER 键。
        Enter = 13,
        //
        // 摘要:
        //     SHIFT 键。
        ShiftKey = 16,
        //
        // 摘要:
        //     CTRL 键。
        ControlKey = 17,
        //
        // 摘要:
        //     ALT 键。
        Menu = 18,
        //
        // 摘要:
        //     PAUSE 键。
        Pause = 19,
        //
        // 摘要:
        //     CAPS LOCK 键。
        Capital = 20,
        //
        // 摘要:
        //     CAPS LOCK 键。
        CapsLock = 20,
        //
        // 摘要:
        //     IME Kana 模式键。
        KanaMode = 21,
        //
        // 摘要:
        //     IME Hanguel 模式键。 (保留为了兼容; 使用HangulMode)
        HanguelMode = 21,
        //
        // 摘要:
        //     IME Hangul 模式键。
        HangulMode = 21,
        //
        // 摘要:
        //     IME Junja 模式键。
        JunjaMode = 23,
        //
        // 摘要:
        //     IME 最终模式键。
        FinalMode = 24,
        //
        // 摘要:
        //     IME Hanja 模式键。
        HanjaMode = 25,
        //
        // 摘要:
        //     IME Kanji 模式键。
        KanjiMode = 25,
        //
        // 摘要:
        //     ESC 键。
        Escape = 27,
        //
        // 摘要:
        //     IME convert 键。
        IMEConvert = 28,
        //
        // 摘要:
        //     IME nonconvert 键。
        IMENonconvert = 29,
        //
        // 摘要:
        //     IME 接受密钥,替换System.Windows.Forms.Keys.IMEAceept。
        IMEAccept = 30,
        //
        // 摘要:
        //     IME 接受密钥。 已过时,请System.Windows.Forms.Keys.IMEAccept相反。
        IMEAceept = 30,
        //
        // 摘要:
        //     IME 模式更改密钥。
        IMEModeChange = 31,
        //
        // 摘要:
        //     SPACEBAR 键。
        Space = 32,
        //
        // 摘要:
        //     PAGE UP 键。
        Prior = 33,
        //
        // 摘要:
        //     PAGE UP 键。
        PageUp = 33,
        //
        // 摘要:
        //     PAGE DOWN 键。
        Next = 34,
        //
        // 摘要:
        //     PAGE DOWN 键。
        PageDown = 34,
        //
        // 摘要:
        //     END 键。
        End = 35,
        //
        // 摘要:
        //     HOME 键。
        Home = 36,
        //
        // 摘要:
        //     LEFT ARROW 键。
        Left = 37,
        //
        // 摘要:
        //     UP ARROW 键。
        Up = 38,
        //
        // 摘要:
        //     RIGHT ARROW 键。
        Right = 39,
        //
        // 摘要:
        //     DOWN ARROW 键。
        Down = 40,
        //
        // 摘要:
        //     SELECT 键。
        Select = 41,
        //
        // 摘要:
        //     PRINT 键。
        Print = 42,
        //
        // 摘要:
        //     EXECUTE 键。
        Execute = 43,
        //
        // 摘要:
        //     PRINT SCREEN 键。
        Snapshot = 44,
        //
        // 摘要:
        //     PRINT SCREEN 键。
        PrintScreen = 44,
        //
        // 摘要:
        //     INS 键。
        Insert = 45,
        //
        // 摘要:
        //     DEL 键。
        Delete = 46,
        //
        // 摘要:
        //     HELP 键。
        Help = 47,
        //
        // 摘要:
        //     0 键。
        D0 = 48,
        //
        // 摘要:
        //     1 键。
        D1 = 49,
        //
        // 摘要:
        //     2 键。
        D2 = 50,
        //
        // 摘要:
        //     3 键。
        D3 = 51,
        //
        // 摘要:
        //     4 键。
        D4 = 52,
        //
        // 摘要:
        //     5 键。
        D5 = 53,
        //
        // 摘要:
        //     6 键。
        D6 = 54,
        //
        // 摘要:
        //     7 键。
        D7 = 55,
        //
        // 摘要:
        //     8 键。
        D8 = 56,
        //
        // 摘要:
        //     9 键。
        D9 = 57,
        //
        // 摘要:
        //     A 键。
        A = 65,
        //
        // 摘要:
        //     B 键。
        B = 66,
        //
        // 摘要:
        //     C 键。
        C = 67,
        //
        // 摘要:
        //     D 键。
        D = 68,
        //
        // 摘要:
        //     E 键。
        E = 69,
        //
        // 摘要:
        //     F 键。
        F = 70,
        //
        // 摘要:
        //     G 键。
        G = 71,
        //
        // 摘要:
        //     H 键。
        H = 72,
        //
        // 摘要:
        //     I 键。
        I = 73,
        //
        // 摘要:
        //     J 键。
        J = 74,
        //
        // 摘要:
        //     K 键。
        K = 75,
        //
        // 摘要:
        //     L 键。
        L = 76,
        //
        // 摘要:
        //     M 键。
        M = 77,
        //
        // 摘要:
        //     N 键。
        N = 78,
        //
        // 摘要:
        //     O 键。
        O = 79,
        //
        // 摘要:
        //     P 键。
        P = 80,
        //
        // 摘要:
        //     Q 键。
        Q = 81,
        //
        // 摘要:
        //     R 键。
        R = 82,
        //
        // 摘要:
        //     S 键。
        S = 83,
        //
        // 摘要:
        //     T 键。
        T = 84,
        //
        // 摘要:
        //     U 键。
        U = 85,
        //
        // 摘要:
        //     V 键。
        V = 86,
        //
        // 摘要:
        //     W 键。
        W = 87,
        //
        // 摘要:
        //     X 键。
        X = 88,
        //
        // 摘要:
        //     Y 键。
        Y = 89,
        //
        // 摘要:
        //     Z 键。
        Z = 90,
        //
        // 摘要:
        //     左 Windows 徽标键 (Microsoft Natural Keyboard)。
        LWin = 91,
        //
        // 摘要:
        //     右 Windows 徽标键 (Microsoft Natural Keyboard)。
        RWin = 92,
        //
        // 摘要:
        //     应用程序密钥 (Microsoft Natural Keyboard)。
        Apps = 93,
        //
        // 摘要:
        //     计算机休眠键。
        Sleep = 95,
        //
        // 摘要:
        //     数字键盘上的 0 键。
        NumPad0 = 96,
        //
        // 摘要:
        //     数字键盘上的 1 键。
        NumPad1 = 97,
        //
        // 摘要:
        //     数字键盘上的 2 键。
        NumPad2 = 98,
        //
        // 摘要:
        //     数字键盘上的 3 键。
        NumPad3 = 99,
        //
        // 摘要:
        //     数字键盘上的 4 键。
        NumPad4 = 100,
        //
        // 摘要:
        //     数字键盘上的 5 键。
        NumPad5 = 101,
        //
        // 摘要:
        //     数字键盘上的 6 键。
        NumPad6 = 102,
        //
        // 摘要:
        //     数字键盘上的 7 键。
        NumPad7 = 103,
        //
        // 摘要:
        //     数字键盘上的 8 键。
        NumPad8 = 104,
        //
        // 摘要:
        //     数字键盘上的 9 键。
        NumPad9 = 105,
        //
        // 摘要:
        //     乘号键。
        Multiply = 106,
        //
        // 摘要:
        //     加号键。
        Add = 107,
        //
        // 摘要:
        //     分隔符键。
        Separator = 108,
        //
        // 摘要:
        //     减号键。
        Subtract = 109,
        //
        // 摘要:
        //     句点键。
        Decimal = 110,
        //
        // 摘要:
        //     除号键。
        Divide = 111,
        //
        // 摘要:
        //     F1 键。
        F1 = 112,
        //
        // 摘要:
        //     F2 键。
        F2 = 113,
        //
        // 摘要:
        //     F3 键。
        F3 = 114,
        //
        // 摘要:
        //     F4 键。
        F4 = 115,
        //
        // 摘要:
        //     F5 键。
        F5 = 116,
        //
        // 摘要:
        //     F6 键。
        F6 = 117,
        //
        // 摘要:
        //     F7 键。
        F7 = 118,
        //
        // 摘要:
        //     F8 键。
        F8 = 119,
        //
        // 摘要:
        //     F9 键。
        F9 = 120,
        //
        // 摘要:
        //     F10 键。
        F10 = 121,
        //
        // 摘要:
        //     F11 键。
        F11 = 122,
        //
        // 摘要:
        //     F12 键。
        F12 = 123,
        //
        // 摘要:
        //     F13 键。
        F13 = 124,
        //
        // 摘要:
        //     F14 键。
        F14 = 125,
        //
        // 摘要:
        //     F15 键。
        F15 = 126,
        //
        // 摘要:
        //     F16 键。
        F16 = 127,
        //
        // 摘要:
        //     F17 键。
        F17 = 128,
        //
        // 摘要:
        //     F18 键。
        F18 = 129,
        //
        // 摘要:
        //     F19 键。
        F19 = 130,
        //
        // 摘要:
        //     F20 键。
        F20 = 131,
        //
        // 摘要:
        //     F21 键。
        F21 = 132,
        //
        // 摘要:
        //     F22 键。
        F22 = 133,
        //
        // 摘要:
        //     F23 键。
        F23 = 134,
        //
        // 摘要:
        //     F24 键。
        F24 = 135,
        //
        // 摘要:
        //     NUM LOCK 键。
        NumLock = 144,
        //
        // 摘要:
        //     SCROLL LOCK 键。
        Scroll = 145,
        //
        // 摘要:
        //     左的 SHIFT 键。
        LShiftKey = 160,
        //
        // 摘要:
        //     右 SHIFT 键。
        RShiftKey = 161,
        //
        // 摘要:
        //     左 CTRL 键。
        LControlKey = 162,
        //
        // 摘要:
        //     右 CTRL 键。
        RControlKey = 163,
        //
        // 摘要:
        //     左 ALT 键。
        LMenu = 164,
        //
        // 摘要:
        //     右 ALT 键。
        RMenu = 165,
        //
        // 摘要:
        //     浏览器后退键 (Windows 2000 或更高版本)。
        BrowserBack = 166,
        //
        // 摘要:
        //     浏览器前进键 (Windows 2000 或更高版本)。
        BrowserForward = 167,
        //
        // 摘要:
        //     浏览器刷新键 (Windows 2000 或更高版本)。
        BrowserRefresh = 168,
        //
        // 摘要:
        //     浏览器停止键 (Windows 2000 或更高版本)。
        BrowserStop = 169,
        //
        // 摘要:
        //     浏览器搜索键 (Windows 2000 或更高版本)。
        BrowserSearch = 170,
        //
        // 摘要:
        //     浏览器收藏键 (Windows 2000 或更高版本)。
        BrowserFavorites = 171,
        //
        // 摘要:
        //     浏览器主页键 (Windows 2000 或更高版本)。
        BrowserHome = 172,
        //
        // 摘要:
        //     卷静音键 (Windows 2000 或更高版本)。
        VolumeMute = 173,
        //
        // 摘要:
        //     音量降低键 (Windows 2000 或更高版本)。
        VolumeDown = 174,
        //
        // 摘要:
        //     音量增大键 (Windows 2000 或更高版本)。
        VolumeUp = 175,
        //
        // 摘要:
        //     媒体下一曲目键 (Windows 2000 或更高版本)。
        MediaNextTrack = 176,
        //
        // 摘要:
        //     媒体上一曲目键 (Windows 2000 或更高版本)。
        MediaPreviousTrack = 177,
        //
        // 摘要:
        //     媒体停止键 (Windows 2000 或更高版本)。
        MediaStop = 178,
        //
        // 摘要:
        //     在媒体播放暂停键 (Windows 2000 或更高版本)。
        MediaPlayPause = 179,
        //
        // 摘要:
        //     启动邮件键 (Windows 2000 或更高版本)。
        LaunchMail = 180,
        //
        // 摘要:
        //     选择媒体键 (Windows 2000 或更高版本) 中。
        SelectMedia = 181,
        //
        // 摘要:
        //     启动应用程序一个键 (Windows 2000 或更高版本)。
        LaunchApplication1 = 182,
        //
        // 摘要:
        //     启动应用程序两个键 (Windows 2000 或更高版本)。
        LaunchApplication2 = 183,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 分号键。
        OemSemicolon = 186,
        //
        // 摘要:
        //     OEM 1 键。
        Oem1 = 186,
        //
        // 摘要:
        //     OEM 加上任何国家/地区键盘 (Windows 2000 或更高版本) 上的密钥。
        Oemplus = 187,
        //
        // 摘要:
        //     任何国家/地区键盘 (Windows 2000 或更高版本) 上的 OEM 逗号键。
        Oemcomma = 188,
        //
        // 摘要:
        //     OEM 减号键 (Windows 2000 或更高版本) 任何国家/地区键盘上。
        OemMinus = 189,
        //
        // 摘要:
        //     任何国家/地区键盘 (Windows 2000 或更高版本) 上的 OEM 期间键。
        OemPeriod = 190,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 问号键。
        OemQuestion = 191,
        //
        // 摘要:
        //     OEM 2 键。
        Oem2 = 191,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 颚化符键。
        Oemtilde = 192,
        //
        // 摘要:
        //     OEM 3 键。
        Oem3 = 192,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 左大括号键。
        OemOpenBrackets = 219,
        //
        // 摘要:
        //     OEM 4 键。
        Oem4 = 219,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 管道键。
        OemPipe = 220,
        //
        // 摘要:
        //     OEM 5 键。
        Oem5 = 220,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 右大括号键。
        OemCloseBrackets = 221,
        //
        // 摘要:
        //     OEM 6 键。
        Oem6 = 221,
        //
        // 摘要:
        //     OEM 意见/双精度型引号密钥美国标准键盘 (Windows 2000 或更高版本) 上。
        OemQuotes = 222,
        //
        // 摘要:
        //     OEM 7 键。
        Oem7 = 222,
        //
        // 摘要:
        //     OEM 8 键。
        Oem8 = 223,
        //
        // 摘要:
        //     OEM 尖括号或 RT 102 键键盘 (Windows 2000 或更高版本) 上的反斜杠键。
        OemBackslash = 226,
        //
        // 摘要:
        //     OEM 102 键。
        Oem102 = 226,
        //
        // 摘要:
        //     PROCESS 键键中。
        ProcessKey = 229,
        //
        // 摘要:
        //     用于传递 Unicode 字符,就像它们是击键一样。 Packet 键值是用于非键盘输入方法的 32 位虚拟密钥值的低位字。
        Packet = 231,
        //
        // 摘要:
        //     ATTN 键。
        Attn = 246,
        //
        // 摘要:
        //     CRSEL 键。
        Crsel = 247,
        //
        // 摘要:
        //     EXSEL 键。
        Exsel = 248,
        //
        // 摘要:
        //     ERASE EOF 键。
        EraseEof = 249,
        //
        // 摘要:
        //     播放键。
        Play = 250,
        //
        // 摘要:
        //     缩放键。
        Zoom = 251,
        //
        // 摘要:
        //     留待将来使用的常数。
        NoName = 252,
        //
        // 摘要:
        //     PA1 键。
        Pa1 = 253,
        //
        // 摘要:
        //     CLEAR 键。
        OemClear = 254,
        //
        // 摘要:
        //     从一个密钥值中提取键代码的位屏蔽。
        KeyCode = 65535,
        //
        // 摘要:
        //     SHIFT 修改键。
        Shift = 65536,
        //
        // 摘要:
        //     CTRL 修改键。
        Control = 131072,
        //
        // 摘要:
        //     ALT 修改键。
        Alt = 262144
    }

本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/%E5%A6%82%E4%BD%95%E6%A8%A1%E6%8B%9F%E9%94%AE%E7%9B%98%E6%8C%89%E9%94%AE.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系