电缆线一端连接电脑1的COM口,另一端连接电脑2的键盘接口,希望通过电脑1发送字符串,在电脑2中模拟键盘的输入。用VB有可能实现这样的功能吗?应该如何做呢?

解决方案 »

  1.   

    Sendkey
    但是不能模拟所有键
      

  2.   

    truewill: sendkeys 只能模拟本机的键盘事件,而我希望能通过COM口模拟另一台计算机的键盘事件啊。
      

  3.   

    本人孤陋寡闻,连COM口键盘这样的硬件都没有听过,更不说软件了
    也许可以写个驱动程序放在电脑2……
      

  4.   

    '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 = "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
      

  5.   

    仅供参考,上面那段代码是偶去年编写AutoCapture时编写的函数。主要用于模拟用户按下:Ctrl+Y/C/V 等……至于模拟MOUSE的也有,如果你需要我也可以贴上来。偶的程序:http://dsdm.blogchina.com/3125346.html
      

  6.   

    哦,没看清楚,楼主原来是想要做木马吗?这个其实就是C/S。S端用HOOK键盘然后用TCP/IP连接到C端,发送过来并接收。然后模拟……这是思想。具体实现请自行编写代码。
      

  7.   

    给你一个链接:
    http://www.upsdn.net/html/2005-10/564.html另外,可以尝试市面上的串口转PS/2通讯线。
      

  8.   

    通俗点说吧  在其他电脑上不安装任何软件的话
    你这一段怎么也不可能模拟他的键盘
    要是可以的话,你就可以随便操作网络上任何一台计算机了人家木马还得先搞一个程序进入你的电脑呢
    所以 你的那个电脑2必须写接收处理com口的字符的程序
    然后才能模拟
      

  9.   

    用C/S来实现,在KEYPRESS事件中将当前按键码发送到另外一台计算机,再在对方计算机中用一个循环来接收并用SENDKEY来模拟按键,做起来应该不会很难吧.
      

  10.   

    TO: of123() 
        http://www.upsdn.net/html/2005-10/564.html 打不开啊,
    我就是希望以市面上的串口转PS/2通讯线实现,但电脑1的COM口应该发送什么样的数据啊?是不是发送字符的ASCII码就可以了?
        再次表示感谢!
      

  11.   

    但是通过串口转PS/2通讯线肯定能实现,方法和KVM分配器的原理一样
      

  12.   

    TO: yinmingxing(把酒临风) 
        能说得详细一点吗?谢谢!
      

  13.   

    sendkeys是可以模拟所有键的,你可以用CHR()函数,CTRL什么的,可以用API
      

  14.   

    TO:youchenglong(小志)
        设想是这样的:串口转PS/2连接线的一端接电脑1的COM口,另一端接电脑2的PS/2口,然后实现了电脑2的键盘输入,比如电脑1的窗口中有一个文本框和一个按钮,单击按钮就能把文本框中的内容通过串口转PS/2连接线传到电脑2,这样就可以不用到C/S结构了。关键是向电脑1的COM口发送什么样的数据?sendkeys不是只模拟了本机的键盘输入吗?
      

  15.   

    实际上,PC机的串口通讯是异步通讯,而且是由底层控制的。PS/2 键盘口是键盘口是同步串行协议。双方无法兼容。你可以这样做:
    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个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。
      

  16.   

    如果你找不到键盘扫描码表,我可以发一个给你。注意,当前的 PC 使用的都是 Set2。
      

  17.   

    用winsock 写个服务放在 电脑1上获得Pc1 上的按键 send to PC2的客户端 上