C# 模拟键盘点击 作者:马育民 • 2024-08-11 21:48 • 阅读:10029 # 工具类 ``` internal class KeyboardUtil { /// /// 模拟键盘的方法 /// /// 按键的虚拟键值 /// 选项标志:0:表示按下,2:表示松开 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); } /// /// 导入模拟键盘的方法 /// /// 按键的虚拟键值 /// 扫描码,一般不用设置,用0代替就行 /// 选项标志:0:表示按下,2:表示松开 /// 一般设置为0 [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"); ``` 原文出处:https://malaoshi.top/show_1IX8DtlMvwUv.html