key_event 键盘模拟(转集)

  1. ''键盘表
  2. 'VB中的键码 '常数'键码值'描述
  3. Const vbKeyLButton = 1  '鼠标左键
  4. Const vbKeyRButton = 2  '鼠标右键
  5. Const vbKeyCancel = 3 'CANCEL 键
  6. Const vbKeyMButton = 4  '鼠标中键
  7. Const vbKeyBack = 8 'Backspace 键
  8. Const vbKeyTab = 9  'TAB 键
  9. Const vbKeyClear = 12 'CLEAR 键
  10. Const vbKeyReturn = 13  'Enter 键
  11. Const vbKeyShift = 16 'Shift 键
  12. Const vbKeyConterol = 17 'Ctrl 键
  13. Const vbKeyMenu = 18 '菜单键
  14. Const vbKeyPause = 19 'PAUSE 键
  15. Const vbKeyCapital = 20 'CAPS   'LOCK 键
  16. Const vbKeyEscape = 27  'ESC 键
  17. Const vbKeySpace = 32 'SPACEBAR 键
  18. Const vbKeyPageUp = 33  'PAGEUP 键
  19. Const vbKeyPageDown = 34 'PAGEDOWN 键
  20. Const vbKeyEnd = 35 'END 键
  21. Const vbKeyHome = 36 'HOME 键
  22. Const vbKeyLeft = 37 'LEFT   'ARROW 键←
  23. Const vbKeyUp = 38  'UP 'ARROW 键↑
  24. Const vbKeyRight = 39 'RIGHT  'ARROW 键→
  25. Const vbKeyDown = 40 'DOWN   'ARROW 键↓
  26. Const vbKeySelect = 41  'SELECT 键
  27. Const vbKeyPrint = 42 'PRINT  'SCREEN 键
  28. Const vbKeyExecute = 43 'EXECUTE 键
  29. Const vbKeySnapshot = 44 'SNAP   'SHOT 键
  30. Const vbKeyInser = 45 'INSERT 键
  31. Const vbKeyDelete = 46  'DELETE 键
  32. Const vbKeyHelp = 47 'HELP 键
  33. Const vbKey0 = 48 '0 键
  34. Const vbKey1 = 49 '1 键
  35. Const vbKey2 = 50 '2 键
  36. Const vbKey3 = 51 '3 键
  37. Const vbKey4 = 52 '4 键
  38. Const vbKey5 = 53 '5 键
  39. Const vbKey6 = 54 '6 键
  40. Const vbKey7 = 55 '7 键
  41. Const vbKey8 = 56 '8 键
  42. Const vbKey9 = 57 '9 键
  43. Const vbKeyA = 65 'A 键
  44. Const vbKeyB = 66 'B 键
  45. Const vbKeyC = 67 'C 键
  46. Const vbKeyD = 68 'D 键
  47. Const vbKeyE = 69 'E 键
  48. Const vbKeyF = 70 'F 键
  49. Const vbKeyG = 71 'G 键
  50. Const vbKeyH = 72 'H 键
  51. Const vbKeyI = 73 'I 键
  52. Const vbKeyJ = 74 'J 键
  53. Const vbKeyK = 75 'K 键
  54. Const vbKeyL = 76 'L 键
  55. Const vbKeyM = 77 'M 键
  56. Const vbKeyN = 78 'N 键
  57. Const vbKeyO = 79 'O 键
  58. Const vbKeyP = 80 'P 键
  59. Const vbKeyQ = 81 'Q 键
  60. Const vbKeyR = 82 'R 键
  61. Const vbKeyS = 83 'S 键
  62. Const vbKeyT = 84 'T 键
  63. Const vbKeyU = 85 'U 键
  64. Const vbKeyV = 86 'V 键
  65. Const vbKeyW = 87 'W 键
  66. Const vbKeyX = 88 'X 键
  67. Const vbKeyY = 89 'Y 键
  68. Const vbKeyZ = 90 'Z 键
  69. Const vbKeyNum0 = 96 '0 键   '(在数字小键盘上)
  70. Const vbKeyNum1 = 97 '1 键   '(在数字小键盘上)
  71. Const vbKeyNum2 = 98 '2 键   '(在数字小键盘上)
  72. Const vbKeyNum3 = 99 '3 键   '(在数字小键盘上)
  73. Const vbKeyNum4 = 100 '4 键   '(在数字小键盘上)
  74. Const vbKeyNum5 = 101 '5 键   '(在数字小键盘上)
  75. Const vbKeyNum6 = 102 '6 键   '(在数字小键盘上)
  76. Const vbKeyNum7 = 103 '7 键   '(在数字小键盘上)
  77. Const vbKeyNum8 = 104 '8 键   '(在数字小键盘上)
  78. Const vbKeyNum9 = 105 '9 键   '(在数字小键盘上)
  79. Const vbKeyMultiply = 106 '乘号(*) 键
  80. Const vbKeyAdd = 107 '加号(+) 键
  81. Const vbKeySeparator = 108  'Enter键(在数字小键盘上)
  82. Const vbKeySubtract = 109 '减号(-) 键
  83. Const vbKeyDecimal = 110 '小数点(.) 键
  84. Const vbKeyDivide = 111 '除号(/) 键
  85. Const vbKeyF1 = 112 'F1 键
  86. Const vbKeyF2 = 113 'F2 键
  87. Const vbKeyF3 = 114 'F3 键
  88. Const vbKeyF4 = 115 'F4 键
  89. Const vbKeyF5 = 116 'F5 键
  90. Const vbKeyF6 = 117     'F6 键
  91. Const vbKeyF7 = 118 'F7 键
  92. Const vbKeyF8 = 119 'F8 键
  93. Const vbKeyF9 = 120 'F9 键
  94. Const vbKeyF10 = 121 'F10 键
  95. Const vbKeyF11 = 122 'F11 键
  96. Const vbKeyF12 = 123 'F12 键
  97. Const vbKeyF13 = 124 'F13 键
  98. Const vbKeyF14 = 125 'F14 键
  99. Const vbKeyF15 = 126 'F15 键
  100. Const vbKeyF16 = 127 'F16 键
  101. Const vbKeyNumlock = 144 'NUM    'LOCK 键    '
  102. ''
  103. Const KEYEVENTF_KEYUP = &H2
  104. ''
  105. Private Declare Sub keybd_event Lib "user32" (ByVal bVk As ByteByVal Scan As ByteByVal dwFlags As LongByVal dwExtraInfo As Long)
  106. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As LongAs Integer
  107. Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As LongByVal wMapType As LongAs Long    '计算扫描码
  108. Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As IntegerAs Integer    '这个比较正确
  109. ''休眠
  110. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  111. ''输入法相关
  112. Private Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As LongAs Long   '所有输入法
  113. Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As LongByVal lpsz As StringByVal uBufLen As LongAs Long
  114. Private Declare Function ImmIsIME Lib "imm32.dll" (ByVal hkl As LongAs Long   '中文输入法
  115. Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As LongByVal flags As LongAs Long   '使用输入法
  116. Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As LongAs Long    '取输入法   '0当前
  117. Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As StringAs Long
  118. Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As StringByVal flags As LongAs Long
  119.           
  120.           Const KLF_REORDER = &H8
  121.           Private NoOfKBDLayout     As Long, i       As Long, j       As Long
  122.           Private hKB(24)     As Long, BuffLen       As Long
  123.           Private Buff     As String
  124.           Private RetStr     As String
  125.           Private RetCount     As Long
  126.           Private kln     As String
  127.           Private hCurKBDLayout As Variant
  128.           
  129. ''换成英文输入法
  130. Private Sub set_kb_en()
  131.           Buff = String(255, 0)
  132.           hCurKBDLayout = GetKeyboardLayout(0)       '取得目前的输入法
  133.           NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0))         '取得所有输入法
  134.           
  135.           For i = 1 To NoOfKBDLayout
  136.             If ImmIsIME(hKB(i - 1)) = 1 Then               '中文输入法
  137.                 BuffLen = 255
  138.                 RetCount = ImmGetDescription(hKB(i - 1), Buff, BuffLen)
  139.                 RetStr = Left(Buff, RetCount)
  140.                 Debug.Print i & ":" & RetStr
  141.             Else
  142.                 RetStr = "English   (American)"       '英文输入法
  143.                 Debug.Print i, RetStr
  144.                 ActivateKeyboardLayout GetKeyboardLayout(hKB(i - 1)), 0       '使用英文输入法
  145.             End If
  146.           Next
  147. End Sub
  148. ''换成原输入法
  149. Private Sub set_kb_re()
  150.           'ActivateKeyboardLayout hCurKBDLayout, 0       '恢复原来的输入法
  151. End Sub
  152. ''输入一个字符  ,一串字符
  153. Public Function set_key(key_char As String)
  154.     Dim isUper As Boolean, isCapital As Boolean, isShift As Boolean
  155.     Dim key_CH As String
  156.     
  157.     key_CH = Left(key_char, 1)
  158.     isCapital = GetKeyState(vbKeyCapital)       '大写状态
  159.     '相异就得SHIFT,针对字母
  160.     isShift = IIf(Asc(key_CH) >= 65 And Asc(key_CH) <= 90 And isCapital = FalseTrueFalse)
  161.     isShift = isShift Or IIf(Asc(key_CH) >= Asc("a"And Asc(key_CH) <= Asc("z"And isCapital = TrueTrueFalse)
  162.     
  163.     
  164.     If Len(key_char) = 0 Then Call set_kb_re: Exit Function     '无字符退出
  165.     
  166.     
  167.     
  168.     key_CH = Asc(UCase(key_CH)) 'vkey
  169.     'hCurKBDLayout = GetKeyboardLayout(0)       '取得目前的输入法
  170.     'Debug.Print ImmGetDescription(hCurKBDLayout, Buff, 255)
  171.     'If key_CH < 128 Then Debug.Print IMEStatus()
  172.     If isUper Xor isCapital Then '锁定与字符状态相异则用SHIFT
  173.         keybd_event vbKeyShift, MapVirtualKey(vbKeyShift, 0), 0, 0
  174.         Sleep 5
  175.     End If
  176.     keybd_event key_CH, MapVirtualKey(key_CH, 0), 0, 0
  177.     Sleep 10
  178.     
  179.     
  180.     ''弹起
  181.     keybd_event key_CH, MapVirtualKey(key_CH, 0), KEYEVENTF_KEYUP, 0
  182.         Sleep 5
  183.     If isUper Xor isCapital Then '锁定与字符状态相异则用SHIFT
  184.         keybd_event vbKeyShift, MapVirtualKey(vbKeyShift, 0), KEYEVENTF_KEYUP, 0
  185.         Sleep 5
  186.     End If
  187.     
  188.     If Len(key_char) = 1 Then set_key = Chr(key_CH):  Call set_kb_re: Exit Function '单字符退出
  189.     set_key = Chr(key_CH) & set_key(Mid(key_char, 2))   '多字符继续
  190. End Function

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵易联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值