在成熟的目标识别AI技术下,实现各种自动化操作已经不是什么难题。然而,如何模拟人类的鼠标操作使得第三方软件难以检测到却是关键问题。现有的技术方案包括通过罗技鼠标驱动技术或KMBOX系列设备来控制鼠标移动,但这些方案要么存在风险,要么成本高昂。
本项目介绍了一种通过Android设备模拟蓝牙鼠标的硬件级控制技术。这种方法不仅安全可靠,还能有效替代KMBOX系列设备,实现低成本的鼠标模拟。
- 蓝牙鼠标模拟: 使用Android设备通过蓝牙模拟鼠标操作,包括移动、点击等。
- 安全可靠: 无需特殊硬件,Android设备即可实现鼠标模拟,降低硬件投入成本。
- 易于扩展: 除了鼠标,Android设备还可以模拟其他蓝牙输入设备,例如键盘、游戏手柄等。
核心在于通过 BluetoothAdapter 类申请一个HID(Human Interface Device)设备的 ProfileProxy。HID设备指的是能够通过蓝牙与其他设备通信的输入设备,如键盘、鼠标等。
获取到HID ProfileProxy后,定义一个鼠标的操作描述符,描述虚拟设备的行为特性(例如鼠标移动、点击等操作)。
将定义好的鼠标设备描述符注册到系统,使Android设备能够作为一个蓝牙设备进行广播。其他设备(例如PC)可以通过蓝牙扫描到这个设备,并识别为蓝牙鼠标。
设备连接后,Android设备可以通过发送蓝牙报文来模拟鼠标的移动。具体操作是开启一个UDP服务,接收来自控制电脑的软件指令,将这些指令解析为鼠标移动报文,再通过蓝牙传输给连接的电脑。
- 点击
Scan按钮: 启动被动扫描模式,允许电脑通过蓝牙找到这部手机。 - 首次连接: 在首次使用时,需在电脑端主动选择你的手机进行蓝牙连接。一旦成功连接,手机将被注册为已知设备。
- 后续连接:
下一次使用时,只需在手机上点击
Connect按钮即可。此时,电脑端无需执行任何操作,手机App会自动连接到电脑。 - 模拟鼠标操作: 连接成功后,你可以通过运行以下简单的Python脚本来测试模拟鼠标的操作:
import struct
import time
import socket
# 模拟鼠标相对移动
def move_mouse(x, y):
message = struct.pack('!Bii', 0x01, x, y)
sock.sendto(message, (udp_ip, udp_port))
print("鼠标移动至", x, y)
def leftClick():
message = struct.pack('!B', 0x03)
sock.sendto(message, (udp_ip, udp_port))
print("鼠标左键被按下")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_ip = "192.168.8.7" # 输入APP端显示的IP地址
udp_port = 21115 # UDP端口
if __name__ == "__main__":
# 简单的鼠标控制 Demo
move_mouse(100, 0) # 向右移动鼠标 100 像素
time.sleep(1) # 等待 1 秒
move_mouse(0, 100) # 向下移动鼠标 100 像素
time.sleep(1) # 等待 1 秒
leftClick() # 模拟左键点击运行上述脚本之后,你的电脑鼠标将会向右移动100像素,等待1秒后向下移动100像素,并模拟一次左键点击操作。
- 请确保手机和电脑的蓝牙功能已开启且可用。
- 建议在使用时保持手机和电脑距离较近,以确保蓝牙连接稳定。
- 此APK版本为测试版本,可能存在部分功能不完全或不稳定的情况。