VB WINIO模拟键盘的问题

VB做一个方向键自动左右左右按的程序:
模块代码:Public Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long
Public Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As Boolean
Public Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
Public Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
Public Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
Public Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
Public Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
Public Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
Public Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean
Public Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean

' ------------------------------------以上是WINIO函数声明-------------------------------------------
Public Const KBC_KEY_CMD = &H64 '键盘命令端口
Public Const KBC_KEY_DATA = &H60 '键盘数据端口
Public Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Public VK_A As Long
Public Const VK_LBUTTON = &H1... ...
Public Const VK_LEFT = &H25
Public Const VK_RIGHT = &H27
Sub KBCWait4IBE()
Dim dwVal As Long
Do
GetPortVal &H64, dwVal, 1
Loop While (dwVal And &H2)
End Sub

Sub MyKeyDown(ByVal vKeyCoad As Long)
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)

KBCWait4IBE
SetPortVal KBC_KEY_CMD, &HD2, 1
KBCWait4IBE
SetPortVal KBC_KEY_DATA, btScancode, 1
End Sub

Sub MyKeyUp(ByVal vKeyCoad As Long)
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)

KBCWait4IBE
SetPortVal KBC_KEY_CMD, &HD2, 1
KBCWait4IBE
SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1
End Sub

Sub MyKeyDownEx(ByVal vKeyCoad As Long)
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)
KBCWait4IBE
SetPortVal KBC_KEY_CMD, &HD2, 1
KBCWait4IBE
SetPortVal KBC_KEY_DATA, &HE0, 1

KBCWait4IBE
SetPortVal KBC_KEY_CMD, &HD2, 1
KBCWait4IBE
SetPortVal KBC_KEY_DATA, btScancode, 1
End Sub
Sub MyKeyUpEx(ByVal vKeyCoad As Long)
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)
KBCWait4IBE SetPortVal KBC_KEY_CMD, &HD2, 1
KBCWait4IBE
SetPortVal KBC_KEY_DATA, &HE0, 1
KBCWait4IBE
SetPortVal KBC_KEY_CMD, &HD2, 1
KBCWait4IBE
SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1
End Sub
form中代码见:http://zhidao.baidu.com/question/213808203.html
不需要sendkeys之类的方法,要驱动级模拟的,winio

第1个回答  2011-01-08
建议你使用我这代码:

Private Sub Form_Load()
Timer1.Interval = 500
End Sub

Private Sub Timer1_Timer()
Static i As Integer
i = i + 1
If i Mod 2 = 0 Then
SendKeys ("{left}")
Else
SendKeys ("{right}")
End If
End Sub本回答被提问者采纳
相似回答
大家正在搜