跳转到内容

OTG / USB 键鼠

更新: 2025/7/20 字数: 0 字 时长: 0 分钟

USB 模块提供了通过 USB 连接控制设备的接口,包括触摸操作、按键模拟、文本输入等功能。与 BLE 模块功能类似,但使用 USB 连接方式,通常具有更低的延迟和更高的稳定性。

导入USB模块

js
importClass("com.cloud.hid.USB");

初始化与连接

USB.init(context)

初始化 USB 控制器

参数:
context:Android 上下文对象

返回值:
boolean:初始化是否成功

示例:

js
var result = USB.init(context);
console.log('USB初始化结果:', result);

USB.connect()

连接 ESP32 设备

返回值:
boolean: 连接是否成功

示例:

js
var result = USB.connect();
console.log('连接结果:', result);

USB.restart()

重启 ESP32 设备

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.restart();
console.log('重启结果:', result);

USB.onDestroy()

销毁 USB 控制器

示例:

js
USB.onDestroy();
console.log('USB控制器已销毁');

USB.state()

获取 ESP32 设备状态

返回值:
boolean: 设备状态

示例:

js
var state = USB.state();
console.log('设备状态:', state);

按键操作

USB.home()

模拟 HOME 主页键

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.home();
console.log('HOME键操作结果:', result);

USB.back()

模拟 BACK 返回键

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.back();
console.log('BACK键操作结果:', result);

USB.recents()

模拟最近任务键

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.recents();
console.log('最近任务键操作结果:', result);

注意事项

输入法相关按键部分手机不兼容,建议使用Bot.js系统提供的脚本输入法以解决此问题。

USB.enter()

模拟 ENTER 回车键

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.enter();
console.log('ENTER键操作结果:', result);

USB.selectAll()

全选操作

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.selectAll();
console.log('全选操作结果:', result);

USB.screenshot()

截图操作

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.screenshot();
console.log('截图操作结果:', result);

USB.cut()

剪切操作

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.cut();
console.log('剪切操作结果:', result);

USB.copy()

复制操作

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.copy();
console.log('复制操作结果:', result);

USB.paste()

粘贴操作

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.paste();
console.log('粘贴操作结果:', result);

USB.input(str)

输入文本

参数:
str: 要输入的文本

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.input("Hello cloud"); // 无法输入中文,可以用设置剪切板 setClip(text) + 粘贴键 USB.paste() 或者使用Bot.js系统提供的脚本输入法
console.log('输入操作结果:', result);

USB.delete([i])

删除操作

参数:
i (可选): 删除次数,默认为1

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.delete(3); // 删除3次
console.log('删除操作结果:', result);

USB.backspace([i])

退格操作

参数:
i (可选): 退格次数,默认为1

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.backspace(2); // 退格2次
console.log('退格操作结果:', result);

触摸操作

USB.touchDown(id, x, y)

按下触摸点

参数:

  • id: 触摸点ID
  • x: X坐标
  • y: Y坐标

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.touchDown(1, 100, 200);
console.log('按下触摸点结果:', result);

USB.touchMove(id, x, y)

移动触摸点

参数:

  • id: 触摸点ID
  • x: X坐标
  • y: Y坐标

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.touchMove(1, 150, 250);
console.log('移动触摸点结果:', result);

USB.touchUp(id)

抬起触摸点

参数:

  • id: 触摸点ID

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.touchUp(1);
console.log('抬起触摸点结果:', result);

USB.click(x, y)

点击坐标

参数:

  • x: X坐标
  • y: Y坐标

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.click(300, 500);
console.log('点击操作结果:', result);

USB.press(x, y, duration)

长按坐标

参数:

  • x: X坐标
  • y: Y坐标
  • duration: 持续时间(毫秒)

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.press(300, 500, 1000); // 长按1秒
console.log('长按操作结果:', result);

USB.swipeDetailed(startX, startY, endX, endY, steps, downTime, duration, upTime)

详细滑动操作

参数:

  • startX: 起点X坐标
  • startY: 起点Y坐标
  • endX: 终点X坐标
  • endY: 终点Y坐标
  • steps: 滑动步数
  • downTime: 按下延迟(毫秒)
  • duration: 滑动持续时间(毫秒)
  • upTime: 抬起延迟(毫秒)

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.swipeDetailed(100, 200, 300, 400, 10, 0, 500, 0);
console.log('详细滑动操作结果:', result);

USB.swipeShape(startX, startY, endX, endY, steps, downTime, duration, upTime, shape)

曲线滑动

参数:

  • startX:起点 X 坐标
  • startY:起点 Y 坐标
  • endX:终点 X 坐标
  • endY:终点 Y 坐标
  • steps:滑动步数
  • downTime:按下延迟(毫秒)
  • duration:滑动持续时间(毫秒)
  • upTime:抬起延迟(毫秒)
  • shape:滑动形状(1-6)

返回值:

  • boolean:操作是否成功

示例:

js
var result = USB.swipeShape(100, 200, 300, 400, 10, 0, 500, 0, 1);
console.log('USB曲线滑动操作结果:', result);

键盘操作

USB.keyPress(modifier, keyCode) / USB.keyPress(keyCode)

按键按下(必须得释放,否则可能导致后期按键异常)

参数:

  • modifier: 修饰键
  • keyCode: 按键代码
  • keyCode: 按键代码

返回值:
boolean: 操作是否成功

示例:

js
var result1 = USB.keyPress(8, 40); // 模拟主页键
console.log('USB组合按键结果:', result1);

/* 通过按下+释放模拟截图键 */
var resultKeySingle = USB.keyPress(70);//按下必须得释放 否则可能导致后期按键异常)
console.log("单个键发送结果: " + resultKeySingle);
sleep(200)
var resultKeyRelease = USB.keyRelease(70);
console.log("释放键结果: " + resultKeyRelease);

USB.keyWrite(keyCode)

按键写入

参数:

  • keyCode: 按键代码

返回值:
boolean: 操作是否成功

示例:

js
var result = USB.keyWrite(70); // 截屏键
console.log('USB按键写入结果:', result);

USB.keyRelease([keyCode])

按键释放

参数:

  • keyCode (可选): 指定按键代码,不传则释放所有按键

返回值:
boolean: 操作是否成功

示例:

js
var result1 = USB.keyRelease(70); // 释放截屏键
console.log('USB释放指定键结果:', result1);

var result2 = USB.keyRelease(); // 释放所有按键
console.log('USB释放所有键结果:', result2);

完整示例代码

js
importClass("com.cloud.hid.USB");

/* 销毁 */
USB.onDestroy();

/* 初始化 */
var resultIsInit = USB.init(context);
console.log("初始化: " + resultIsInit);

/* 设置上下文(无返回值) */
USB.setContext(context);

/* 获取上下文 */
var resultUSBContext = USB.getContext(context);
console.log("获取上下文: " + resultUSBContext);

/* 连接默认设备 */
var resultIsConnected = USB.connect();
console.log("连接默认设备: " + resultIsConnected);

/* 重启ESP32设备 */
var resultIsRestarted = USB.restart();
console.log("重启: " + resultIsRestarted);

/* 当前状态 */
var resultState = USB.state();
console.log("USB 状态: " + resultState);

/* 基础按键操作 */
var resultBack = USB.back();
console.log("点击返回: " + resultBack);
var resultHome = USB.home();
console.log("点击主页: " + resultHome);
var resultRecents = USB.recents();
console.log("点击最近任务: " + resultRecents);
var resultEnter = USB.enter();
console.log("点击回车: " + resultEnter);

/* 输入操作 */
var resultInput = USB.input("adb123");
console.log("输入文字结果: " + resultInput);

/* 删除、退格操作 */
var resultDel = USB.delete();
console.log("删除1个字符: " + resultDel);
var resultDel3 = USB.delete(3);
console.log("删除3个字符: " + resultDel3);
var resultBackspace = USB.backspace();
console.log("退格1个字符: " + resultBackspace);
var resultBackspace3 = USB.backspace(3);
console.log("退格3个字符: " + resultBackspace3);

/* 粘贴复制剪切 */
var resultPaste = USB.paste();
console.log("粘贴: " + resultPaste);
var resultCopy = USB.copy();
console.log("复制: " + resultCopy);
var resultCut = USB.cut();
console.log("剪切: " + resultCut);
var resultSelectAll = USB.selectAll();
console.log("全选: " + resultSelectAll);


var result1 = USB.keyPress(8, 40); // 模拟主页键
console.log('USB组合按键结果:', result1);
/* 通过按下+释放模拟截图键 */
var resultKeySingle = USB.keyPress(70);
console.log("单个键发送结果: " + resultKeySingle);
sleep(200)
var resultKeyRelease = USB.keyRelease(70);
console.log("释放键结果: " + resultKeyRelease);

/* 模拟截图键 */
var resultKeyWrite = USB.keyWrite(70);
console.log("写键结果: " + resultKeyWrite);

/* 点击坐标 */
var resultClicked = USB.click(300, 400);
console.log("点击结果: " + resultClicked);
var resultPressed = USB.press(300, 400, 1000);
console.log("长按结果: " + resultPressed);

/* 滑动 */
var resultSwipe = USB.swipeShape(200, 500, 600, 500, 50, 200, 2000, 3000, 3);
console.log("形状滑动(SL)结果: " + resultSwipe);

USB 与 BLE 模块的主要区别

  • 连接方式不同:USB 使用有线连接,BLE 使用蓝牙无线连接
  • 性能差异:USB 通常具有更低的延迟,连接更稳定,不受无线干扰影响
  • 功能差异:USB 的 screenshot() 方法使用不同的按键代码(USB: 70,BLE: 204)
  • 使用场景:对延迟敏感的操作推荐使用 USB,需要无线自由的场景使用 BLE

注意事项

  • 使用 USB 模式需要确保设备已正确连接并授权 USB 调试权限
  • 部分 Android 设备可能需要额外的 USB 权限配置
  • 坐标参数需要根据实际屏幕分辨率进行调整
  • USB 连接通常比 BLE 更稳定,适合高性能要求的场景