$input - 输入法
更新: 2026/3/2 字数: 0 字 时长: 0 分钟
$input 模块用于模拟键盘输入、光标移动、文本编辑和剪贴板操作,支持丰富的键盘组合键(如 Ctrl+C、Shift+End、Tab、Shift+Enter 等),可直接操控输入法焦点。
该模块能够满足复杂的输入与编辑需求,包括:
- 逐字输入:模拟真实键盘逐字输入文本。
- 换行与回车:支持插入换行符或模拟回车提交操作。
- 光标精确移动:可移动光标到指定位置,支持行首、行尾、文档开头、文档末尾等。
- 文本选区:支持按行、按单词、按字符选区,以及全选操作。
- 文本编辑:支持删除前后字符、删除整行、删除全部文本、覆盖模式输入等。
- 剪贴板操作:支持复制、剪切、粘贴以及撤销、重做操作。
- 灵活快捷键模拟:可直接模拟多种组合键操作,实现复杂文本处理逻辑。
适用于脚本化自动化输入和文本处理场景,能够实现精细化的文本操作,例如自动化表单填写、批量文本编辑、脚本化聊天输入等功能。
输入法控制
$input.showPicker()
打开输入法选择器列表,仅显示在系统已启用的输入法
$input.openSettings()
打开输入法设置界面
$input.isEnabled([packageName])
packageName{string} 输入法包名,可选,默认为当前应用自身- 返回 {boolean}
判断指定输入法是否已在系统中启用。
若不传参数,则默认检查 当前应用内置的输入法。
检查当前应用内置输入法是否已启用
if ($input.isEnabled()) {
toastLog("当前应用内置输入法已启用");
} else {
toastLog("当前应用内置输入法未启用");
}检查指定包名的输入法是否已启用
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
将当前应用内置输入法切换为系统默认输入法
if ($input.switchToInputMethod()) {
toastLog("已切换为当前应用输入法");
} else {
toastLog("切换失败,请检查是否已启用或权限是否足够");
}将指定输入法切换为系统默认输入法
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,默认删除一个字符。
示例:
$input.backspace(); // 删除光标前 1 个字符
$input.backspace(3); // 删除光标前 3 个字符$input.delete([count])
count{number} 可选,要删除的字符数量,默认1- 返回 {boolean}
删除光标后的字符(向后删除)。 如果未指定 count,默认删除一个字符。
示例:
$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) - 若传
start和end,则选中指定范围
$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}
获取光标后文本
示例
// =========================
// 🔧 输入法状态检查示例
// =========================
// 检查当前应用内置输入法是否已启用
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 及以上版本。
