本帖最后由 roadma 于 2022-3-15 23:15 编辑
希望通过E程序完善的雷电模拟器命令行指令
1. 屏幕取色
2. 色彩判断
3. 屏幕截图(验证码需要)
4. 文本识别
...
这个帖子主要介绍的是如何进行模拟器屏幕取色, 没有太大的难度, 主要是考虑模拟器窗口在后台运行和最小化运行时的正确取色, 所以常规的通过窗口句柄取色的方案不行, 要利用模拟器本身的特点进行取色, 相关的介绍参见我的另外一篇帖子:ADB命令直接Android模拟器截屏通过控制台字符流回显
话不多说,直接上源码:
变量名 | 类 型 | 静态 | 数组 | 备 注 | ll | 字节集 | | | l1 | 字节集 | | | l2 | 字节集 | | | tmp | 文本型 | | | i | 整数型 | | | kk | 控制台对象 | | | cx | 整数型 | | | cy | 整数型 | | | 运行控制台程序 (“adb devices”, tmp, , )如果真 (寻找文本 (tmp, “127.0.0.1”, , 假) = -1 )运行控制台程序 (“adb connect 127.0.0.1”, tmp, , )kk. 取光标位置 (cx, cy )判断循环首 (寻找文本 (tmp, “connected”, , 假) = -1 且 i < 100 )运行控制台程序 (“adb connect 127.0.0.1”, tmp, , )延迟 (1000 )i = i + 1 kk. 输出 (cx, cy, 假, #控制台颜色 .墨绿, #控制台颜色 .黑色, “稍侯” + 到文本 (i ) + “秒, 正在连接模拟器...” + 字符 (13 ) + 字符 (10 )) 判断循环尾 ()如果真 (i ≥ 100 )返回 (假)ll = 运行2 (“adb shell screencap -p”, 0, 500 )调试输出 (取字节集长度 (ll )) l1 = { 13, 10 }l2 = { 10 }屏幕图像 = 字节集_子替换 (ll, l1, l2, , ) 返回 (真) 如果真 (取数组成员数 (lineInfo ) = 2 且 到大写 (lineInfo [1 ]) = “GETCOLOR”)如果真 (模拟器截屏字符流 (图片字节集 ) = 假)标准输出 (, “-1,-1,-1”)剪辑板_置文本 (“-1,-1,-1”)返回 (0 )调试输出 (“图片大小: ” + 到文本 (取字节集长度 (图片字节集)))w = 图片_取宽度 (图片字节集 )h = 图片_取高度 (图片字节集 )图片字节集 = 图片_转换Ex (图片字节集, 1, , 真)调试输出 (“图像尺寸: ” + 到文本 (w ) + “,” + 到文本 (h )) 如果真 (w < 1 或 h < 1 )标准输出 (, “-1,-1,-1”)剪辑板_置文本 (“-1,-1,-1”)返回 (0 )Pos = 分割文本 (lineInfo [2], “,”, )x = 到整数 (Pos [1 ])y = 到整数 (Pos [2 ])B = 图片字节集 [4 X w X (h - y - 1 ) + 4 × x + 55 ]G = 图片字节集 [4 X w X (h - y - 1 ) + 4 × x + 56 ]R = 图片字节集 [4 X w X (h - y - 1 ) + 4 × x + 57 ]输出调试文本 (到文本 (R ) + “, ” + 到文本 (G ) + “, ” + 到文本 (B )) 标准输出 (, 到文本 (R ) + “, ” + 到文本 (G ) + “, ” + 到文本 (B )) 剪辑板_置文本 (到文本 (R ) + “, ” + 到文本 (G ) + “, ” + 到文本 (B )) 返回 (0 )
这里需要注意的是, 模拟器在运行某些vpn程序时会定向127.0.0.1的地址, 此时控制台与模拟器的连接会中断, 所以在取色代码中会插入通讯连接的判断, 如果觉得每次取色前都要检查通讯连接不爽的话, 可以自己在代码中修改.
控制台运行后的窗口如下:
雷电命令扩展0.2.7z
(1.02 MB, 下载次数: 25)
|