当前位置:   article > 正文

C#通过代码的方式模拟键盘按下_c# 模拟键盘输入

c# 模拟键盘输入

本文转自:

https://www.cnblogs.com/xielong/p/6763121.html

如何模拟键盘按键触发产生的事件,比如模拟按下Alt + F4 关闭当前程序,Ctrl+Shift 切换输入法等。可以通过win32api 键盘事件 keybd_event() 来实现

1、定义键盘按键对应得键码

  1. #region bVk参数 常量定义
  2. public const byte vbKeyLButton = 0x1; // 鼠标左键
  3. public const byte vbKeyRButton = 0x2; // 鼠标右键
  4. public const byte vbKeyCancel = 0x3; // CANCEL 键
  5. public const byte vbKeyMButton = 0x4; // 鼠标中键
  6. public const byte vbKeyBack = 0x8; // BACKSPACE 键 空格键
  7. public const byte vbKeyTab = 0x9; // TAB 键
  8. public const byte vbKeyClear = 0xC; // CLEAR 键
  9. public const byte vbKeyReturn = 0xD; // ENTER 键
  10. public const byte vbKeyShift = 0x10; // SHIFT 键
  11. public const byte vbKeyControl = 0x11; // CTRL 键
  12. public const byte vbKeyAlt = 18; // Alt 键 (键码18)
  13. public const byte vbKeyMenu = 0x12; // MENU 键
  14. public const byte vbKeyPause = 0x13; // PAUSE 键
  15. public const byte vbKeyCapital = 0x14; // CAPS LOCK 键
  16. public const byte vbKeyEscape = 0x1B; // ESC 键
  17. public const byte vbKeySpace = 0x20; // SPACEBAR 键
  18. public const byte vbKeyPageUp = 0x21; // PAGE UP 键
  19. public const byte vbKeyEnd = 0x23; // End 键
  20. public const byte vbKeyHome = 0x24; // HOME 键
  21. public const byte vbKeyLeft = 0x25; // LEFT ARROW 键
  22. public const byte vbKeyUp = 0x26; // UP ARROW 键
  23. public const byte vbKeyRight = 0x27; // RIGHT ARROW 键
  24. public const byte vbKeyDown = 0x28; // DOWN ARROW 键
  25. public const byte vbKeySelect = 0x29; // Select 键
  26. public const byte vbKeyPrint = 0x2A; // PRINT SCREEN 键
  27. public const byte vbKeyExecute = 0x2B; // EXECUTE 键
  28. public const byte vbKeySnapshot = 0x2C; // SNAPSHOT 键
  29. public const byte vbKeyDelete = 0x2E; // Delete 键
  30. public const byte vbKeyHelp = 0x2F; // HELP 键
  31. public const byte vbKeyNumlock = 0x90; // NUM LOCK 键
  32. //常用键 字母键A到Z
  33. public const byte vbKeyA = 65;
  34. public const byte vbKeyB = 66;
  35. public const byte vbKeyC = 67;
  36. public const byte vbKeyD = 68;
  37. public const byte vbKeyE = 69;
  38. public const byte vbKeyF = 70;
  39. public const byte vbKeyG = 71;
  40. public const byte vbKeyH = 72;
  41. public const byte vbKeyI = 73;
  42. public const byte vbKeyJ = 74;
  43. public const byte vbKeyK = 75;
  44. public const byte vbKeyL = 76;
  45. public const byte vbKeyM = 77;
  46. public const byte vbKeyN = 78;
  47. public const byte vbKeyO = 79 ;
  48. public const byte vbKeyP = 80 ;
  49. public const byte vbKeyQ = 81 ;
  50. public const byte vbKeyR = 82 ;
  51. public const byte vbKeyS = 83 ;
  52. public const byte vbKeyT = 84 ;
  53. public const byte vbKeyU = 85 ;
  54. public const byte vbKeyV = 86 ;
  55. public const byte vbKeyW = 87 ;
  56. public const byte vbKeyX = 88 ;
  57. public const byte vbKeyY = 89 ;
  58. public const byte vbKeyZ = 90 ;
  59. //数字键盘0到9
  60. public const byte vbKey0 = 48 ; // 0 键
  61. public const byte vbKey1 = 49 ; // 1 键
  62. public const byte vbKey2 = 50 ; // 2 键
  63. public const byte vbKey3 = 51 ; // 3 键
  64. public const byte vbKey4 = 52 ; // 4 键
  65. public const byte vbKey5 = 53 ; // 5 键
  66. public const byte vbKey6 = 54 ; // 6 键
  67. public const byte vbKey7 = 55 ; // 7 键
  68. public const byte vbKey8 = 56 ; // 8 键
  69. public const byte vbKey9 = 57 ; // 9 键
  70. public const byte vbKeyNumpad0 = 0x60 ; //0 键
  71. public const byte vbKeyNumpad1 = 0x61 ; //1 键
  72. public const byte vbKeyNumpad2 = 0x62 ; //2 键
  73. public const byte vbKeyNumpad3 = 0x63 ; //3 键
  74. public const byte vbKeyNumpad4 = 0x64 ; //4 键
  75. public const byte vbKeyNumpad5 = 0x65 ; //5 键
  76. public const byte vbKeyNumpad6 = 0x66 ; //6 键
  77. public const byte vbKeyNumpad7 = 0x67 ; //7 键
  78. public const byte vbKeyNumpad8 = 0x68 ; //8 键
  79. public const byte vbKeyNumpad9 = 0x69 ; //9 键
  80. public const byte vbKeyMultiply = 0x6A ; // MULTIPLICATIONSIGN(*)键
  81. public const byte vbKeyAdd = 0x6B ; // PLUS SIGN(+) 键
  82. public const byte vbKeySeparator = 0x6C ; // ENTER 键
  83. public const byte vbKeySubtract = 0x6D ; // MINUS SIGN(-) 键
  84. public const byte vbKeyDecimal = 0x6E ; // DECIMAL POINT(.) 键
  85. public const byte vbKeyDivide = 0x6F ; // DIVISION SIGN(/) 键
  86. //F1到F12按键
  87. public const byte vbKeyF1 = 0x70 ; //F1 键
  88. public const byte vbKeyF2 = 0x71 ; //F2 键
  89. public const byte vbKeyF3 = 0x72 ; //F3 键
  90. public const byte vbKeyF4 = 0x73 ; //F4 键
  91. public const byte vbKeyF5 = 0x74 ; //F5 键
  92. public const byte vbKeyF6 = 0x75 ; //F6 键
  93. public const byte vbKeyF7 = 0x76 ; //F7 键
  94. public const byte vbKeyF8 = 0x77 ; //F8 键
  95. public const byte vbKeyF9 = 0x78 ; //F9 键
  96. public const byte vbKeyF10 = 0x79 ; //F10 键
  97. public const byte vbKeyF11 = 0x7A ; //F11 键
  98. public const byte vbKeyF12 = 0x7B ; //F12 键
  99. #endregion

2、引用win32api键盘函数

  1. #region 引用win32api方法
  2. /// <summary>
  3. /// 导入模拟键盘的方法
  4. /// </summary>
  5. /// <param name="bVk" >按键的虚拟键值</param>
  6. /// <param name= "bScan" >扫描码,一般不用设置,用0代替就行</param>
  7. /// <param name= "dwFlags" >选项标志:0:表示按下,2:表示松开</param>
  8. /// <param name= "dwExtraInfo">一般设置为0</param>
  9. [DllImport("user32.dll")]
  10. public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
  11. #endregion

3、使用例子

2)按钮方法

  1. /// <summary>
  2. /// 默认按下ctrl+shift切换输入法
  3. /// </summary>
  4. /// <param name= sender ></param>
  5. /// <param name= e ></param>
  6. private void button1_Click(object sender, EventArgs e)
  7. {
  8. //模拟按下ctrl键
  9. keybd_event(vbKeyControl, 0,0,0);
  10. //模拟按下shift键
  11. keybd_event(vbKeyShift, 0, 0, 0);
  12. //松开按键ctrl
  13. keybd_event(vbKeyControl, 0, 2, 0);
  14. //松开按键shift
  15. keybd_event(vbKeyShift, 0, 2, 0);
  16. }
  17. /// <summary>
  18. /// 使用QQ的截图快捷按键(前提:开启QQ)
  19. /// </summary>
  20. /// <param name="sender"></param>
  21. /// <param name="e"></param>
  22. private void button2_Click(object sender, EventArgs e)
  23. {
  24. //模拟按下ctrl键
  25. keybd_event(vbKeyControl, 0, 0, 0);
  26. //模拟按下Alt键
  27. keybd_event(vbKeyAlt, 0, 0, 0);
  28. //模拟按下A键
  29. keybd_event(vbKeyA, 0, 0, 0);
  30. //模拟松开ctrl键
  31. keybd_event(vbKeyControl, 0, 2, 0);
  32. //模拟松开Alt键
  33. keybd_event(vbKeyAlt, 0, 2, 0);
  34. //模拟松开A键
  35. keybd_event(vbKeyA, 0, 2, 0);
  36. }
  37. /// <summary>
  38. /// 模拟 Alt+F4按键 关闭窗体程序
  39. /// </summary>
  40. /// <param name="sender"></param>
  41. /// <param name="e"></param>
  42. private void button3_Click(object sender, EventArgs e)
  43. {
  44. //模拟按下Alt键
  45. keybd_event(vbKeyAlt, 0, 0, 0);
  46. //模拟按下F4键
  47. keybd_event(vbKeyF4, 0, 0, 0);
  48. //松开按键Alt
  49. keybd_event(vbKeyAlt, 0, 2, 0);
  50. //松开按键F4
  51. keybd_event(vbKeyF4, 0, 2, 0);
  52. }
  53. /// <summary>
  54. /// 模拟Ctrl+Alt+Z按键 显示已最小化QQ界面
  55. /// </summary>
  56. /// <param name="sender"></param>
  57. /// <param name="e"></param>
  58. private void button4_Click(object sender, EventArgs e)
  59. {
  60. //模拟按下ctrl键
  61. keybd_event(vbKeyControl, 0, 0, 0);
  62. //模拟按下Alt键
  63. keybd_event(vbKeyAlt, 0, 0, 0);
  64. //模拟按下Z键
  65. keybd_event(vbKeyZ, 0, 0, 0);
  66. //模拟松开ctrl键
  67. keybd_event(vbKeyControl, 0, 2, 0);
  68. //模拟松开Alt键
  69. keybd_event(vbKeyAlt, 0, 2, 0);
  70. //模拟松开Z键
  71. keybd_event(vbKeyZ, 0, 2, 0);
  72. }

4、完整源码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Runtime.InteropServices;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace WindowsForms
  12. {
  13. public partial class Form4 : Form
  14. {
  15. public Form4()
  16. {
  17. InitializeComponent();
  18. }
  19. #region bVk参数 常量定义
  20. public const byte vbKeyLButton = 0x1; // 鼠标左键
  21. public const byte vbKeyRButton = 0x2; // 鼠标右键
  22. public const byte vbKeyCancel = 0x3; // CANCEL 键
  23. public const byte vbKeyMButton = 0x4; // 鼠标中键
  24. public const byte vbKeyBack = 0x8; // BACKSPACE 键
  25. public const byte vbKeyTab = 0x9; // TAB 键
  26. public const byte vbKeyClear = 0xC; // CLEAR 键
  27. public const byte vbKeyReturn = 0xD; // ENTER 键
  28. public const byte vbKeyShift = 0x10; // SHIFT 键
  29. public const byte vbKeyControl = 0x11; // CTRL 键
  30. public const byte vbKeyAlt = 18; // Alt 键 (键码18)
  31. public const byte vbKeyMenu = 0x12; // MENU 键
  32. public const byte vbKeyPause = 0x13; // PAUSE 键
  33. public const byte vbKeyCapital = 0x14; // CAPS LOCK 键
  34. public const byte vbKeyEscape = 0x1B; // ESC 键
  35. public const byte vbKeySpace = 0x20; // SPACEBAR 键
  36. public const byte vbKeyPageUp = 0x21; // PAGE UP 键
  37. public const byte vbKeyEnd = 0x23; // End 键
  38. public const byte vbKeyHome = 0x24; // HOME 键
  39. public const byte vbKeyLeft = 0x25; // LEFT ARROW 键
  40. public const byte vbKeyUp = 0x26; // UP ARROW 键
  41. public const byte vbKeyRight = 0x27; // RIGHT ARROW 键
  42. public const byte vbKeyDown = 0x28; // DOWN ARROW 键
  43. public const byte vbKeySelect = 0x29; // Select 键
  44. public const byte vbKeyPrint = 0x2A; // PRINT SCREEN 键
  45. public const byte vbKeyExecute = 0x2B; // EXECUTE 键
  46. public const byte vbKeySnapshot = 0x2C; // SNAPSHOT 键
  47. public const byte vbKeyDelete = 0x2E; // Delete 键
  48. public const byte vbKeyHelp = 0x2F; // HELP 键
  49. public const byte vbKeyNumlock = 0x90; // NUM LOCK 键
  50. //常用键 字母键A到Z
  51. public const byte vbKeyA = 65;
  52. public const byte vbKeyB = 66;
  53. public const byte vbKeyC = 67;
  54. public const byte vbKeyD = 68;
  55. public const byte vbKeyE = 69;
  56. public const byte vbKeyF = 70;
  57. public const byte vbKeyG = 71;
  58. public const byte vbKeyH = 72;
  59. public const byte vbKeyI = 73;
  60. public const byte vbKeyJ = 74;
  61. public const byte vbKeyK = 75;
  62. public const byte vbKeyL = 76;
  63. public const byte vbKeyM = 77;
  64. public const byte vbKeyN = 78;
  65. public const byte vbKeyO = 79 ;
  66. public const byte vbKeyP = 80 ;
  67. public const byte vbKeyQ = 81 ;
  68. public const byte vbKeyR = 82 ;
  69. public const byte vbKeyS = 83 ;
  70. public const byte vbKeyT = 84 ;
  71. public const byte vbKeyU = 85 ;
  72. public const byte vbKeyV = 86 ;
  73. public const byte vbKeyW = 87 ;
  74. public const byte vbKeyX = 88 ;
  75. public const byte vbKeyY = 89 ;
  76. public const byte vbKeyZ = 90 ;
  77. //数字键盘0到9
  78. public const byte vbKey0 = 48 ; // 0 键
  79. public const byte vbKey1 = 49 ; // 1 键
  80. public const byte vbKey2 = 50 ; // 2 键
  81. public const byte vbKey3 = 51 ; // 3 键
  82. public const byte vbKey4 = 52 ; // 4 键
  83. public const byte vbKey5 = 53 ; // 5 键
  84. public const byte vbKey6 = 54 ; // 6 键
  85. public const byte vbKey7 = 55 ; // 7 键
  86. public const byte vbKey8 = 56 ; // 8 键
  87. public const byte vbKey9 = 57 ; // 9 键
  88. public const byte vbKeyNumpad0 = 0x60 ; //0 键
  89. public const byte vbKeyNumpad1 = 0x61 ; //1 键
  90. public const byte vbKeyNumpad2 = 0x62 ; //2 键
  91. public const byte vbKeyNumpad3 = 0x63 ; //3 键
  92. public const byte vbKeyNumpad4 = 0x64 ; //4 键
  93. public const byte vbKeyNumpad5 = 0x65 ; //5 键
  94. public const byte vbKeyNumpad6 = 0x66 ; //6 键
  95. public const byte vbKeyNumpad7 = 0x67 ; //7 键
  96. public const byte vbKeyNumpad8 = 0x68 ; //8 键
  97. public const byte vbKeyNumpad9 = 0x69 ; //9 键
  98. public const byte vbKeyMultiply = 0x6A ; // MULTIPLICATIONSIGN(*)键
  99. public const byte vbKeyAdd = 0x6B ; // PLUS SIGN(+) 键
  100. public const byte vbKeySeparator = 0x6C ; // ENTER 键
  101. public const byte vbKeySubtract = 0x6D ; // MINUS SIGN(-) 键
  102. public const byte vbKeyDecimal = 0x6E ; // DECIMAL POINT(.) 键
  103. public const byte vbKeyDivide = 0x6F ; // DIVISION SIGN(/) 键
  104. //F1到F12按键
  105. public const byte vbKeyF1 = 0x70 ; //F1 键
  106. public const byte vbKeyF2 = 0x71 ; //F2 键
  107. public const byte vbKeyF3 = 0x72 ; //F3 键
  108. public const byte vbKeyF4 = 0x73 ; //F4 键
  109. public const byte vbKeyF5 = 0x74 ; //F5 键
  110. public const byte vbKeyF6 = 0x75 ; //F6 键
  111. public const byte vbKeyF7 = 0x76 ; //F7 键
  112. public const byte vbKeyF8 = 0x77 ; //F8 键
  113. public const byte vbKeyF9 = 0x78 ; //F9 键
  114. public const byte vbKeyF10 = 0x79 ; //F10 键
  115. public const byte vbKeyF11 = 0x7A ; //F11 键
  116. public const byte vbKeyF12 = 0x7B ; //F12 键
  117. #endregion
  118. #region 引用win32api方法
  119. /// <summary>
  120. /// 导入模拟键盘的方法
  121. /// </summary>
  122. /// <param name="bVk" >按键的虚拟键值</param>
  123. /// <param name= "bScan" >扫描码,一般不用设置,用0代替就行</param>
  124. /// <param name= "dwFlags" >选项标志:0:表示按下,2:表示松开</param>
  125. /// <param name= "dwExtraInfo">一般设置为0</param>
  126. [DllImport("user32.dll")]
  127. public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
  128. #endregion
  129. /// <summary>
  130. /// 默认按下ctrl+shift切换输入法
  131. /// </summary>
  132. /// <param name= sender ></param>
  133. /// <param name= e ></param>
  134. private void button1_Click(object sender, EventArgs e)
  135. {
  136. //模拟按下ctrl键
  137. keybd_event(vbKeyControl, 0,0,0);
  138. //模拟按下shift键
  139. keybd_event(vbKeyShift, 0, 0, 0);
  140. //松开按键ctrl
  141. keybd_event(vbKeyControl, 0, 2, 0);
  142. //松开按键shift
  143. keybd_event(vbKeyShift, 0, 2, 0);
  144. }
  145. /// <summary>
  146. /// 使用QQ的截图快捷按键(前提:开启QQ)
  147. /// </summary>
  148. /// <param name="sender"></param>
  149. /// <param name="e"></param>
  150. private void button2_Click(object sender, EventArgs e)
  151. {
  152. //模拟按下ctrl键
  153. keybd_event(vbKeyControl, 0, 0, 0);
  154. //模拟按下Alt键
  155. keybd_event(vbKeyAlt, 0, 0, 0);
  156. //模拟按下A键
  157. keybd_event(vbKeyA, 0, 0, 0);
  158. //模拟松开ctrl键
  159. keybd_event(vbKeyControl, 0, 2, 0);
  160. //模拟松开Alt键
  161. keybd_event(vbKeyAlt, 0, 2, 0);
  162. //模拟松开A键
  163. keybd_event(vbKeyA, 0, 2, 0);
  164. }
  165. /// <summary>
  166. /// 模拟 Alt+F4按键 关闭窗体程序
  167. /// </summary>
  168. /// <param name="sender"></param>
  169. /// <param name="e"></param>
  170. private void button3_Click(object sender, EventArgs e)
  171. {
  172. //模拟按下Alt键
  173. keybd_event(vbKeyAlt, 0, 0, 0);
  174. //模拟按下F4键
  175. keybd_event(vbKeyF4, 0, 0, 0);
  176. //松开按键Alt
  177. keybd_event(vbKeyAlt, 0, 2, 0);
  178. //松开按键F4
  179. keybd_event(vbKeyF4, 0, 2, 0);
  180. }
  181. /// <summary>
  182. /// 模拟Ctrl+Alt+Z按键 显示已最小化QQ界面
  183. /// </summary>
  184. /// <param name="sender"></param>
  185. /// <param name="e"></param>
  186. private void button4_Click(object sender, EventArgs e)
  187. {
  188. //模拟按下ctrl键
  189. keybd_event(vbKeyControl, 0, 0, 0);
  190. //模拟按下Alt键
  191. keybd_event(vbKeyAlt, 0, 0, 0);
  192. //模拟按下Z键
  193. keybd_event(vbKeyZ, 0, 0, 0);
  194. //模拟松开ctrl键
  195. keybd_event(vbKeyControl, 0, 2, 0);
  196. //模拟松开Alt键
  197. keybd_event(vbKeyAlt, 0, 2, 0);
  198. //模拟松开Z键
  199. keybd_event(vbKeyZ, 0, 2, 0);
  200. }
  201. }
  202. }

5、执行后效果图

1)模拟QQ截图按键

 好了,本文到此结束,如果本文对你有帮助,资助2毛钱作为鼓励呗,穷逼一个,就当筹个网费吧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/272508
推荐阅读
相关标签
  

闽ICP备14008679号