C++ Raspberry Pi Zero-变为虚拟鼠标在Windows 10 build 1809上无法正常工作(光标弹回到左上角)

C++ Raspberry Pi Zero-变为虚拟鼠标在Windows 10 build 1809上无法正常工作(光标弹回到左上角),c++,windows,raspberry-pi,windows-10,raspberry-pi-zero,C++,Windows,Raspberry Pi,Windows 10,Raspberry Pi Zero,我有一个树莓皮零,我把它变成了一个虚拟键盘和虚拟鼠标。我在github上使用了这个惊人的回购协议(谢谢你,SeongTae Jeong!)。要简要总结其工作原理,请执行以下操作: 您可以通过USB电缆将PI Zero连接到另一台计算机,并使用以太网电缆将其连接到Internet 将其连接到计算机后,将在设备管理器(Windows)中创建3个新设备: 人机界面设备 Usb输入设备 键盘 HID键盘设备 鼠标和其他指向设备 HID兼容鼠标(绝对位置+按钮) HID兼容鼠标(相对位置+滚轮

我有一个树莓皮零,我把它变成了一个虚拟键盘和虚拟鼠标。我在github上使用了这个惊人的回购协议(谢谢你,SeongTae Jeong!)。要简要总结其工作原理,请执行以下操作:

  • 您可以通过USB电缆将PI Zero连接到另一台计算机,并使用以太网电缆将其连接到Internet
  • 将其连接到计算机后,将在设备管理器(Windows)中创建3个新设备:

    • 人机界面设备
      • Usb输入设备
    • 键盘
      • HID键盘设备
    • 鼠标和其他指向设备
      • HID兼容鼠标(绝对位置+按钮)
      • HID兼容鼠标(相对位置+滚轮)
  • PI zero上运行着一个“服务器”(repo上rasp_vusb_服务器中的代码),它接受您的命令,然后将它们作为鼠标命令或键盘命令发送到您通过USB连接的设备

  • 通过连接到PIZero(服务器)的IP并发送正确的数据,您可以将命令从另一台计算机发送到PIZero(服务器)。您可以使用我提供的repo中已经内置的程序,它位于map InputController中

  • 现在,它在Windows10Build1803和Build1903上运行得非常好。它也可以在Mac上使用,但我还没有在Mac上测试键盘功能。当PiZero连接到Windows10(pro或home)版本1809时,就会出现奇怪的问题

    键盘命令、相对鼠标命令(意思是:从atm上的位置向右移动光标+50像素)和鼠标按钮(单击)命令工作正常,但绝对鼠标命令工作正常(意思是:在屏幕上将光标移动到X=50,Y=50)和滚轮命令不起作用-光标在左上角(坐标,X=0,Y=0)保持捕捉。

    我在许多不同的计算机和Windows版本、不同的显示器(有些有触摸屏,有些没有)、不同的Pi零点上尝试了这个方法。这个问题只发生在Windows 10 build 1809上。 我试着在网上搜索类似的问题,但所有的答案都会导致一些触摸屏问题,但正如我所说,在我的案例中,触摸屏不是问题所在,因为它在不同的版本上工作

    我不确定这是否与问题有关,因为这是我们发送给PI zero的代码/命令,然后PI zero将其发送到连接的设备) 我开始深入研究代码,发现当发送绝对鼠标命令时,您会发送一个长度为15的字节数组。为了更好地理解,我将用一个示例进行解释:

    假设您想要发送一个绝对鼠标命令,您想要在屏幕上将光标移动到X=50Y=100。正如repo中的自述文件所述,您必须根据屏幕分辨率进行一些计算。因此,假设我们有一个1920x1080分辨率然后我们发送X=(50*32767/1920)=853和Y=(100*32767/1080)=3033。然后你必须调用一个函数
    byte[]convertToUseCommands(“853 3033”)
    。它可以在repo中的InputController/MouseDevice.csDemo/MouseDevice.cs中找到。此函数将数字转换为字节数组,如下所示:(EDIT*)我将在其旁边放置在发送相对鼠标命令(X=+50,Y=+50)时创建的字节数组,以进行比较

    [0] = 11  <- Packet length (15 - 4)             [0] = 7 (11-4)                    
    [1] = 0                                         [1] = 0
    [2] = 0                                         [2] = 0
    [3] = 0                                         [3] = 0
    [4] = 7   <- 7 means absolute command           [4] = 6   <- 6 means relative commands
    [5] = 85  <- (xPos & 0xff)                      [5] = 0                     
    [6] = 3   <- (xPos & 0xff00) >> 8)              [6] = 50  <- xPos (Just xPos!) you can only send +-127 
    [7] = 217 <- (yPos & 0xff)                      [7] = 50  <- yPos (Just yPos!) you can only send +-127 
    [8] = 11  <- (yPos & 0xff00) >> 8)              [8] = 0
    [9] = 0                                         [9] = 0
    [10] = 0                                        [10] = 0
    [11] = 0
    [12] = 0
    [13] = 0
    [14] = 0
    

    [0]=11这些字节数组可能是USB HID数据包。看看USB嗅探器能告诉你什么。这听起来像是你应该问github repo的所有者或可能是Microsoft。而且,如果它在最新的Windows版本上工作,那么为什么不直接使用它呢?你有没有理由专门使用1809?我明白了,某个程序员,谢谢!@Botje谢谢你,你给了我一些希望!我安装了一个嗅探器,我发现在版本1903和1809上总是发送两个HID包。第一个是正确的,带有坐标,第二个总是坐标在X=0和Y=0。虽然前一个版本接受它,但它可能会混淆前一个版本。我不会请尝试修改代码,使第二个代码不会被发送,并查看这将带我去哪里。@Frodyne如果代码修改不起作用,我将尝试联系回购协议的所有者或(希望如此)Microsoft。我不愿意只使用最新版本,因为将来可能会有另一个版本失败。因此,我想现在修复此错误。谢谢您的回答!