关于本项目
ImGUI(即 Dear ImGui)是一个与平台无关的 C++ 轻量级跨平台图形界面库。我耗时半个月,将其完全内置到 AutojsPro 中,实现无缝一键调用,并对接了绝大部分常用接口。开发者可在 Autojs 中高度自由地自定义设计 ImGUI 界面。
目前该项目暂未对外开放,仅接受定制服务(交付完整成品软件)。
设备是否必须具备Root权限
非必须,ImGUI 可以通过 ADB 授权替代 Root 权限。我已在非 Root 设备上测试,仅需授予 ADB 权限即可正常使用。
示例Demo
刚对接好后,就迫不及待地写了个Demo,效果是真tm的出奇的无敌好
王者秒换装:一个已实现的 Demo 示例,展示 ImGUI 在 AutojsPro 中的应用。
具体演示视频可以看下面的特性!
特性
- 防截屏:防止界面被截图
- 防录屏:防止界面被录制(这是手机实录效果,肉眼还是看得到悬浮窗的)
- 触摸穿透:支持触摸事件穿透界面,悬浮窗不妨碍正常点击
- 纯C点击:额外写了纯C点击,脚本点击与手滑动不冲突
- 双向心跳验证:具备超强存活能力,永不被系统杀死
初始化ImGUI
该接口用于初始化 ImGUI,仅需调用一次即可。
类构造函数
ImguiPlus(context, params)
返回值
ImguiPlus
对象
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
context | context |
是 | 上下文 |
params | string[] |
是 | 初始化参数数组,见下表 |
params 参数详情
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
title | string |
是 | 窗口标题 |
posX | float |
是 | 窗口初始位置 X |
posY | float |
是 | 窗口初始位置 Y |
width | float |
是 | 窗口宽度 |
height | float |
是 | 窗口高度 |
theme | string |
是 | 窗口主题,可选值:Dark , Light , Classic , Pink , Blue , ModernDark , CyanDusk , OrangeDark , CrystalClear , VibrantNight , PurpleDream |
showCloseButton | boolean |
是 | 是否显示关闭按钮 |
transparent | boolean |
是 | 窗体是否透明 |
isWindowCollapsed | boolean |
是 | 是否收起窗体 |
fontSize | float |
是 | 窗口字体大小 |
更新ImGUI
该接口用于动态更新 ImGUI 窗口内容。
类方法
updateUI(String[] commands)
返回值
字符串或无返回值
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
commands | string[] |
是 | 更新内容数组,每项为单独命令 |
关闭ImGUI
该接口用于关闭 ImGUI。
类方法
shutdown()
组件的增加相关
增加标题栏 (addTabBar)
用于添加标题栏。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
tabIds | string[] |
是 | 标题栏的标题数组 |
flags | int |
是 | ImGuiTabBarFlags ,详见 ImGui 文档 |
defaultTabId | string |
是 | 默认展示的标题页标题 |
增加按钮 (addButton)
用于添加普通按钮。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 按钮 ID |
label | string |
是 | 按钮标题 |
width | float |
是 | 按钮宽度 |
height | float |
是 | 按钮高度 |
cornerRadius | float |
是 | 按钮圆角 |
posX | float |
是 | 按钮偏移位置 X |
posY | float |
是 | 按钮偏移位置 Y |
tooltip | string |
是 | 悬停时显示的提示文本 |
增加悬浮窗按钮 (addButtonEx)
用于添加独立于窗口的悬浮按钮。
参数
与 addButton
参数相同,见上表。
移除悬浮窗按钮 (removeButtonEx)
用于移除悬浮窗按钮。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 按钮 ID |
增加静态文本 (addText)
用于添加静态文本。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 文本 ID |
text | string |
是 | 文本内容 |
width | color |
是 | 文本颜色 |
posX | float |
是 | 文本偏移位置 X |
posY | float |
是 | 文本偏移位置 Y |
增加输入框 (addInputText)
增加输入框。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 输入框 ID |
initialText | string |
是 | 默认的文本 |
width | float |
是 | 输入框宽度 |
textColor | string |
是 | 文本颜色 |
editable | boolean |
是 | 是否可编辑 |
增加多行输入框 (addInputTextMultiline)
增加多行输入框。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 输入框 ID |
initialText | string |
是 | 默认的文本 |
rows | int |
是 | 最大显示行数(超过则自动展示滑动条) |
开启折叠条 (beginCollapsingHeader)
开启折叠条,在beginCollapsingHeader->endCollapsingHeader中间的组件都将被包含在此折叠条里
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
label | string |
是 | 折叠条标题 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
openByDefault | boolean |
是 | 是都默认展开 |
关闭折叠条 (endCollapsingHeader)
关闭折叠条
增加日志窗体 (addLogWindow)
增加日志窗体,用于显示日志,带滑动条,可清空和导出日志,使用appendLog
追加的日志才可显示到这上面
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 日志 ID |
width | float |
是 | 窗体宽度 |
height | float |
是 | 窗体高度 |
增加颜色采集器 (addColorPicker)
增加颜色采集器,用于采集颜色
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | string |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 颜色采集器 ID |
r | float |
是 | 红色分量 |
g | float |
是 | 绿色分量 |
b | float |
是 | 蓝色分量 |
a | float |
是 | 透明度分量 |
flags | int |
是 | 颜色采集器标志,具体标志可查看ImGUI文档 |
tooltip | string |
是 | 悬停时显示的提示文本 |
增加分隔线 (addSeparator)
增加分隔线
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | string |
是 | 目标标题栏 ID(空则加到所有标题栏) |
增加勾选框 (addCheckbox)
增加勾选框
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 勾选框 ID |
label | string |
是 | 按钮标题 |
initialState | boolean |
是 | 勾选框默认状态 |
tooltip | string |
是 | 悬停时显示的提示文本 |
增加进度条 (addSlider)
增加进度条
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 进度条 ID |
initialValue | float |
是 | 默认值 |
min | float |
是 | 最小值 |
max | float |
是 | 最大值 |
tooltip | string |
是 | 悬停时显示的提示文本 |
增加下拉框 (addComboBox)
增加下拉框
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 下拉框 ID |
items | string [] |
是 | 所有的下拉项的数组 |
initialSelection | int |
是 | 默认选中项 |
增加单选按钮组 (addRadioButtonGroup)
增加单选按钮组
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 单选按钮组 ID |
labels | string [] |
是 | 所有的单选项的数组 |
initialSelection | int |
是 | 默认选中项 |
horizontal | boolean |
是 | 是否水平显示 |
增加开关 (addSwitch)
增加开关
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 开关 ID |
label | string |
是 | 开关显示的文本 |
initialState | boolean |
是 | 默认状态 |
activeColorStr | string |
是 | 开状态时的颜色(#rrggbb ) |
inactiveColorStr | string |
是 | 关状态时的颜色(#rrggbb ) |
tooltip | string |
是 | 悬停时显示的提示文本 |
增加弹窗 (addPopup)
增加弹窗,模拟安卓alert和confirm弹窗
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 弹窗 ID |
title | string |
是 | 弹窗标题 |
content | string |
是 | 弹窗内容 |
positiveButton | string |
是 | 确认按钮文本 |
negativeButton | string |
是 | 取消按钮文本(为空时即不显示,代表alert) |
buttonPosX | float |
是 | 按钮偏移X |
增加选择弹窗 (addAlertChoicePopup)
增加选择弹窗,模拟安卓单选和多选弹窗
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 弹窗 ID |
title | string |
是 | 弹窗标题 |
content | string |
是 | 弹窗内容 |
items | string [] |
是 | 可选择的所有项的数组 |
isSingle | boolean |
是 | 是否单选 |
defaultSelected | int [] |
是 | 默认选中项 |
positiveButton | string |
是 | 确认按钮文本 |
buttonPosX | float |
是 | 按钮偏移X |
toast显示 (showToast)
toast显示,模拟安卓showToast
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
text | string |
是 | 显示的文本 |
duration | int |
是 | 显示的时长(毫秒) |
posX | float |
是 | 显示偏移X |
posY | float |
是 | 显示偏移Y |
fontSize | float |
是 | 显示的字体大小 |
cornerRadius | float |
是 | 显示的背景的圆角 |
增加帧率显示 (addFps)
增加帧率显示
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 帧率 ID |
threshold | string |
是 | 分界值,小于本值显示positiveColor ,反之negativeColor |
positiveColor | string |
是 | 颜色(#rrggbb ) |
negativeColor | string |
是 | 颜色(#rrggbb ) |
posX | float |
是 | 偏移X |
posY | float |
是 | 偏移Y |
增加表格 (addTable)
增加表格
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
sameLine | boolean |
是 | 是否与上个组件同一行 |
tabId | int |
是 | 目标标题栏 ID(空则加到所有标题栏) |
id | string |
是 | 表格 ID |
headers | string [] |
是 | 表格头标题数组 |
data | string [][] |
是 | 表格数据二维数组 |
各组件的值获取与设置相关方法
追加日志 (appendLog)
追加日志到日志窗体,显示日志在日志窗体上
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 要追加的窗体日志 ID |
log | string |
是 | 日志文本内容 |
typeOrColor | string |
是 | 日志类型(log ,warn ,info .debug )或者指定颜色(#rrggbb ) |
获取表格选中行 (getTableSelected)
获取表格选中行
返回值
字符串,选中行索引,多个选中行以,
拼接
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 表格 ID |
删除表格选中行 (deleteSelectedTableRows)
删除表格选中行
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 表格 ID |
修改表格选中行 (updateSelectedTableRows)
修改表格选中行
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 表格 ID |
newRowData | string [] |
是 | 要修改的新数据的数组,如果某列要保持原数据则放空即可 |
增加表格行数据 (addTableRow)
增加表格行数据
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 表格 ID |
rowData | string [] |
是 | 表格行数据的数组 |
获取表格的行列数 (getTableDimensions)
获取表格的行列数
返回值
字符串,行数与列数,用,
拼接
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 表格 ID |
获取表格单元格的值 (getTableDimensions)
获取表格某个单元格的值
返回值
字符串,单元格的值,空字符串一般代表没有这个单元格
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 表格 ID |
row | int |
是 | 行索引(从0计数) |
col | int |
是 | 列索引(从0计数) |
清空表格数据 (clearTable)
清空表格数据
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 表格 ID |
获取单选按钮组选中项 (getRadioButtonSelected)
获取单选按钮组选中项
返回值
字符串,选中项索引
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 单选按钮组 ID |
设置单选按钮组选中项 (setRadioButtonSelected)
设置单选按钮组选中项
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 单选按钮组 ID |
index | int |
是 | 选中项索引 |
获取开关状态 (getSwitchState)
获取开关状态
返回值
字符串,true或者false
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 开关 ID |
设置开关状态 (setSwitchState)
设置开关状态
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 开关 ID |
state | boolean |
是 | 开关状态 |
获取勾选框状态 (getCheckboxState)
获取勾选框状态
返回值
字符串,true或者false
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 勾选框 ID |
设置勾选框状态 (setCheckboxState)
设置勾选框状态
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 勾选框 ID |
state | boolean |
是 | 勾选框状态 |
获取进度条的值 (getSliderValue)
获取进度条的值
返回值
字符串,进度条当前的值
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 进度条 ID |
设置进度条的值 (setSliderValue)
设置进度条的值
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 进度条 ID |
value | float |
是 | 进度条的值 |
获取下拉框的选中项 (getComboBoxSelected)
获取下拉框的值
返回值
字符串,选中项的索引
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 下拉框 ID |
设置下拉框的选中项 (setComboBoxSelected)
设置进度条的值
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 下拉框 ID |
index | int |
是 | 下拉框的选中项索引 |
获取颜色采集器的颜色值 (getColorPickerValue)
获取颜色采集器的颜色值
返回值
字符串,r、g、b、a,用,
连接
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 颜色采集器 ID |
获取输入框内容 (getInputText)
获取输入框内容
返回值
字符串,输入框的内容
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 输入框 ID |
设置输入框内容 (setInputText)
设置输入框内容
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 输入框 ID |
text | string |
是 | 要设置的文本 |
获取多行输入框内容 (getInputTextMultiline)
获取多行输入框内容
返回值
字符串,多行输入框的内容
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 多行输入框 ID |
设置多行输入框内容 (setInputTextMultiline)
设置多行输入框内容
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
id | string |
是 | 多行输入框 ID |
text | string |
是 | 要设置的文本 |
各组件的回调事件
心跳验证 (onHeartbeatValidation)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | null |
无 |
data | null |
无 |
窗体被收起或者展开 (onWindowCollapsed)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | null |
无 |
data | boolean |
true/false, 窗体是否被收起 |
窗口被拖动 (onWindowDragged)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | null |
无 |
data | string |
"100,100",窗体被拖动到的x和y坐标 |
窗口被关闭(onWindowClosed)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | null |
无 |
data | null |
无 |
按钮被单击(onButtonClicked)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
按钮id |
data | null |
无 |
按钮被长按(onButtonLongClicked)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
按钮id |
data | null |
无 |
悬浮窗按钮被拖拽(onButtonDragged)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
悬浮窗按钮id |
data | string |
"100,100",悬浮窗按钮被拖动到的x和y坐标 |
输入框被点击(onInputClicked)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
输入框id |
data | null |
无 |
输入框文本被改变(onInputTextChanged)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
输入框id |
data | string |
输入框当前文本 |
日志被导出(onExportLogs)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
按钮id |
data | string |
要导出的所有日志文本 |
日志被清空(onLogCleared)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | null |
无 |
data | null |
无 |
颜色被改变(onColorChanged)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
颜色选择器id |
data | string |
r,g,b,a 以, 相连的字符串 |
勾选框状态被改变(onCheckboxStateChanged)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
勾选框id |
data | boolean |
当前勾选框状态 |
进度条被拖动(onSliderChanged)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
进度条id |
data | string |
当前进度条的值 |
下拉框选择项被改变(onComboBoxSelected)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
下拉框id |
data | int |
当前下拉框的选中项索引 |
单选按钮组选中项被改变(onRadioButtonSelected)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
单选按钮组id |
data | int |
当前单选按钮组的选中项索引 |
开关状态被改变(onSwitchStateChanged)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
开关id |
data | boolean |
当前开关状态 |
表格行被点击(onTableRowClicked)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
表格id |
data | string |
row(int)与selected(boolean)用, 连接,某行的选中状态 |
表格行被删除(onTableRowsDeleted)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
表格id |
data | null |
无 |
表格增加行(onTableRowAdded)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
表格id |
data | null |
无 |
表格更新行(onTableRowsUpdated)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
表格id |
data | null |
无 |
表格被清空(onTableCleared)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
表格id |
data | null |
无 |
弹窗确定按钮被点击(onPopupOk)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
弹窗id |
data | null |
无 |
弹窗取消按钮被点击(onPopupCancel)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
弹窗id |
data | null |
无 |
选择弹窗按钮被点击(onAlertChoiceSelected)
字段 | 类型 | 返回说明与示例 |
---|---|---|
id | string |
弹窗id |
data | string |
所有项的选中状态以, 连接:“true,false,true" |
其它附加方法
纯C点击 (cppClick)
实现纯 C 触摸点击,支持手滑点击并存,互不干扰。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
x | float |
是 | 坐标 X |
y | float |
是 | 坐标 Y |
t | float |
是 | 点击时长 |
设置全局透明度 (setAlpha)
设置窗口全局透明度。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
alpha | float |
是 | 透明度值 (0-1) |
设置窗体是否收起 (setWindowCollapsed)
设置窗体是否收起。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
collapsed | boolean |
是 | 是否收起 |
获取心跳 (getHeartbeatValidation)
用于检测 ImGUI 是否存活。
返回值
成功返回字符串 alive
参数
无
设置全局主题 (setTheme)
设置全局主题。
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
themeName | string |
是 | 主题名称,可选值:Dark , Light , Classic , Pink , Blue , ModernDark , CyanDusk , OrangeDark , CrystalClear , VibrantNight , PurpleDream |
设置窗口常见样式 (setStyleProperties)
设置窗口常见样式
参数
字段 | 类型 | 必须 | 说明 |
---|---|---|---|
framePaddingX | float |
是 | 窗口内边距X |
framePaddingY | float |
是 | 窗口内边距Y |
itemSpacingX | float |
是 | 项目间距X |
itemSpacingY | float |
是 | 项目间距Y |
windowRounding | float |
是 | 窗口圆角 |
scrollbarSize | float |
是 | 滚动条宽度 |
grabMinSize | float |
是 | 滑动条宽度 |