|
|
发表于 2005-12-7 22:32:00
|
显示全部楼层
Re:请问:VB怎样模拟键盘输入
你说的那函数很不错。我以前用VB写过一函数:
'Virtual keyboard events
' usage: VirtualKeyboard("CTRL+C") etc...
Public Sub VirtualKeyboard(ByVal sKeyInfo As String)
Dim i As Long
Dim bKey As Byte
Dim aCtrlKey() As Byte
Dim nCtrlKeyCount As Long
Dim aSKeyList(9) As KEY_DATA
'Keyinfo convert to Upper
sKeyInfo = UCase(sKeyInfo)
'special key list
aSKeyList(0).sKey = "CTRL"
aSKeyList(0).bKey = VK_CONTROL
aSKeyList(1).sKey = "SHIFT"
aSKeyList(1).bKey = VK_SHIFT
aSKeyList(2).sKey = "ALT"
aSKeyList(2).bKey = VK_MENU
aSKeyList(3).sKey = "DEL"
aSKeyList(3).bKey = VK_DELETE
aSKeyList(4).sKey = "INS"
aSKeyList(4).bKey = VK_INSERT
aSKeyList(5).sKey = "HOME"
aSKeyList(5).bKey = VK_HOME
aSKeyList(6).sKey = " GUP"
aSKeyList(6).bKey = VK_PRIOR
aSKeyList(7).sKey = "PGDN"
aSKeyList(7).bKey = VK_NEXT
aSKeyList(8).sKey = "BACKSPACE"
aSKeyList(8).bKey = VK_BACK
aSKeyList(9).sKey = "END"
aSKeyList(9).bKey = VK_END
ReDim aCtrlKey(0)
For i = 0 To UBound(aSKeyList)
If InStr(sKeyInfo, aSKeyList(i).sKey) > 0 Then
sKeyInfo = Replace(sKeyInfo, aSKeyList(i).sKey, "")
If aCtrlKey(0) > 0 Then
nCtrlKeyCount = nCtrlKeyCount + 1
ReDim Preserve aCtrlKey(nCtrlKeyCount)
End If
aCtrlKey(nCtrlKeyCount) = aSKeyList(i).bKey
End If
Next
sKeyInfo = Replace(sKeyInfo, "+", "")
sKeyInfo = Trim(sKeyInfo)
sKeyInfo = Replace(sKeyInfo, " ", "")
If aCtrlKey(0) > 0 Then
For i = 0 To nCtrlKeyCount
keybd_event aCtrlKey(i), MapVirtualKey(aCtrlKey(i), 0), 0, 0
Next
End If
For i = 1 To Len(sKeyInfo)
bKey = Asc(Mid(sKeyInfo, i, 1))
keybd_event bKey, MapVirtualKey(bKey, 0), 0, 0
Next
For i = 1 To Len(sKeyInfo)
bKey = Asc(Mid(sKeyInfo, i, 1))
keybd_event bKey, MapVirtualKey(bKey, 0), KEYEVENTF_KEYUP, 0
Next
If aCtrlKey(0) > 0 Then
For i = 0 To nCtrlKeyCount
keybd_event aCtrlKey(i), MapVirtualKey(aCtrlKey(i), 0), KEYEVENTF_KEYUP, 0
Next
End If
End Sub
仅供参考,上面那段代码是偶去年编写AutoCapture时编写的函数。主要用于模拟用户按下:Ctrl+Y/C/V 等……至于模拟MOUSE的也有,如果你需要我也可以贴上来。
偶的程序:http://dsdm.blogchina.com/3125346.html |
|