Skip to content

基于Android模拟蓝牙鼠标

hh-git/AndroidMouseSimulator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 

Repository files navigation

在成熟的目标识别AI技术下,实现各种自动化操作已经不是什么难题。然而,如何模拟人类的鼠标操作使得第三方软件难以检测到却是关键问题。现有的技术方案包括通过罗技鼠标驱动技术或KMBOX系列设备来控制鼠标移动,但这些方案要么存在风险,要么成本高昂。

本项目介绍了一种通过Android设备模拟蓝牙鼠标的硬件级控制技术。这种方法不仅安全可靠,还能有效替代KMBOX系列设备,实现低成本的鼠标模拟。

功能特性

  • 蓝牙鼠标模拟: 使用Android设备通过蓝牙模拟鼠标操作,包括移动、点击等。
  • 安全可靠: 无需特殊硬件,Android设备即可实现鼠标模拟,降低硬件投入成本。
  • 易于扩展: 除了鼠标,Android设备还可以模拟其他蓝牙输入设备,例如键盘、游戏手柄等。

技术实现

1. 申请HID ProfileProxy

核心在于通过 BluetoothAdapter 类申请一个HID(Human Interface Device)设备的 ProfileProxy。HID设备指的是能够通过蓝牙与其他设备通信的输入设备,如键盘、鼠标等。

2. 定义操作描述符

获取到HID ProfileProxy后,定义一个鼠标的操作描述符,描述虚拟设备的行为特性(例如鼠标移动、点击等操作)。

3. 注册蓝牙设备

将定义好的鼠标设备描述符注册到系统,使Android设备能够作为一个蓝牙设备进行广播。其他设备(例如PC)可以通过蓝牙扫描到这个设备,并识别为蓝牙鼠标。

4. 发送鼠标移动报文

设备连接后,Android设备可以通过发送蓝牙报文来模拟鼠标的移动。具体操作是开启一个UDP服务,接收来自控制电脑的软件指令,将这些指令解析为鼠标移动报文,再通过蓝牙传输给连接的电脑。

使用步骤

  1. 点击 Scan 按钮: 启动被动扫描模式,允许电脑通过蓝牙找到这部手机。
  2. 首次连接: 在首次使用时,需在电脑端主动选择你的手机进行蓝牙连接。一旦成功连接,手机将被注册为已知设备。
  3. 后续连接: 下一次使用时,只需在手机上点击 Connect 按钮即可。此时,电脑端无需执行任何操作,手机App会自动连接到电脑。
  4. 模拟鼠标操作: 连接成功后,你可以通过运行以下简单的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版本为测试版本,可能存在部分功能不完全或不稳定的情况。

About

基于Android模拟蓝牙鼠标

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%