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
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 IfEnd Sub
但是不能模拟所有键
也许可以写个驱动程序放在电脑2……
' 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 = "PGUP"
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 IfEnd Sub
http://www.upsdn.net/html/2005-10/564.html另外,可以尝试市面上的串口转PS/2通讯线。
你这一段怎么也不可能模拟他的键盘
要是可以的话,你就可以随便操作网络上任何一台计算机了人家木马还得先搞一个程序进入你的电脑呢
所以 你的那个电脑2必须写接收处理com口的字符的程序
然后才能模拟
http://www.upsdn.net/html/2005-10/564.html 打不开啊,
我就是希望以市面上的串口转PS/2通讯线实现,但电脑1的COM口应该发送什么样的数据啊?是不是发送字符的ASCII码就可以了?
再次表示感谢!
能说得详细一点吗?谢谢!
设想是这样的:串口转PS/2连接线的一端接电脑1的COM口,另一端接电脑2的PS/2口,然后实现了电脑2的键盘输入,比如电脑1的窗口中有一个文本框和一个按钮,单击按钮就能把文本框中的内容通过串口转PS/2连接线传到电脑2,这样就可以不用到C/S结构了。关键是向电脑1的COM口发送什么样的数据?sendkeys不是只模拟了本机的键盘输入吗?
1 键盘口输入的是键盘扫描码。你从网上搜索一个码表,发送之前转换一下。
2 用并口(也就是打印口)来控制发送:(1)做一根线,并口的一个数据为连接到键盘口的 Data(2),另一个数据位连接到键盘口的 Clock(6)。
(2)键盘口的通讯协议:
1个起始位 总是逻辑0
8个数据位 (LSB)低位在前
1个奇偶校验位 奇校验,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0
1个停止位 总是逻辑1 (3)PC 机发送数据之前,要先把时钟线和数据线置为请求发送的状态。PC 机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当 ps/2设备 检测到需要接收数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。