当前位置:文档之家› VB完美模拟键盘输入

VB完美模拟键盘输入

'=============全功能模拟键盘鼠标操作(一)----模拟键盘进行按键或信息录入操作。范围:任意数字、字母的组合,模拟过程:逐个发送连续字符串中键名信息================================
'作者: ghong3298226 (原创)
'作者QQ:87732850
'修改:零点lockey
'修改QQ:11958829
Private Type POINTAPI 'API座标数据类型
X As Long
Y As Long
End Type

'▼获得前台窗口句柄
Private Declare Function GetForegroundWindow Lib "user32" () As Long
'▼设置前台窗口
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
'▼获得一个窗口线程的ID
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
'▼获得当前程序线程的ID
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
'▼AttachThreadInput:线程连接。通常,系统内的每个线程都有自己的输入队列。本函数(既“连接线程输入函数”)
'允许线程和进程共享输入队列。连接了线程后,输入焦点、窗口激活、鼠标捕获、键盘状态以及输入队列状态都会进入共享状态。
'调用这个函数时,会重设键盘状态。
Private Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long
'▼该函数检取光标的位置,以屏幕坐标表示 。
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
'▼该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'▼获得具有输入焦点的窗口句柄
Private Declare Function GetFocus Lib "user32" () As Long
'▼设置焦点窗口。
Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long

'▼插入消息队列。
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'▼该函数获得包含指定点的窗口的句柄
Private Declare Function WindowFromPointXY Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
'▼该函数将256个虚拟键的状态拷贝到指定的缓冲区中。
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long

'▼该函数检取指定虚拟键的状态。该状态指定此键是UP状态,DOWN状态,还是被触发的(开关每次按下此键时进行切换)。
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
'▼该函数使过程休眠以毫秒计

的用户定义时间。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'Private Declare Function keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'参数bVk表示要模拟的按键的虚拟码,bScan表示该按键的扫描码(一般可以传0),dwFlags表示是按下键还是释放键(按下键为0,释放键为2),dwExtraInfo是扩展标志,一般没有用。
'▼键码常量表
Private Const KEYEVENTF_KEYUP = &H2
Public Const VK_LBUTTON = &H1
Public Const VK_RBUTTON = &H2
Public Const VK_CANCEL = &H3
Public Const VK_MBUTTON = &H4
Public Const VK_BACK = &H8
Public Const VK_TAB = &H9
Public Const VK_CLEAR = &HC
Public Const VK_RETURN = &HD
Public Const VK_SHIFT = &H10
Public Const VK_CONTROL = &H11
Public Const VK_MENU = &H12
Public Const VK_PAUSE = &H13
Public Const VK_CAPITAL = &H14
Public Const VK_ESCAPE = &H1B
Public Const VK_SPACE = &H20
Public Const VK_PRIOR = &H21
Public Const VK_NEXT = &H22
Public Const VK_END = &H23
Public Const VK_HOME = &H24
Public Const VK_LEFT = &H25
Public Const VK_UP = &H26
Public Const VK_RIGHT = &H27
Public Const VK_DOWN = &H28
Public Const VK_Select = &H29
Public Const VK_PRINT = &H2A
Public Const VK_EXECUTE = &H2B
Public Const VK_SNAPSHOT = &H2C
Public Const VK_Insert = &H2D
Public Const VK_Delete = &H2E
Public Const VK_HELP = &H2F
Public Const VK_0 = &H30
Public Const VK_1 = &H31
Public Const VK_2 = &H32
Public Const VK_3 = &H33
Public Const VK_4 = &H34
Public Const VK_5 = &H35
Public Const VK_6 = &H36
Public Const VK_7 = &H37
Public Const VK_8 = &H38
Public Const VK_9 = &H39
Public Const VK_A = &H41
Public Const VK_B = &H42
Public Const VK_C = &H43
Public Const VK_D = &H44
Public Const VK_E = &H45
Public Const VK_F = &H46
Public Const VK_G = &H47
Public Const VK_H = &H48
Public Const VK_I = &H49
Public Const VK_J = &H4A
Public Const VK_K = &H4B
Public Const VK_L = &H4C
Public Const VK_M = &H4D
Public Const VK_N = &H4E
Public Const VK_O = &H4F
Public Const VK_P = &H50
Public Const VK_Q = &H51
Public Const VK_R = &H52
Public Const VK_S = &H53
Public Const VK_T = &H54
Public Const VK_U = &H55
Public Const VK_V = &H56
Public Const VK_W = &H57
Public Const VK_X = &H58
Public Const VK_Y = &H59
Public Const VK_Z = &H5A
Public Const VK_STARTKEY = &H5B
Public Const VK_CONTEXTKEY = &H5D
Public Const VK_NUMPAD0 = &H60
Public Const VK_NUMPAD1 = &H61
Public Const VK_NUMPAD2 = &H62
Public Const VK_NUMPAD3 = &H63
Public Const VK_NUMPAD4 = &H64
Public Const VK_NUMPAD5 = &H65
Public Const VK_NUMPAD6 = &H66
Public Const VK_NUMPAD7 = &H67
Public Const VK_NUMPAD8 = &H

68
Public Const VK_NUMPAD9 = &H69
Public Const VK_MULTIPLY = &H6A
Public Const VK_ADD = &H6B
Public Const VK_SEPARATOR = &H6C
Public Const VK_SUBTRACT = &H6D
Public Const VK_DECIMAL = &H6E
Public Const VK_DIVIDE = &H6F
Public Const VK_F1 = &H70
Public Const VK_F2 = &H71
Public Const VK_F3 = &H72
Public Const VK_F4 = &H73
Public Const VK_F5 = &H74
Public Const VK_F6 = &H75
Public Const VK_F7 = &H76
Public Const VK_F8 = &H77
Public Const VK_F9 = &H78
Public Const VK_F10 = &H79
Public Const VK_F11 = &H7A
Public Const VK_F12 = &H7B
Public Const VK_F13 = &H7C
Public Const VK_F14 = &H7D
Public Const VK_F15 = &H7E
Public Const VK_F16 = &H7F
Public Const VK_F17 = &H80
Public Const VK_F18 = &H81
Public Const VK_F19 = &H82
Public Const VK_F20 = &H83
Public Const VK_F21 = &H84
Public Const VK_F22 = &H85
Public Const VK_F23 = &H86
Public Const VK_F24 = &H87
Public Const VK_NUMLOCK = &H90
Public Const VK_OEM_SCROLL = &H91
Public Const VK_OEM_1 = &HBA
Public Const VK_OEM_PLUS = &HBB
Public Const VK_OEM_COMMA = &HBC
Public Const VK_OEM_MINUS = &HBD
Public Const VK_OEM_PERIOD = &HBE
Public Const VK_OEM_2 = &HBF
Public Const VK_OEM_3 = &HC0
Public Const VK_OEM_4 = &HDB
Public Const VK_OEM_5 = &HDC
Public Const VK_OEM_6 = &HDD
Public Const VK_OEM_7 = &HDE
Public Const VK_OEM_8 = &HDF
Public Const VK_ICO_F17 = &HE0
Public Const VK_ICO_F18 = &HE1
Public Const VK_OEM102 = &HE2
Public Const VK_ICO_HELP = &HE3
Public Const VK_ICO_00 = &HE4
Public Const VK_ICO_CLEAR = &HE6
Public Const VK_OEM_RESET = &HE9
Public Const VK_OEM_JUMP = &HEA
Public Const VK_OEM_PA1 = &HEB
Public Const VK_OEM_PA2 = &HEC

Private Const WM_KEYDOWN = &H100 '按下键盘按键
Private Const WM_KEYUP = &H101 '弹起键盘按键

Private Const WM_LBUTTONDOWN = &H201 '鼠标左键按下
Private Const WM_LBUTTONUP = &H202 '鼠标左键弹起
Private Const WM_LBUTTONDBLCLK = &H203 '鼠标左键双击

Private Const WM_RBUTTONDOWN = &H204 '鼠标右键按下
Private Const WM_RBUTTONUP = &H205 '鼠标右键弹起
Private Const WM_RBUTTONDBLCLK = &H206 '鼠标右键双击

Private Const WM_MBUTTONDBLCLK = &H209 '鼠标中间键双击
Private Const WM_MBUTTONDOWN = &H207 '鼠标中间键按下
Private Const WM_MBUTTONUP = &H208 '鼠标中间键弹起

Private Const WM_MOUSEMOVE = &H200 '鼠标移动常数

'----自定义键盘状态常量-----
Private Const GAKB_LOCKED = &HFF80 '按键锁定状态。
Private Const GAKB_KEYDOWN = &H80 '按键按下状态。
Public Const strPerfact = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"


Public Function SimKey(ByVal cKeyName As String, nKey) As Boolean
'----模拟单个键盘按键操作,cKeyName:要操作的按键名(如若模拟键为小键盘上的按键应用此格式:"小键盘,8")----


End Function

Public Function SimMouse(ByVal nByWM_Const As Long, Optional ByVal nX As Long, Optional ByVal

nY As Long) As Boolean
'----模拟鼠标按键操作:nByWM_Const:鼠标动作,参见WM开头的常量---------------
'------------------------------------------nX,nY 指定鼠标操作的座标,若为0则模拟操作座标为当前鼠标光标所在座标。-----


End Function
Public Function Sim() As String
CreateIExprSrvObj 0, 4, 0
'----模拟输入文本:cText 进行模拟录入的字符串。函数成功返回一个空字符串,失败返回模拟失败的具体信息--------
Dim nFocusHwnd As Long, cLoseMsg As String, nWinID As Long, nMeID As Long, cSent As String

'获得具有输入焦点的窗口句柄。
nWinID = GetWindowThreadProcessId(GetForegroundWindow(), vbNull) '获取并创建前台窗口的线程。
nMeID = GetCurrentThreadId '获得本程序线程ID
Call AttachThreadInput(nWinID, nMeID, True) '进行线程贴附
nFocusHwnd = GetFocus() '获得具有输入焦点窗口的句柄。

For i = 1 To 255 Step 1 '发送信息。
DoEvents
'发送的字母只能为大写,所以字母一律转成大写再发送。输出的大小写由大写锁定键来决定。且这个转换对其它字符无影响。
If PostMessage(nFocusHwnd, WM_KEYDOWN, i, 0) = 0 Then
cLoseMsg = cLoseMsg & cSent '函数失败时收集失败信息。
End If
Sleep 1
Next
Call AttachThreadInput(nWinID, nMeID, False) '解除线程贴附。

Call LockedVK_KEY(VK_CAPITAL, False)
End Function
Public Function SimInputText(ByVal cText As String) As String
'----模拟输入文本:cText 进行模拟录入的字符串。函数成功返回一个空字符串,失败返回模拟失败的具体信息--------
Dim nFocusHwnd As Long, nWinID As Long, nMeID As Long, cSent As String
Dim i As Integer
Dim bolZhenggui As Boolean
Dim strTemp As String
'获得具有输入焦点的窗口句柄。
nWinID = GetWindowThreadProcessId(GetForegroundWindow(), vbNull) '获取并创建前台窗口的线程。
nMeID = GetCurrentThreadId '获得本程序线程ID
Call AttachThreadInput(nWinID, nMeID, True) '进行线程贴附
nFocusHwnd = GetFocus() '获得具有输入焦点窗口的句柄。
Call AttachThreadInput(nWinID, nMeID, False)

For i = 1 To Len(cText)
strTemp = Mid(cText, i, 1)
If InStr(strPerfact, strTemp) <> 0 Then
bolZhenggui = True
Else
bolZhenggui = False
End If

If bolZhenggui = True Then
Call Mafan(strTemp)
Sleep 1: DoEvents
Else
Call BigMafan(strTemp)
Sleep 1: DoEvents
End If
Next i


End Function
Private Function ShiftKey(ByVal vKeyCoad As Long) As Long '上档键输入
nFocusHwnd = GetFocus()
keybd_ev

ent VK_SHIFT, 0, 0, 0 '按下Ctrl键
keybd_event vKeyCoad, 0, 0, 0 '按下C键
Sleep 1 '延时500毫秒
keybd_event vKeyCoad, 0, 2, 0 '释放C键
keybd_event VK_SHIFT, 0, 2, 0 '释放Ctrl键
End Function

Private Function PressKey(ByVal vKeyCoad As Long) As Long
nFocusHwnd = GetFocus()
Call PostMessage(nFocusHwnd, WM_KEYDOWN, vKeyCoad, 0) '小写字母及数字,非上档键
End Function
Private Function GetMousePointWindowHwnd() As Long '获得鼠标所在座标下窗口的位置。
Dim xy As POINTAPI '声明变量类型
GetCursorPos xy '获得当前鼠标光标座标。
aHwnd = WindowFromPointXY(xy.X, xy.Y) '取得当前鼠标坐标下窗口的句柄
GetMousePointWindowHwnd = aHwnd
End Function
Public Function GetAKeyBuff(ByVal VK_Keys As Long) As Long '单一键盘键位状态判断。默认状态返回0,否则返回二个状态中的一个。
Dim nBuff As Long
nBuff = GetKeyState(VK_Keys) '获得键位状态。

If nBuff Mod GAKB_LOCKED = 1 Then GetAKeyBuff = GAKB_LOCKED '该键位处于锁定状态
If nBuff And GAKB_KEYDOWN Then GetAKeyBuff = GAKB_KEYDOWN '该键位处于按下状态

End Function

Private Function LoadArrKeyNames(Optional ByVal vFindKeyNameOrKeyVal As Variant) As Variant
'函数失败返回未初始化变量,
'成功:vFindKeyNameOrKeyVal 为可选参数。
'vFindKeyNameOrKeyVal 为一个键值常量,函数返回该常量对应的键名;
'vFindKeyNameOrKeyVal 为一个字符串键名时,函数返回该键名对应的常量值。
'vFindKeyNameOrKeyVal 为未初始化的变量时,返回初始化完成的以键值为数组元素座标,键名为数组元素值的字符类型数组。
'----定义键码数组,用于键码常量与键码对应字符名的转换------

Dim ArrVKKeys(1 To 255) As String '定义数组,指定范围
'--------------键码值键名转换-------------------------------
ArrVKKeys(&H70) = "F1" 'F1
ArrVKKeys(&H71) = "F2" 'F2
ArrVKKeys(&H72) = "F3" 'F3
ArrVKKeys(&H73) = "F4" 'F4
ArrVKKeys(&H74) = "F5" 'F5
ArrVKKeys(&H75) = "F6" 'F6
ArrVKKeys(&H76) = "F7" 'F7
ArrVKKeys(&H77) = "F8" 'F8
ArrVKKeys(&H78) = "F9" 'F9
ArrVKKeys(&H79) = "F10" 'F10
ArrVKKeys(&H7A) = "F11" 'F11
ArrVKKeys(&H7B) = "F12" 'F12
ArrVKKeys(&H7C) = "F13" 'F13
ArrVKKeys(&H7D) = "F14" 'F14
ArrVKKeys(&H7E) = "F15" 'F15
ArrVKKeys(&H7F) = "F16" 'F16
ArrVKKeys(&H80) = "F17" 'F17
ArrVKKeys(&H81) = "F18" 'F18
ArrVKKeys(&H82) = "F19" 'F19
ArrVKKeys(&H83) = "F20" 'F20
ArrVKKeys(&H84) = "F21" 'F21
ArrVKKeys(&H85) = "F22" 'F22
ArrVKKeys(&H86) = "F23" 'F23
ArrVKKeys(&H87) = "F24" 'F24
ArrVKKeys(&HA0) = "LSHIFT" '左上档
ArrVKKeys(&HA2) = "LCONTROL"

'左控制
ArrVKKeys(&HA4) = "LMENU" '左菜单
ArrVKKeys(&H13) = "PAUSE" '暂停
ArrVKKeys(&HA1) = "RSHIFT" '右上档
ArrVKKeys(&HA3) = "RCONTROL" '右控制
ArrVKKeys(&HA5) = "RMENU" '右菜单
ArrVKKeys(&H29) = "SELECT" '选择
ArrVKKeys(&H69) = "NUMPAD9" '小键盘9
ArrVKKeys(&H68) = "NUMPAD8" '小键盘8
ArrVKKeys(&H67) = "NUMPAD7" '小键盘7
ArrVKKeys(&H66) = "NUMPAD6" '小键盘6
ArrVKKeys(&H65) = "NUMPAD5" '小键盘5
ArrVKKeys(&H64) = "NUMPAD4" '小键盘4
ArrVKKeys(&H63) = "NUMPAD3" '小键盘3
ArrVKKeys(&H62) = "NUMPAD2" '小键盘2
ArrVKKeys(&H61) = "NUMPAD1" '小键盘1
ArrVKKeys(&H60) = "NUMPAD0" '小键盘0
ArrVKKeys(&H25) = "LEFT" '向左
ArrVKKeys(&H27) = "RIGHT" '向右
ArrVKKeys(&H28) = "DOWN" '向下
ArrVKKeys(&H26) = "UP" '向上
ArrVKKeys(&H22) = "NEXT" '下一个
ArrVKKeys(&H8) = "BACK" '退格
ArrVKKeys(&H1B) = "ESCAPE" '退出
ArrVKKeys(&HFB) = "ZOOM" '缩放
ArrVKKeys(&H10) = "SHIFT" '上档
ArrVKKeys(&H2E) = "DELETE" '删除
ArrVKKeys(&H3) = "CANCEL" '取消
ArrVKKeys(&HC) = "CLEAR" '清除
ArrVKKeys(&HFE) = "OEM_CLEAR" '清除
ArrVKKeys(&H11) = "CONTROL" '控制
ArrVKKeys(&H20) = "SPACE" '空格
ArrVKKeys(&H23) = "END" '结尾
ArrVKKeys(&H6D) = "SUBTRACT" '减键
ArrVKKeys(&H6B) = "ADD" '加键
ArrVKKeys(&H91) = "SCROLL" '滚动
ArrVKKeys(&HD) = "RETURN" '返回
ArrVKKeys(&H14) = "CAPITAL" '大写锁定
ArrVKKeys(&H2A) = "PRINT" '打印
ArrVKKeys(&H6F) = "DIVIDE" '除键
ArrVKKeys(&H6A) = "MULTIPLY" '乘键
ArrVKKeys(&H2D) = "INSERT" '插入
ArrVKKeys(&H12) = "MENU" '菜单
ArrVKKeys(&HFA) = "PLAY" '播放
ArrVKKeys(&H2F) = "HELP" '帮助
ArrVKKeys(&H9) = "TAB" 'TAB
ArrVKKeys(&H90) = "NUMLOCK" '小键盘锁定
ArrVKKeys(&H4) = "MBUTTON" 'NOTcontiguouswithLRBUTTON
ArrVKKeys(&H24) = "HOME" 'HOME
ArrVKKeys(&HF6) = "ATTN" 'Do't Know
ArrVKKeys(&HF7) = "CRSEL" 'Do't Know
ArrVKKeys(&H6E) = "DECIMAL" 'Do't Know
ArrVKKeys(&HF9) = "EREOF" 'Do't Know
ArrVKKeys(&H2B) = "EXECUTE" 'Do't Know
ArrVKKeys(&HF8) = "EXSEL" 'Do't Know
ArrVKKeys(&H1) = "LBUTTON" 'Do't Know
ArrVKKeys(&HFC) = "NONAME" 'Do't Know
ArrVKKeys(&HFD) = "PA1" 'Do't Know
ArrVKKeys(&H21) = "PRIOR" 'Do't Know
ArrVKKeys(&HE5) = "PROCESSKEY" 'Do't Know
ArrVKKeys(&H2) = "RBUTTON" 'Do't Know
ArrVKKeys(&H6C) = "SEPARATOR" 'Do't Know
ArrVKKeys(&H2C) = "SNAPSHOT" '系统快照键

Select Case TypeName(vFindKeyNameOrKeyVal) '根据传入参数类型选择处理方式。
Case Is = "Integer" '----------------------------------根据键值常量的值返回键名
If vFindKeyNameOrKeyVal > 0 And vFindKeyNameOrKeyVal <= 255 Then
LoadArrKeyNames

= ArrVKKeys(vFindKeyNameOrKeyVal)
Else
MsgBox "参数值超出范围:应为1-255,但实际只有88个参数可用。"
End If
Case Is = "String" '----------------------------------根据键名返回键值常量的值
For i = 1 To 255 Step 1
If ArrVKKeys(i) = vFindKeyNameOrKeyVal Then
LoadArrKeyNames = CLng(i)

Exit Function
End If
Next
Case Is = "Error" '----------------------------------传入参数未初始化(默认模式)数组返回给函数调用者。
LoadArrKeyNames = ArrVKKeys
Case Else '----------------------------------不在处理范围
MsgBox "参数类型错误:" & Chr(13) & Space(4) & "函数仅限处理:Long、String、未初始化的类型变量"
Exit Function
End Select

End Function

Public Function IfShift(ByVal cKeyName As String) As Boolean
'判断按键对应字符结合大写锁定状态时,是否需要上档操作。由于程序表达限制,包含["、'】二个字符将无法识别。
'上档信息表"ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}:"|<>?"
'下档信息表"abcdefghijklmnopqrstuvwxyz"
Dim nAt As Integer

If Len(cKeyName) = 1 Then
If IsNumeric(cKeyName) Then Exit Function '为数字时跳过检查
nAt = InStr(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}:|<>?", cKeyName) '获得需要Shift的字符在列表中的位置。
If GetAKeyBuff(VK_CAPITAL) = GAKB_LOCKED Then '大写处于锁定时。
If nAt > 0 And nAt <= 26 Then '若cKeyName为字母,直接跳出不需Shift
Exit Function
End If
End If
Else
MsgBox "键名只能是一个字符。"
Exit Function
End If


IfShift = True
End Function
Public Function GetAllKeyBuff() As Variant '获得一个上限255的数组其中列出了256个键的状态。
Dim arBuff(255) As Byte
Call GetKeyboardState(arBuff(0))
GetAllKeyBuff = arBuff

End Function

Public Function LockedVK_KEY(ByVal VK_KEY As Long, Optional ByVal bLocked As Boolean) As Boolean
'函数为本程序线程创建一个虚拟键表并以blocked判断VK_KEY是进行锁定还是解锁操作。这并不影响其他线程的键位状态。
Dim arBuff(255) As Byte '定义SetKeyBoardState函数用到的数据类型。
arBuff(VK_KEY) = IIf(bLocked, 1, 0) '根据键值和blocked赋与一个锁定或解锁的值。
Call SetKeyboardState(arBuff(0)) '设置按键状态。

End Function

Public Sub BigMafan(ByVal strchar As String)
Select Case strchar
'没按Ctrl ;=,-./`[\]'
Case ";"
PressKey 186
Case "="
PressKey 187
Case ","
PressKey 188
Case "-"
PressKey 189
Case "."
PressKey 190
Case "/"
PressKey 191
Case "`"
PressKey 192
Case "["
Pr

essKey 219
Case "\"
PressKey 220
Case "]"
PressKey 221
Case "'"
PressKey 222
'按shift :+<_>?~{|}"
Case ":"
ShiftKey 186
Case "+"
ShiftKey 187
Case "<"
ShiftKey 188
Case "_"
ShiftKey 189
Case ">"
ShiftKey 190
Case "?"
ShiftKey 191
Case "~"
ShiftKey 192
Case "{"
ShiftKey 219
Case "|"
ShiftKey 220
Case "}"
ShiftKey 221
Case """"
ShiftKey 222
'按shift !@#$%^&*()
Case "!"
ShiftKey VK_1
Case "@"
ShiftKey VK_2
Case "#"
ShiftKey VK_3
Case "$"
ShiftKey VK_4
Case "%"
ShiftKey VK_5
Case "^"
ShiftKey VK_6
Case "&"
ShiftKey VK_7
Case "*"
ShiftKey VK_8
Case "("
ShiftKey VK_9
Case ")"
ShiftKey VK_0
End Select
End Sub
Public Sub Mafan(ByVal strchar As String)
Select Case strchar
Case "A"
ShiftKey VK_A
Case "B"
ShiftKey VK_B
Case "C"
ShiftKey VK_C
Case "D"
ShiftKey VK_D
Case "E"
ShiftKey VK_E
Case "F"
ShiftKey VK_F
Case "G"
ShiftKey VK_G
Case "H"
ShiftKey VK_H
Case "I"
ShiftKey VK_I
Case "J"
ShiftKey VK_J
Case "K"
ShiftKey VK_K
Case "L"
ShiftKey VK_L
Case "M"
ShiftKey VK_M
Case "N"
ShiftKey VK_N
Case "O"
ShiftKey VK_O
Case "P"
ShiftKey VK_P
Case "Q"
ShiftKey VK_Q
Case "R"
ShiftKey VK_R
Case "S"
ShiftKey VK_S
Case "T"
ShiftKey VK_T
Case "U"
ShiftKey VK_U
Case "V"
ShiftKey VK_V
Case "W"
ShiftKey VK_W
Case "X"
ShiftKey VK_X
Case "Y"
ShiftKey VK_Y
Case "Z"
ShiftKey VK_Z
Case "a"
PressKey VK_A
Case "b"
PressKey VK_B
Case "c"
PressKey VK_C
Case "d"
PressKey VK_D
Case "e"
PressKey VK_E
Case "f"
PressKey VK_F
Case "g"
PressKey VK_G
Case "h"
PressKey VK_H
Case "i"
PressKey VK_I
Case "j"
PressKey VK_J
Case "k"
PressKey VK_K
Case "l"
PressKey VK_L
Case "m"
PressKey VK_M
Case "n"
PressKey VK_N
Case "o"
PressKey VK_O
Case "p"
PressKey VK_P
Case "q"
PressKey VK_Q
Case "r"
PressKey VK_R
Case "s"
PressKey VK_S
Case "t"
PressKey VK_T
Case "u"
PressKey VK_U
Case "v"
PressKey VK_V
Case "w"
PressKey VK_W
Case "x"
PressKey VK_X
Case "y"
PressKey VK_Y
Case "z"
PressKey VK_Z
Case "0"
PressKey VK_0
Case "1"
PressKey VK_1
Case "2"
PressKey VK_2
Case "3"
PressKey VK_3
Case "

4"
PressKey VK_4
Case "5"
PressKey VK_5
Case "6"
PressKey VK_6
Case "7"
PressKey VK_7
Case "8"
PressKey VK_8
Case "9"
PressKey VK_9
End Select
End Sub

相关主题
文本预览
相关文档 最新文档