跳转到内容

$input - 输入法

更新: 2026/3/2 字数: 0 字 时长: 0 分钟

$input 模块用于模拟键盘输入、光标移动、文本编辑和剪贴板操作,支持丰富的键盘组合键(如 Ctrl+C、Shift+End、Tab、Shift+Enter 等),可直接操控输入法焦点。

该模块能够满足复杂的输入与编辑需求,包括:

  • 逐字输入:模拟真实键盘逐字输入文本。
  • 换行与回车:支持插入换行符或模拟回车提交操作。
  • 光标精确移动:可移动光标到指定位置,支持行首、行尾、文档开头、文档末尾等。
  • 文本选区:支持按行、按单词、按字符选区,以及全选操作。
  • 文本编辑:支持删除前后字符、删除整行、删除全部文本、覆盖模式输入等。
  • 剪贴板操作:支持复制、剪切、粘贴以及撤销、重做操作。
  • 灵活快捷键模拟:可直接模拟多种组合键操作,实现复杂文本处理逻辑。

适用于脚本化自动化输入和文本处理场景,能够实现精细化的文本操作,例如自动化表单填写、批量文本编辑、脚本化聊天输入等功能。


输入法控制

$input.showPicker()

打开输入法选择器列表,仅显示在系统已启用的输入法


$input.openSettings()

打开输入法设置界面


$input.isEnabled([packageName])

  • packageName {string} 输入法包名,可选,默认为当前应用自身
  • 返回 {boolean}

判断指定输入法是否已在系统中启用。
若不传参数,则默认检查 当前应用内置的输入法

检查当前应用内置输入法是否已启用

js
if ($input.isEnabled()) {
    toastLog("当前应用内置输入法已启用");
} else {
    toastLog("当前应用内置输入法未启用");
}

检查指定包名的输入法是否已启用

js
let packageName = "com.android.inputmethod.pinyin";
if ($input.isEnabled(packageName)) {
    toastLog(packageName + " 已启用");
} else {
    toastLog(packageName + " 未启用");
}

$input.switchToInputMethod([packageName])

  • packageName {string} 输入法包名,可选,默认为当前应用自身
  • 返回 {boolean}

将指定应用的输入法设为系统默认输入法 若不传参数,则默认切换为当前应用自身的输入法。 可能的失败原因

  • 指定包名对应的输入法 不存在未在系统中启用

  • 当前环境 未获取高级系统权限

    • 需通过 Bot.js Pro 内置的 OTG-USB 调试Wi-Fi 调试(ADB) 获得权限
    • 或者用无障碍的方式切换,具体可参阅automator

将当前应用内置输入法切换为系统默认输入法

js
if ($input.switchToInputMethod()) {
    toastLog("已切换为当前应用输入法");
} else {
    toastLog("切换失败,请检查是否已启用或权限是否足够");
}

将指定输入法切换为系统默认输入法

js

let packageName = "com.android.inputmethod.pinyin";
if ($input.switchToInputMethod(packageName)) {
    toastLog("已切换 " + packageName + " 为默认输入法");
} else {
    toastLog("切换失败,请检查输入法是否启用或权限是否足够");
}

状态检查

检查输入法服务与当前输入框状态。

$input.isDefault()

  • 返回 {boolean}

判断 当前应用内置的输入法 是否为 系统默认输入法。 若返回 true,表示输入法已可用,可接收全局输入事件。 若返回 false,表示输入法尚未设为默认,需要调用 $input.switchToInputMethod() 或手动设置。

$input.visible()

  • 返回 {boolean}

判断输入法窗口是否可见

$input.focused()

  • 返回 {boolean}

检查输入框是否聚焦


文本输入与编辑操作

$input.input(text)

  • text {string} 要输入的文本内容
  • 返回 {boolean}

向当前输入框追加输入文本内容(模拟键盘输入)

$input.setText(text)

  • text {string} 要设置的文本内容
  • 返回 {boolean}

设置输入框文本内容(覆盖原有内容)

$input.backspace([count])

  • count {number} 可选,要删除的字符数量,默认 1
  • 返回 {boolean}

删除光标前的字符(向前删除)。 如果未指定 count,默认删除一个字符

示例:

js
$input.backspace();     // 删除光标前 1 个字符
$input.backspace(3);    // 删除光标前 3 个字符

$input.delete([count])

  • count {number} 可选,要删除的字符数量,默认 1
  • 返回 {boolean}

删除光标后的字符(向后删除)。 如果未指定 count,默认删除一个字符

示例:

js
$input.delete();        // 删除光标后 1 个字符
$input.delete(2);       // 删除光标后 2 个字符

$input.enter()

  • 返回 {boolean}

模拟回车键

$input.insertLineBreak()

  • 返回 {boolean}

插入换行符(Shift+Enter)

$input.clear()

  • 返回 {boolean}

清空输入框

$input.keyCode(code)

  • 返回 {boolean}

发送系统键码操作

$input.insertTab()

  • 返回 {boolean}

插入缩进或制表符(Tab)

$input.deleteTab()

  • 返回 {boolean}

删除缩进(Shift+Tab)


光标移动

$input.left()

  • 返回 {boolean}

光标左移

$input.right()

  • 返回 {boolean}

光标右移

$input.up()

  • 返回 {boolean}

光标上移

$input.down()

  • 返回 {boolean}

光标下移

$input.lineStart()

  • 返回 {boolean}

移动到行首

$input.lineEnd()

  • 返回 {boolean}

移动到行尾

$input.start()

  • 返回 {boolean}

移动到文档开头(Ctrl+Home)

$input.end()

  • 返回 {boolean}

移动到文档末尾(Ctrl+End)


文本选区操作

$input.setSelection([start, end])

  • start {number} 可选,选择起始位置
  • end {number} 可选,选择结束位置
  • 返回 {boolean}

设置输入框的选中文本范围。

  • 若不传参数,则默认全选文本(等效于 Ctrl+A)
  • 若传 startend,则选中指定范围

$input.selectLineStart()

  • 返回 {boolean}

从光标选到行首(Shift+Home)

$input.selectLineEnd()

  • 返回 {boolean}

从光标选到行尾(Shift+End)

$input.selectStart()

  • 返回 {boolean}

从光标选到文档开头(Ctrl+Shift+Home)

$input.selectEnd()

  • 返回 {boolean}

从光标选到文档末尾(Ctrl+Shift+End)

$input.selectWordLeft()

  • 返回 {boolean}

向左选中一个单词(Ctrl+Shift+ArrowLeft)

$input.selectWordRight()

  • 返回 {boolean}

向右选中一个单词(Ctrl+Shift+ArrowRight)

$input.selectLeft()

  • 返回 {boolean}

向左扩展选区一个字符(Shift+ArrowLeft)

$input.selectRight()

  • 返回 {boolean}

向右扩展选区一个字符(Shift+ArrowRight)

$input.selectUp()

  • 返回 {boolean}

向上扩展选区一行(Shift+ArrowUp)

$input.selectDown()

  • 返回 {boolean}

向下扩展选区一行(Shift+ArrowDown)


剪贴板操作

$input.copy()

  • 返回 {string} 复制的文本

复制选中内容(Ctrl+C)

$input.cut()

  • 返回 {string} 剪切的文本 剪切选中内容(Ctrl+X)

$input.paste()

  • 返回 {boolean}

粘贴剪贴板内容(Ctrl+V)

$input.undo()

  • 返回 {boolean}

撤销上一步(Ctrl+Z)

$input.redo()

  • 返回 {boolean}

重做上一步(Ctrl+Y)


文本获取

$input.getText()

  • 返回 {string}

获取全部文本(Ctrl+E)

$input.getHint()

  • 返回 {string | null}

获取提示文本(Ctrl+H)

$input.getLineText()

  • 返回 {string}

获取当前行文本

$input.getSelectedText()

  • 返回 {string}

获取选中内容

$input.getCursorPosition()

  • 返回 {number}

获取光标位置

$input.getTextBeforeCursor([length])

  • length {number} 可选,默认 1,获取光标前指定长度的文本
  • 返回 {string}

获取光标前文本

$input.getTextAfterCursor([length])

  • length {number} 可选,默认 1,获取光标后指定长度的文本
  • 返回 {string}

获取光标后文本


示例

js
// =========================
// 🔧 输入法状态检查示例
// =========================

// 检查当前应用内置输入法是否已启用
if (!$input.isEnabled()) {
  toastLog("当前应用内置输入法未启用,请先启用输入法!");
  $input.openSettings();
  exit(); // 退出脚本
}

// 检查当前输入法是否为系统默认
if (!$input.isDefault()) {
  toastLog("当前应用内置输入法尚未设为系统默认,请切换输入法!");

  // 获取当前应用自身包名
  var packageName = context.getPackageName();
  toastLog("当前应用包名:", packageName);

  if ($input.switchToInputMethod(packageName)) {
    toastLog("切换成功");
  } else {
    $input.showPicker();
    exit(); // 退出脚本
  }
}

toastLog("输入法已启用且为系统默认,开始执行操作");
// =========================
// 🌐 输入文本示例
// =========================

// 插入文本
let r1 = $input.input("Hello World!")
log("输入结果:", r1)

// 插入换行
let r2 = $input.insertLineBreak()
log("插入换行结果:", r2)

// 再输入一行
let r3 = $input.input("这是第二行")
log("输入第二行结果:", r3)

// 回车提交
let r4 = $input.enter()
log("回车结果:", r4)


// =========================
// ✂️ 光标与选区示例
// =========================

// 全选文本
let r5 = $input.setSelection()
log("全选结果:", r5)

// 复制文本
let copiedText = $input.copy()
log("复制文本:", copiedText)

// 粘贴
let r6 = $input.paste()
log("粘贴结果:", r6)

// 光标移到末尾
let r7 = $input.end()
log("光标移到末尾:", r7)


// =========================
// 🔁 撤销与重做示例
// =========================

// 撤销
let r8 = $input.undo()
log("撤销结果:", r8)

// 重做
let r9 = $input.redo()
log("重做结果:", r9)


// =========================
// 📋 获取文本信息示例
// =========================

let text = $input.getText()
log("当前文本:", text)

let hint = $input.getHint()
log("提示文本:", hint)

注意事项

  • 请确认当前输入法为「Bot.js Pro 输入法」或你自己打包后的应用输入法,否则部分功能可能无效。
  • 所有 $input.xxx() 方法在当前输入框获得焦点时才会生效。
  • 部分操作(如复制、粘贴)依赖系统剪贴板权限。
  • 支持 Android 7.0 及以上版本。