C# 模拟键盘点击

工具类

internal class KeyboardUtil
{
    /// <summary>
    /// 模拟键盘的方法
    /// </summary>
    /// <param name="key" >按键的虚拟键值</param>
    /// <param name= "dwFlags" >选项标志:0:表示按下,2:表示松开</param>
    private static void keydownup(string key, uint dwFlags)
    {
        if (equalsIgnoreCase(key, "ctrl"))
        {
            keybd_event(Keys.ControlKey, 0, dwFlags, 0);
        }
        else if (equalsIgnoreCase(key, "alt"))
        {
            keybd_event(Keys.Menu, 0, dwFlags, 0);
        }
        else if (equalsIgnoreCase(key, "shift"))
        {
            keybd_event(Keys.ShiftKey, 0, dwFlags, 0);
        }
        else
        {

            foreach (Keys myCode in Enum.GetValues(typeof(Keys)))
            {
                string strName = Enum.GetName(typeof(Keys), myCode);//获取名称
                if (equalsIgnoreCase(strName, key))
                {
                    keybd_event(myCode, 0, dwFlags, 0);
                }

            }
        }
    }
    // 根据按键名模拟按下,如:a,ctrl+a
    public static void keyDown(string key)
    {
        keydownup(key, 0);
    }
    // 根据按键名模拟弹起,如:a,ctrl+a
    public static void keyUp(string key)
    {
        keydownup(key, 2);
    }
    // 根据键码模拟按下
    public static void keyCodeDown(int keyCode)
    {
        keybd_event((Keys)keyCode, 0, 0, 0);

    }
    // 根据键码模拟弹起
    public static void keyCodeUp(int keyCode)
    {
        keybd_event((Keys)keyCode, 0, 2, 0);
    }

    /// <summary>
    /// 导入模拟键盘的方法
    /// </summary>
    /// <param name="bVk" >按键的虚拟键值</param>
    /// <param name= "bScan" >扫描码,一般不用设置,用0代替就行</param>
    /// <param name= "dwFlags" >选项标志:0:表示按下,2:表示松开</param>
    /// <param name= "dwExtraInfo">一般设置为0</param>
    [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
    public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);

    /*
        * 忽略大小写比较字符串
        */
    private static bool equalsIgnoreCase(string a, string b)
    {
        return a.Equals(b, StringComparison.OrdinalIgnoreCase);
    }
}

使用

根据keycode模拟键盘按下

KeyboardUtil.keyCodeDown(87); // 模拟按下W

根据按键名模拟按下

KeyboardUtil.keydown("a"); // 模拟按下a键

模拟按下组合键

模拟按下 ctrl + a:

KeyboardUtil.keydown("ctrl");
KeyboardUtil.keydown("a");
KeyboardUtil.keyup("a");
KeyboardUtil.keyup("ctrl");