HD开发手册
教程以官网为准
后面会出帖子教程
供大家学习使用
教程链接: 不定时更新
http://www.didacollege.com/site-list-39
B站:
https://space.bilibili.com/436340181
官网:
HD【RPG引擎库】交流群(3群):882724064
(有事请主动找群主和管理,群主和管理不会主动私聊任何人,请勿上当受骗!!!!)
(有事请主动找群主和管理,群主和管理不会主动私聊任何人,请勿上当受骗!!!!)
(有事请主动找群主和管理,群主和管理不会主动私聊任何人,请勿上当受骗!!!!)
功能:
1.自研驱动注入,模拟键鼠 ,读写内存相关操作,进程以及线程相关操作等.
2.自研接口注入模式框架.
3.目前支持 32 位/64位/ASCII/UNICODE(8个版本中控)<->32/64位 (目标程序)
4.还支持LUA编写,自定义模块,谷歌内置浏览器,主板机投屏,多线程框架模块,yolov5,等操作
5.支持易语言 C/C++ 火山 Python C# 炫语言 golong等语言(支持调用C++DLL的语言)
6.具体看对应的模块功能接口
备注:
仅供学习交流 切勿用作非法用途
最终解释权归<迪大学院>所有
HD平台升级工具界面:
HD引擎测试软件界面:
HD综合工具界面:
[TOP]
免责声明
一.
本软件完全出于个人兴趣爱好,由本人在业余时间开发,是一款安全,绿色,可靠的软件产品.
二.
利用本软件所做出的任何软件作品,和本人无关.
三.
本软件绝对不针对任何一款游戏或者游戏开发商,如果有人利用本软件开发非法游戏辅助,本人将保留追究其民事以及刑事责任的权利.
四. 因使用本软件而引致的任何意外、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其所造成的任何损失,本人概不负责,亦概不承担任何民事或刑事法律责任。
五.
当你第一次开始使用本人所提供的任何软件及资源的那一刻起就将被视为对本声明全部内容的认可。同时您必须认可上述免责条款,方可使用本软件及资源。如有任何异议,建议立刻删除本软件及资源并且停止使用.
六.
以上内容,本人保留最终解释权。
[TOP]
所有接口返回值 :
备注:也可以可通过工具后台查看
=============================================
需要拿到json字符串信息,请调用接口后调用HCEnv_GetRetJson
=============================================
接口返回值: 小于等于0 为错误代码 大于 0为成功 (驱动接口返回值在下面↓)
=============================================
=============================================
验证接口返回值: 登录操作 大于等于0 为剩余点数
=============================================
#define
LOGINERROR_错误 -2000 //如果大于这个值也表示成功
可能返回的是点数不足 小于这个值表示错误
#define LOGINERROR_客户端数据为空 -2001
#define
LOGINERROR_账号卡密不匹配 -2002
#define LOGINERROR_登记登录数据失败 -2003
#define
LOGINERROR_客户端数据太多 -2004
#define LOGINERROR_未找到客户端数据 -2005
#define
LOGINERROR_账号类型为空 -2006
#define LOGINERROR_账号扣点失败 -2007
#define
LOGINERROR_更新客户端加载信息失败 -2008
#define LOGINERROR_账号点数不足 -2009
#define
LOGINERROR_查询客户端加载信息失败 -2010
#define LOGINERROR_试用卡 -2011
#define
LOGINERROR_发布版本无法使用测试账号 -2012
#define LOGINERROR_老版本丢弃 -2013
#define LOGINERROR_数据错误 -2014
#define ERROR_其他值返回值(ret) (ret)
=============================================
驱动接口返回值: 大于等于0 为成功 特殊:-1068为驱动已经安装 可以忽视!
=============================================
//驱动宏返回值
//宏返回值
//宏返回值
//这个值必须大于0 用在最开始加载驱动的返回
小于0会蓝屏!!
#define LOAD_SUCCESS 0x00000001
//下面的值是其他接口自定义返回值 必须小于0
大于0统一返回的都是0!!
#define DRERROR_SUCCESS 0x00000002
#define DRERROR_SUCCESSEX
0xE0000000
#define DRERROR_SUCCESSTEST 0xE0000001
#define DRERROR_EXIST
0xE0000002
#define DRERROR_FAID 0xE0000003
#define DRERROR_无法打开进程
0xE0000004
#define DRERROR_无效的句柄表 0xE0000005
#define DRERROR_用户验证失败
0xE0000006
#define DRERROR_内存类型不符 0xE0000007
#define DRERROR_超出内存范围
0xE0000008
#define DRERROR_隐藏内存失败 0xE0000009
#define DRERROR_查询内存失败
0xE000000A
#define DRERROR_申请内存失败 0xE000000B
#define DRERROR_超出读写字节
0xE000000C
#define DRERROR_分配内存失败 0xE000000D
#define DRERROR_无效的缓冲区
0xE000000E
#define DRERROR_无法结束自身 0xE000000F
#define DRERROR_无法识别数据
0xE0000010
#define DRERROR_进程位数错误 0xE0000011
#define DRERROR_读写地址错误
0xE0000012
#define DRERROR_劫持线程失败 0xE0000013
#define DRERROR_X86DLL格式有误
0xE0000014
#define DRERROR_X64DLL格式有误 0xE0000015
#define DRERROR_无合适处理器
0xE0000016
#define DRERROR_未找到鼠标 0xE0000017
#define
DRERROR_未找到键盘 0xE0000018
#define DRERROR_未找到入口参数
0xE0000019//没有找到入口参数
#define DRERROR_输入缓冲区为空 0xE0000020//输入缓冲区为空
#define
DRERROR_未找到模块基址 0xE0000021//
#define DRERROR_未找到函数地址 0xE0000022//
#define ERROR_参数有误 0xE0000023//参数有误
=============================================
[TOP]
第二期新课程在线班-直播课
交流群:882724064
《HD C++实战X64课程(图色+内存
)国际服夜鸦》实战课程
为了给学学员补基础 10月20号开课
购买在线班的学员福利如下:
1.《C++ WIN32基础课程》
共177节课
2.《[迪大学院]UE5夜鸦专题数据课程》
3.价值500元的HD充值卡(单独账号)
交流群:882724064
1需要报名找我,人数够就开课
====请自行通过HD升级工具下载更新====
HD【2025050101】
1.优化验证处理
2.优化后台测试工具UI布局
====请自行通过HD升级工具下载更新====
HD【2025043001】
1.修复保护驱动加载问题*
2.测试账号限制不能使用定制驱动和相关核心组件*
3.修复内存模块表达式有个接口没有兼容最后不+]的情况*
4.HDTool用户后台工具优化界面库,全新界面皮肤*
5.预计后面给HDTool后台工具增加消费记录查询-包含机器码-点数消费-维护用户利益和查卡防盗号
====请自行通过HD升级工具下载更新====
HD【20250042801】
1.优化兼容win11系统24H2相关系统版本*
-全系列
2.添加读写接口初始化-针对部分游戏检查*
-HCHD_InitFastRW
3.HD驱动添加备用版本和定制版本接口-针对不同游戏使用不同驱动版本和组件*
-HCHD_LoadDrv2
-1:HDEx正式版本(云下发
正常驱动,无特殊处理)
0:HDExx备用版本(云下发 适合驱动快读读写遍历)
1:HDExxx定制版本(云下发
正常驱动,无特殊处理)
2:HDHOOK驱动(云下发 快速读写 VT无痕HOOK)
3:HDPP保护驱动(云下发
进程保护和隐藏等保护)
4:HDYOLOV识别(云下发 HYolov5 8 10 11
组件到当前路径并安装)
4.压缩发布版本库/调试版本 大小-减少50%~75%*
普通用户 ->VIP用户 ->定制版本
->动态代码
-x86 40M->22M
-x64
52M->26M
5.优化HD整体执行性能和效率和打开速度*
6.增加HD异常关闭退出回调-用于处理验证或者脚本失效等情况-让验证更优雅一些*
-防止国内网络不稳定断线导致的失效*
-HCEnv_SetShutDownCallBack
-typedef
__int32(__stdcall *ShutDownEventFunType)(__int32
code);
7.优化全局前台键鼠模式*
8.HD驱动增加强制关闭进程接口参数*
-HCHD_PPKill
9.优化验证*
10.增加虚拟机VNC键鼠模块-HDVNC*
-HCVnc_Connect
-HCVnc_Close
-HCVnc_MoveTo
-HCVnc_MoveToOffset
-HCVnc_LeftClick
-HCVnc_LeftDown
-HCVnc_LeftUp
-HCVnc_LeftDoubleClick
-HCVnc_RightClick
-HCVnc_RightDown
-HCVnc_RightUp
-HCVnc_WheelDown
-HCVnc_WheelUp
-HCVnc_KeyPress
-HCVnc_KeyDown
-HCVnc_KeyUp
-HCVnc_KeyPressStr
-HCVnc_SendString
11.增加yolov识别模块*-HDYOLOV(CPU
GPU版本
速度非常快)*
-HCYOLO_AddModel
-HCYOLO_AddModelFile
-HCYOLO_Identify
-HCYOLO_IdentifyByFile
-HCYOLO_IdentifyByMem
12.VT
无痕HOOK 注入模块 -HDHOOK
保护盾-过一切CRC*
-HCHDVT_AllocateMemory
-HCHDVT_FreeMemory
-HCHDVT_Read
-HCHDVT_Write
-HCHDVT_GetModule
-HCHDVT_GetModuleFun
-HCHDVT_Hook
-HCHDVT_RemoteCall
-HCHDVT_InjectX64
-HCHDVT_InjectX86
-HCHDVT_InstallPlugX64
-HCHDVT_InstallPlugX86
13.增加一种新的注入方式*
14.增加最强驱动级别隐藏保护进程-HDPP
保护盾*
-HCHDPP_Protect
15.增加一些异常捕捉*
16.给安装插件方式2和3增加无痕注入方式*
17.优化并增加一种鼠标移动轨迹类型3(直线波动)-过滑块检查*
18.优化DMA服务器占用和截图初始化*
====请自行通过HD升级工具下载更新====
HD【2025040301】
1.增加获取范围截图文件数据*
-HCCS_GetCaptureBmpRangeData
2.HD驱动键鼠扩展键的支持*
3.缓冲区大小扩展到1024*200=(0.2M)*
4.优化多线程窗口过程细节*
5.修改逻辑重启回调的时候卸载环境失败不会导致重启失效-之前会失效*
6.修复WIN10
14393系统版本的一个后台兼容问题*
7.优化DX键鼠相关逻辑X86X64(如:方向键等)*
8.增加开启截图兼容模式-(全屏前台截图
窗口序号指定0)*
9.优化多线程自定义消息注册时候的消息值的范围*
10.优化API HOOK模块
recv系列接口的缓冲区拦截机制*
11.极致优化HD驱动读写-实现百万级别(单线程)的读写效率*
12.增加HD驱动从指定模块获取函数接口地址*
-HCHD_GetModuleCallAddr
13.优化HD驱动接口参数检查-防止填错*
14.增加设置获取自定义数据接口-方便重开中控*
-HCInject_SetData
-HCInject_GetData
15.增加通过窗口序号获取窗口句柄*
-HCInject_GetHwnd
16.增加一些异常捕捉
====请自行通过HD升级工具下载更新====
HD【20250304.1】
1.优化多线程重启细节
-经过长期测试稳定
2.内存模块增加获取DLL导出函数地址
-HCM_GetModuleFunAddr
3.进一步缩小库大小
====请自行通过HD升级工具下载更新====
HD【20250228.1】
1.全面修复优化多线程模块
为了更好的稳定性和健壮性
方案:
-需要及时正常退出线程
-请在执行回调中多加
-多线程模块延迟接口(HCMT_SleepEx)/(HCMT_Sleep)
-运行状态接口(HCMT_IsRunning)
2.增加附加控制调试接口
-HCSD_SetAttachConsole
3.废除智能识字模块-基本用不上
4.增加几个HD返回值
#define
ERROR_卸载失败 -1226
#define ERROR_未完全开启 -1227
#define ERROR_逻辑异常 -1228
====请自行通过HD升级工具下载更新====
HD【20250225.1】
1.后台键鼠兼容24H2
win11.26100.3194系列系统
====请自行通过HD升级工具下载更新====
HD【20250222.4】
1.增加多线程重启扩展接口
-HCMT_MsgReStartEx-内置卸载环境
-方便操作
3.增加返回值
-ERROR_卸载失败 -1226
====请自行通过HD升级工具下载更新====
HD【20250222.3】
1.增加HD驱动批读写接口
HCHD_BeginRWEx
HCHD_RWEx
HCHD_EndRWEx
====请自行通过HD升级工具下载更新====
HD【20250222.2】
1.增加部分调试接口的日志信息
HCFS_FindStrMutilsAuto_Debug
2.后台键鼠兼容win11.22635.4945系列系统
====请自行通过HD升级工具下载更新====
HD【20250221.1】
1.多线程框架
-优化小细节
2.添加回调异常捕捉信息返回
-方便调试开发者的异常行为
3.增加多线程接口
-HCMT_IsCanStart
判断是否能开启新的
4.多线程模块增加重启中状态
-防止误操作多次重启
5.增加错误值
-ERROR_序号超出限制
-1220
-ERROR_已经重启 -1221
-ERROR_登录中无法重启 -1222
-ERROR_暂停中无法重启
-1223
-ERROR_操作中无法重启 -1224
-ERROR_强制关闭线程中无法发送
-1225
6.修正并增加一些开发文档描述
7.兼容D3D12后台截图模式
//D3D12
CAPTURETYPE_D3D12_1_x86 =
70,//UE
CAPTURETYPE_D3D12_2_x86 = 71,//U3D
CAPTURETYPE_D3D12_3_x86 =
72,//RGBX D3D12游戏通用
//D3D12
CAPTURETYPE_D3D12_1_x64 = 14,//UE
D3D12
CAPTURETYPE_D3D12_2_x64 = 15,//U3D D3D12
CAPTURETYPE_D3D12_3_x64 =
16,//RGBX D3D12 D3D12游戏通用
//
CAPTURETYPE_D3D12_Steam_x86 =
60,//steam游戏专用 steam游戏专用后台截图x64模式 D3D9 也可以是其他游戏 不一定只有steam才能用
CAPTURETYPE_D3D12_Steam_x64 = 61,//steam游戏专用 steam游戏专用后台截图x64模式 D3D9
也可以是其他游戏 不一定只有steam才能用
//
CAPTURETYPE_D3D12_NC_x86 = 62,//NC游戏
D3D12
CAPTURETYPE_D3D12_NC_x64 = 63,//NC游戏 D3D12
8.优化识别
====请自行通过HD升级工具下载更新====
HD【20250207.1】
1.优化心跳和多线程逻辑
-避免强制退出线程
-尽量多加HCMT_Sleep/HCMT_SleepEx/HCMT_IsRunning
2.提供HD易语言模块源码-可以自行修改接口导入和修改DLL名字
3.增加执行汇编执行CALL-通讯内存模块
-HCM_AsmCallX86
-HCM_AsmCallX64
-不同于HD驱动模块里面的远线程汇编调用CALL-不会被拦截
====请自行通过HD升级工具下载更新====
HD【20250131.2】
1.DMA超时时间设置-通过HCEnv_Init初始化接口设置
2.优化全局前台移动坐标计算*
3.修正开发文档相关描述*
-获取剪切板字符串*
4.多线程模块添加异常捕捉*
====请自行通过HD升级工具下载更新====
HD【20250131.1】
1.增加DMA虚拟机图色键鼠功能(直接外部读取操作键鼠图色)
-HCVMDMA_InitCapture
-HCVMDMA_Capture
-HCVMDMA_OpenCapture
-HCVMDMA_CloseCapture
-HCVMDMA_InitMouseKey
-HCVMDMA_MoveTo
-HCVMDMA_LeftDown
-HCVMDMA_LeftUp
-HCVMDMA_LeftClick
-HCVMDMA_LeftDoubleClick
-HCVMDMA_MiddleDown
-HCVMDMA_MiddleUp
-HCVMDMA_MiddleClick
-HCVMDMA_MiddleDoubleClick
-HCVMDMA_RightDown
-HCVMDMA_RightUp
-HCVMDMA_RightClick
-HCVMDMA_RightDoubleClick
-HCVMDMA_WheelUp
-HCVMDMA_WheelDown
-HCVMDMA_KeyDown
-HCVMDMA_KeyUp
-HCVMDMA_KeyClick
-HCVMDMA_SendUnicode
-HCVMDMA_SendAscii
等接口
2.下个预告版本:HD兼容X86X64静态库版本
-插件可以静态编译到中控中
-体积变的更小,更防检测
====请自行通过HD升级工具下载更新====
HD【20250128.1】
1.优化HCWIN_FindTopWindow参数判断-允许“”表示空*
2.优化一下安装插件方式三的返回值-1216*
3.补齐返回值表*
4.增加后台绑定模式
2 3-现有模式 0 1 2 3
共4种针对不同进程而选择*
5.工具显示当前插件版本*
6.更新服务器验证版本
7.修复倒计时显示问题*
8.取消内存池调试打印信息*
9.GDK开发手册分类前缀显示在后面-方便查看*
HD【20250116.1】
1.优化范围CRC校验值的json字符串
2.优化设置字库文件兼容绝对路径
3.优化剪切板操作同时取消utf-8类型
4.完善HD综合工具
5.优化安装插件打开回调返回值(PID或窗口句柄)的覆盖策略-具体看开发文档
6.优化安装插件后的清除缓存操作
7.修正文档描述信息
8.优化VmDma_StartServer接口最后一个路径参数
兼容指定自定义进程名(全路径\\XXXX.exe)
XXXX.exe为自定义进程名
不指定进程名表示使用内置进程名(全路径\\HDVMDma.exe )
不指定路径(当前中控exe根目录\\HDVMDma.exe)
HD【20250110.1】
1.识字接口增加4个参数,可以单独设置了* 废除全局设置
水平间距
垂直间距 周围占比 是否独占11
int spaceX = 11, int spaceY = 11,double groundRate = 0.1,
BOOL bOne11 = TRUE
2.修正开发文档接口说明*
-HCFS_FindStrMutilsAutoEx
最后2个参数顺序描述反了
3.增加支持自定义HD插件DLL名字接口-进一步过检测*
-HCInject_SetPlugin
4.优化服务器验证*
5.修复截图功能打开查看图片*
6.优化重连过程中设置进程位数*
7.增加指定某个序号绑定的进程位数接口*
-HCEnv_SetProcessTypeEx
8.找图找色增加寻找方向参数-dirType*
-HCFP_FindColor
-HCFP_FindColors
-HCFP_FindPic
-HCFP_FindPicEx
-HCFP_FindColorByFile
-HCFP_FindColorsByFile
-HCFP_FindPicByFile
-HCFP_FindPicExByFile
-HCFP_FindColorByMem
-HCFP_FindColorsByMem
-HCFP_FindPicByMem
-HCFP_FindPicExByMem
-HCFP_FindPicExFromMem
-HCFP_FindColorsOffset
-HCFP_FindColorsOffsetByFile
-HCFP_FindColorsOffsetByMem
9.优化一些扩展键*
10.优化测试工具增加相关测试功能*
11.更新DMA服务器版本(6.0)*
12.增加综合测试工具*
13.增加绑定模式2*
-2内部流程不同于0模式(如果一些按键失效或者错乱或者小键盘失效,可以尝试这个2)*
14.优化网络验证*
15.修正文档SDK
HCWIN_FindWindowEx 窗口句柄类型*
HD【20241230.1】
1.增加一个返回最大开数的接口-方便查看*
-HCEnv_GetMaxWindowNum
2.兼容版本*
3.优化目标进程位数绑定到窗口序号-再初始化序号的时候用全局进程位数绑定到序号上*
4.增加DMA虚拟机指定内存地址范围找特征接口*
-HCVMDMA_FindCodeX86Ex
-HCVMDMA_FindCodeX64Ex
5.优化OCR返回该为json数组-防止“|”分隔符与原来文本重复的情况*
6.修改接口名前缀*
-HDEnv_GetGlobalWinExIndex--->HCEnv_GetGlobalWinExIndex
-HDEnv_GetWinExIndex--->HCEnv_GetWinExIndex
7.修复特征码找不到异常崩溃的问题*
8.DMA模块增加获取服务器版本接口*
-HCVMDMA_GetVersion
-HCVMDMA_IsVersion
9.优化后台截图获取
10.优化获取后台BMP数据
HD【20241229.1】
1.优化HCFP_FindColor的json返回*
2.修复SDK文档一些文本描述问题*
3.优化安装插件一个参数赋值和返回值句柄判断*
4.增加获取<窗口扩展序号>和<全局窗口扩展序号>接口-方便一个序号控制多个进程*
4.2窗口扩展序号适用场景:
-HDEnv_GetWinExIndex
-窗口序号可以同时控制游戏+登录器(共2个进程)
-防止之前进程切换带来的麻烦事,相当于游戏进程的助手来控制额外的进程(登录器)
4.3全局窗口扩展序号适用场景:
-HDEnv_GetGlobalWinExIndex
-中控可以单独控制登录器,不在需要和游戏序号重复了
-防止之前进程切换带来的麻烦事,相当于中控进程的助手来控制额外的进程(登录器)
5.增加多点找色*
-HCFP_CmpColorExs
-HCFP_CmpColorExsByFile
-HCFP_CmpColorExsByMem
6.增加后台截图数据获取失败接口-用于判断辅助性判断识别接口*
-HCCS_IsCaptureValid
7.更新优化多开数限制-从原有的31开变为62开*
以下是序号范围说明:
两种模式:
第一种:共享模式可以30开
-0中控序号
-1~30
窗口序号
-31 中控序号的副窗口序号(助手)
-32-61
窗口序号的副窗口序号(助手)
第二种:独立模式(无助手)可以60开
-0中控序号
-1~30 窗口序号
-31
无用
-32-61
窗口序号
8.修改多开数策略*
测试账号仅仅只能调试模式使用并且只能单开
正式账号不再受限
9.优化内存池释放内存接口-加一个窗口序号参数
-HCCS_FreeMemPool
HD【20241221.1】
1.移除一些调试信息
2.工具增加扩展接口模块测试按钮和代码自动生成
3.修复一些扩展犍失效问题-小键盘方向键等
HD【20241219.1】
1.增加HD扩展接口模块-方便操作
-二次封装接口,省去了自己封装通讯安装插件流程
-分3类共7种安装插件方式
-HDEX_InstallPlugin1
-HDEX_InstallPlugin2
-HDEX_InstallPlugin3
2.修复win11后台绑定细节
HD【20241217.1】
1.增加虚拟机DMA特征码搜索接口
-HCVMDMA_FindCodeX86
-HCVMDMA_FindCodeX64
HD【20241215.1】
1.多线程状态机模块增加回溯状态接口
-HCMT_RetraceStatus
2.增加获取后台/前台鼠标位置接口
-HCMKB_GetMousePos
3.增加打开进程命令-扩展接口
-HCSYS_RunAppExxxx
HD【20241212.2】
1.开放调试版本32位普通注入64程序接口
-之前是发布版本才能调用
2.自定义插件增加特征码搜索接口-方便操作
3.同步上线炫语言版本
HD【20241212.1】
1.继续增加虚拟机DMA模块接口
-HCVMDMA_ServerIsStart
-HCVMDMA_CloseServer
2.工具增加DMA相关的测试功能
-一个虚拟机代表一个窗口
3.优化状态机增加优先级策略-使得自由度更高
-可以回溯状态
4.优化多线程模块-内部超时强制结束线程时间改为60秒-之前30秒
-使用多线程延迟接口能即使检查标志
-能正常退出线程就正常退出否则强制结束
5.优化强制结束线程锁的问题-增强稳定性
-防止死锁的一切可能性
HD【20241211.1】
1.继续增加虚拟机DMA模块接口
-HCVMDMA_Close
2.优化内存池
HD【20241210.1】
1.继续增加虚拟机DMA模块接口
-HCVMDMA_ReadBytes
-HCVMDMA_WriteBytes
-HCVMDMA_GetBaseModule
-HCVMDMA_GetModule
-HCVMDMA_ReadFloat
-HCVMDMA_ReadDouble
-HCVMDMA_WriteFloat
-HCVMDMA_WriteDouble
HD【20241209.1】
1.增加虚拟机DMA模块接口-执行CALL-支持线程
-HCVMDMA_GetProcAddr
-HCVMDMA_ShellCodeInitX64
-HCVMDMA_RunShellCodeX64
-HCVMDMA_ShellCodeInitX86
-HCVMDMA_RunShellCodeX86
HD【20241208.1】
1.增加虚拟机DMA模块-物理机读写虚拟机
-HCVMDMA_StartServer
-HCVMDMA_Init
-HCVMDMA_GetPid
-HCVMDMA_Read
-HCVMDMA_Write
2.移除多任务控制器模块-单独编译成静态库使用
HD【20241207.1】
1.增加多线程模块延迟扩展接口
-HCMT_SleepEx
HD【20241206.1】
1.文档添加上捕捉异常调用堆栈
-HCHD_CatchException
2.额外添加设置字库接口-省去遍历
-HCFS_SetDictFileEx
3.优化内存池
4.优化识别接口-捕捉异常方便调试
HD【20241130.1】
1.增加状态机延迟接口
-HCMT_StatusSleep
HD【20241129.2】
1.优化多线程模块-更细致
HD【20241129.1】
1.增加状态机模块-配合多线程模块实现快速开发
-HCMT_IsStatus
-HCMT_EnableStatus
-HCMT_StartStatus
-HCMT_ChangeStatus
-HCMT_AddStatus
-HCMT_GetStatus
HD【20241128.1】
1.优化多线程延迟等待接口
HD【20241127.2】
1.Tem智能识图返回json增加"size"字段信息-去重复容器前的大小
2.优化多线程模块更新UI调用后清除之前缓存文本
HD【20241127.1】
1.优化动态识图结果重叠的情况-内部过滤
2.优化后台键鼠代码细节
HD【20241126.1】
1.优化RAW和3D游戏镜头移动
HD【20241125.1】
1.增加多线程模块单独控制主副接口
-HCMT_SetPauseEx
-HCMT_SetRecoverEx
HD【20241124.2】
1.兼容23H2_win11_22631_2861(X86X64)
HD【20241124.1】
1.增加多线程模块状态获取接口
-HCMT_IsPause
-HCMT_IsStop
-HCMT_GetState
HD【20241123.1】
1.优化某些容易被第三方驱动屏蔽的接口-解决冲突
HD【20241122.1】
1.优化HOOK模块-避免一些保护游戏导致不触发回调
HD【20241121.1】
1.优化主线程响应速度
2.增加前台后台截图随意动态切换-方便处理不同场景
HD【20241119.1】
1.日常维护
2.优化OCR重叠字问题
HD【20241118.1】
1.日常维护
2.修复ocr内存释放问题
3.驱动无痕注入兼容中文进程名
HD【20241114.1】
1.兼容各大反外挂引擎
2.日常维护
HD【20241113.1】
1.优化智能识图-微调参数
2.文档案例
3.优化插件兼容easy反外挂引擎(如:新世界)
4.新增NC平台后台截图模式(如:天堂W)
CAPTURETYPE_D3D9_NC_x64
= 46,//NC游戏
CAPTURETYPE_D3D11_NC_x64 = 47,//NC游戏
HD【20241110.2】
1.兼容WIN10_19044_全系小版本
2.增加几篇相关识字文档案例-方便微调参数提高准确率
HD【20241110.1】
1.优化获取剪切板数据
2.增加浮点数转整数值的浮点数形式-方便兼容其他语言
-HCM_FloatTakeInt
3.增加执行启动控制器程序取返回值信息
-HCSYS_RunAppGetRet
HD【20241107.1】
1.HCFS_SetCharSpaceHV默认值改为水平11垂直11
2.日常维护
3.优化后台变前台会自动解绑
HD【20241106.1】
1.兼容win10_1803.17137.1304
2.绑定窗口增加一个前台属性-方便之前前台接口操作操作
绑定属性:"normal"或"Normal"
说明
:
2.1.绑定了这个属性表示相对于绑定的窗口的客户区坐标,同时后台属性全部消失,表示窗口前台
2.2.如果没有绑定normal
表示相对于屏幕的绝对坐标,同时还能使用后台键鼠-这种情况前台后台都可以用
3.优化多点找色接口返回范围取色数量接口
-HCFP_FindColors
4.绑定谷歌如果无法后台GDI截图-请关掉谷歌加速
5.增加主板机重启adb接口和IP连接
-HCSC_ResetAdb
6.后台工具增加相关测试按钮
HD【20241104.1】
1.优化内存地址描述格式
相对偏移]+x]+y]+z
取地址
相对偏移]+x]+y]+z]
取地址值
2.优化后台暂停有些游戏不能点击的问题
3.增加主板机操作接口
HCSC_SetPath
HCSC_QueryDevices
HCSC_ConnectDevices
HD【20241102.1】
1.增加steam游戏专用后台截图x64x86模式
CAPTURETYPE_D3D9_Steam_x64
= 42
CAPTURETYPE_D3D11_Steam_x64 = 43
HD【20241101.1】
1.优化枚举窗口相关接口返回值-未找到返回0
-HCWIN_EnumWindowByProcessId
-HCWIN_EnumWindow
-HCWIN_EnumProcess
-HCWIN_EnumWindowByProcess
2.兼容win10_19045.5011
HD【20241031.1】
1.兼容win10_19042.789
2.兼容win10_19045.3448
3.兼容win10_19045.3758
HD【20241030.1】
1.兼容win10_1903.18362.239
2.兼容win11_23H2.22631.4317
HD【20241029.1】
1.兼容19043.928
2.日常维护优化
HD【20241024.1】
1.增加HD驱动接口从模块获取函数地址
-HCHD_GetModuleCallAddr
2.增加排序方向类型2
-从右到左
从上到下 (单点找色)
3.优化代码
4.增加后台截图缓存获取失败判断接口
-HCCS_IsCaptureValid
HD【20241023.1】
1.优化处理一些重连细节-更稳定更安全
2.增加获取最后一个返回值接口-用于调试
-HCEnv_GetRetValue
3.优化一些输出调试信息
4.多线程模块增加一个额外参数
-HCMT_InitProcessEx
5.增加驱动验证
HD【20241021.1】
1.增加窗口排序
-HCWIN_SortWindows
2.优化关闭截图和解绑后台判断进程是否存在
3.优化暂时恢复判断进程是否存在
HD【20241020.1】
1.发布
2.测试账号只能用于32位调试版本(包括heart 111
账号)
3.发布版本账号需要充值才能获取(享受全部功能和全版本)
HD【20241019.1】
1.增加json返回信息 w h 和单个返回x y w
h
-HCFS_FindStrMutil
-HCFS_FindStrMutilVPoints
-HCFS_FindStrMutilsHVPoints
-HCFS_FindStrMutilsEx
-HCFS_FindStrEx
-HCFS_FindStrMutilsEx
-HCFS_FindStrMutilsExx
-HCFS_FindStrMutil
-HCFS_FindStr
-HCFS_FindStrEx
2.增加设置11行中
是否只有一个字
-HCFS_IsOne11
3.增加 17 18
19窗口状态设置
4.工具增加相关全局设置参数(窗口系统界面)
5.优化1607版本的后台截图
6.优化强制结束线程和通讯机制更稳定
7.增加识字周围像素占比设置
-HCFS_GroundRate
HD【20241018.1】
1.优化OCR和拼接字符串识字速度更快
2.OCR以及识字全部接口增加排序类型参数dirType-方便后面增加排序算法(具体看文档)
-HCFS_Ocr
-HCFS_OcrByFile
-HCFS_OcrByMem
-HCFS_FindStr
-HCFS_FindStrMutil
-HCFS_FindStrMutilVPoints
-HCFS_FindStrMutilVPointsByFile
-HCFS_FindStrMutilVPointsByMem
-HCFS_FindStrMutilHVPoints
-HCFS_FindStrMutilHVPointsByFile
-HCFS_FindStrMutilHVPointsByMem
-HCFS_FindStrEx
-HCFS_FindStrExx
-HCFS_FindStrMutilsEx
-HCFS_FindStrMutilsExx
-HCFS_FindStrMutilsAuto
-HCFS_FindStrMutilsAutoEx
-HCFS_FindStrMutilsAutoByFile
-HCFS_FindStrMutilsAutoByFileEx
-HCFS_FindStrMutilsAutoByMem
-HCFS_FindStrMutilsAutoByMemEx
3.优化D3D11后台截图-防止与部分游戏冲突
4.修复有概率PID拿不到的情况
5.增加部分识字接口的json返回信息-更多信息(具体看文档)
-FindStr
-HCFS_FindStrEx
-HCFS_FindStrExx
6.优化识字接口中拼接字符串的算法
-HCFS_FindStrMutilsAutoXXX
7.HCFS_SetCharSpaceHV接口的字水平间距改为5像素
8.相关像素识图接口增加排序类型参数-dirType
-HCFP_FindColor
-HCFP_FindColors
-HCFP_FindPic
-HCFP_FindPicEx
-HCFP_FindColorByFile
-HCFP_FindColorsByFile
-HCFP_FindPicByFile
-HCFP_FindPicExByFile
-HCFP_FindColorByMem
-HCFP_FindColorsByMem
-HCFP_FindPicByMem
-HCFP_FindPicExByMem
-HCFP_FindPicExFromMem
HD【20241017.1】
1.优化OCR速度更快
2.OCR接口增加排序类型参数
-HCFS_Ocr
-HCFS_OcrByFile
-HCFS_OcrByMem
HD【20241016.2】
1.优化线程绑定
HD【20241016.1】
1.收费版本
2.清空之前账号记录
3.限制测试账号仅调试版本使用
HD【20241013.1】
1.优化识字和ocr(拼接字符串模式)
-HCFS_FindStr
-HCFS_FindStrEx
-HCFS_FindStrExx
-HCFS_FindStrMutilsAuto_Debug
-HCFS_FindStrMutilsAuto
-HCFS_FindStrMutilsAutoEx
-HCFS_FindStrMutilsAutoByFile
-HCFS_FindStrMutilsAutoByFileEx
-HCFS_FindStrMutilsAutoByMem
-HCFS_FindStrMutilsAutoByMemEx
2.修改识字OCR返回值格式-增加坐标信息
3.增加字间距设置接口
-HCFS_SetCharSpaceHV
HD【20241012.2】
1.HD驱动增加提权
-HCHD_PcrocessRoot
-HCHD_HandleRoot
2.提供配套过游戏保护检测CE
3.增加窗口外部矩形绘制-为了调试追逐窗口
-HCSD_DrawWinodws
HD【20241012.1】
1.增加窗口收费模式-说明见群公告
-预计本月15号开始收费
-测试账号找管理获取
-删除之前所有用户记录
-充值用户会按照之前的充值金额自动到账
2.加强验证校验-发布版本自带防破解
HD【20241010.1】
1.优化调试模式-方便调试
2.增加cmd命令取返回值接口-方便操作主板机模块
-HCSYS_GetCmdRet
HD【20241010.1】
1.优化调试模式-方便调试
2.增加cmd命令取返回值接口-方便操作主板机模块
-HCSYS_GetCmdRet
HD【20241009.1】
1.极致优化响应速度(高效,低耗,稳定,多线程安全)
经测试:
传统算法找图识字:
-基本识别全图在50ms内
-区域识别在5ms内
-内存模块读写0ms延迟(之前延迟很高)
2.测试工具增加相关耗时信息打印
HD【20241008.1】
1.优化通讯代码
HD【20241005.1】
1.继续对已有接口(几个指定范围tem智能识图)增加(全部找出)参数
-FindRangeImageTem(A/W)
-FindRangeImageTemByFile
-FindRangeImageTemByMem
-FindRangeImageTemFromMem
HD【20241004.1】
1.优化插件初始化接口(方便主板机接入)
2.几个全图tem智能识图增加是否全部找出所有否则找出最大的置信度那个
-返回json增加图片索引信息(%d
%d %d %d %d
%f)
-HCFI_FindImageTemA
-HCFI_FindImageTemW
-HCFI_FindImageTemByFile
-HCFI_FindImageTemByMem
-HCFI_FindImageTemFromMem
3.优化CPU帧数-防止解绑崩溃
HD【20241003.1】
1.优化加载驱动的时候DLL接口获取失败的情况(增加容错率)
2.日常维护优化HD驱动
HD【20241002.1】
1.兼容19043.964
2.增加前台键鼠模块-窗口序号-1表示前台-涉及到的接口如下:
HCMKB_MoveTo
HCMKB_LeftDown
HCMKB_LeftUp
HCMKB_LeftClick
HCMKB_LeftDoubleClick
HCMKB_RightDown
HCMKB_RightUp
HCMKB_RightClick
HCMKB_RightDoubleClick
HCMKB_MiddleDown
HCMKB_MiddleUp
HCMKB_MiddleClick
HCMKB_MiddleDoubleClick
HCMKB_WheelDown
HCMKB_WheelUp
HCMKB_KeyDwon
HCMKB_KeyUp
HCMKB_KeyPress
HCMKB_SendStringW
HD【20241001.1】
1.优化插件版本-全面兼容(共8个版本)
X86X64-ascii/unicode
4个发布版本
X86X64-ascii/unicode
4个调试版本
2.插件兼容64位//version!
修改内容:
------------------------------------------HOOK模块
HDHK_InterceptApi:
__int32
回调地址 ->__int64 回调地址
__int32 附加参数 ->__int64
附加参数
HDInterRecv::HandleCallBack
HDInterRecv::HandleHookCallBack
------------------------------------------心跳模块
HCEnv_AttachHeart:
__int32
funCallbackAddr->__int64
funCallbackAddr
------------------------------------------接受模块
HCEnv_SetHandleEventCallBack:
__int32
funCallBack->__int64
funCallBack
------------------------------------------线程强制结束
HCEnv_TerminateThreadEx:
__int32
threadHandle-> __int64
threadHandle
------------------------------------------shellcode模块
HCSH_GetShellCode:
__int64
返回机器码字节大小变量的地址->__int32 返回机器码字节大小变量的地址
__int64 错误1变量的地址->__int32
错误1变量的地址
__int64 错误2变量的地址->__int32
错误2变量的地址
------------------------------------------截图模块
HCCS_OpenCSEx:
__int32
hwnd ->__int64
hwnd
------------------------------------------GAME模块
HC_HookMainThread:
__int32
窗口句柄-> __int64
窗口句柄
------------------------------------------HD驱动模块
HCHD_MousePressEx:
__int32
hwnd->__int64 hwnd
HCHD_MouseDown:
__int32 hwnd->__int64
hwnd
HCHD_MouseUp:
__int32 hwnd->__int64
hwnd
------------------------------------------HN驱动模块
HCN_NormalInstallPlugX86Ex:
__int32
hwnd->__int64 hwnd
HCN_NormalInstallPlugX64Ex:
__int32 hwnd->__int64
hwnd
------------------------------------------键鼠模块
HCMKB_Bind:
HCMKB_BindEx:
HCMKB_BindModeEx:
HCMKB_SwitchBind:
HCMKB_SwitchBindEx:
HCMKB_SwitchBindModeEx:
HCMKB_SendStringF:
HCMKB_SendDeleteTextF:
HCMKB_SendKeyDownF:
HCMKB_SendKeyUpF:
HCMKB_SendKeyPressF:
__nt32
hwnd->__int64
hwnd
------------------------------------------窗口模块
所有接口窗口句柄类型变动
__nt32
hwnd->__int64 hwnd
__nt32 parentHwnd>__int64
hwnd
-------------------------------------------------------------
HD【20240930.1】
1.整体优化插件文件大小
HD【20240929.1】
1.优化CPU帧数动态调整-稳定帧数
HD【20240928.2】
1.优化CPU帧数设置
HD【20240928.1】
1.增加按键相关接口-适合单独处理某个子控件(例:Edit
RichEdit等)
-HCMKB_SendKeyDownF
-HCMKB_SendKeyUpF
-HCMKB_SendKeyPressF
-HCMKB_SendDeleteTextF
HD【20240926.1】
1.优化序号(内部自动转换主序号)
2.兼容系统19044.4894小版本
其他版本不兼容直接反馈给群主
HD【20240923.2】
1.优化多线程模块
2.增加错误信息
HD【20240923.1】
1.测试工具增加多线程模块测试页面
HD【20240922.1】
1.增加HD中控多线程模块
-快速开发
-更稳定的兼容HD接口(防止各种语言的差异性导致中控不稳定)
-HDMT_InitProcess
-HDMT_InitOperate
-HDMT_RegisterMessage
-HDMT_MsgSend
-HDMT_MsgPost
-HDMT_MsgStart
-HDMT_MsgStop
-HDMT_MsgReStart
-HCMT_MsgUpdateUI
-HCMT_MsgStepText
-HDMT_Start
-HDMT_SetAllPause
-HDMT_SetAllRecover
-HDMT_SetAllStop
-HDMT_SetPause
-HDMT_SetRecover
-HDMT_SetStop
-HDMT_Sleep
-HDMT_IsRunning
-HCMT_GetStateString
HD【20240921.1】
1.优化测试工具的抓图功能
-局部抓图
-全屏抓图
-局部放大
-等
HD【20240919.2】
1.优化项目编译环境C++14
HD【20240919.1】
1.优化验证
HD【20240916.2】
1.修复谷歌内置浏览器操作
HD【20240916.1】
1.修复某个坐标显示问题
2.优化自定义插件代码
3.兼容19041.1415系统
4.取消部分调试信息
HD【20240914.1】
1.增加免环境yolov5相关模块接口
-HCYOLO_SetModelFile
-HCYOLO_SwitchModelFile
-HCYOLO_Excute
-HCYOLO_ExcuteByFile
-HCYOLO_ExcuteByMem
2.修改HD驱动接口名字
-HCHD_PHIDE->HCHD_PHide
-HCHD_PSHOW->HCHD_PShow
3.优化通讯
HD【20240913.1】
1.增加yolo相关模块接口
HD【20240912.1】
1.增加HD驱动判断地址是否有效接口
-HCHD_AddrIsRead
2.增加HD驱动进程窗口保护接口
-HCHD_PP
3.增加HD驱动进程隐藏接口
-HCHD_PSHOW
-HCHD_PHIDE
4.增加进程伪装接口X86X64
-HCWIN_CamouflageProcess
5.测试工具增加新接口测试按钮
HD【20240911.1】
1.修复X86任意HOOK模块
2.优化通讯
HD【20240910.4】
1.测试工具找字界面优化
2.优化接口HCFP_GetColor
HD【20240910.3】
1.优化字库调用-支持多线程
HD【20240910.2】
1.优化任意HOOK X64模块-兼容更多情况
HD【20240910.1】
1.优化修复多开通讯问题
HD【20240909.1】
1.优化HD插件通讯-极大的降低CPU使用率
HD【20240907.1】
1.增加IP代理模块-sock5/ss
HD【20240902.1】
1.增加移动轨迹设置相关参数接口
HCMKB_SetRealMouse
2.工具增加轨迹调试功能
HD【20240901.2】
1.修复内存池几率错误
2.增加内置验证时长
HD【20240901.1】
1.修复智能范围找图返回坐标问题
HD【20240830.1】
1.更换服务器-更稳定
HD【20240827.2】
1.优化多点偏移找色
HD【20240827.1】
1.优化DX后台鼠标按键
HD【20240826.1】
1.版本维护-重大更新
2.火山模块发布
3.火山课程开始录制
HD【20240825.2】
1.修复读取整数接口
-HCM_Read
HD【20240825.1】
1.修改HCInject_GetPreWinIndex接口返回值说明
HD【20240824.1】
1.优化后台按键-兼容性更全面
2.优化输入法文本输入接口-部分窗口需要激活窗口
-SendString
-SendString2
3.优化字符串最后一个有“|”分隔符导致失败的情况
4.优化激活窗口类型12
8 1
5.优化测试工具显示
6.优化后台键鼠输入绑定属性
-dx.mouse.input.lock.api
-dx.mouse.input.lock.api
7.增加前台输入接口-通用
-SendStringF
HD【20240823.1】
1.测试工具增加生成绑定属性代码功能
2.修改SetWindowState状态值1的逻辑
HD【20240822.2】
1.修复从文件识别相关接口
-HCFP_FindPicExByFile
-HCFP_FindPicExByMem
HD【20240822.1】
1.优化接口
-HCInject_GetPreWinIndex
HD【20240821.2】
1.前台键鼠兼容win10全系统
20H2
21H1
21H2
22H2
等
2.前台键鼠兼容win11系统
21H2.22000.2245
3.修复前台键鼠移动坐标问题
HD【20240821.1】
1.优化多点偏移找色接口算法
2.图识字获取后台截图文件失败再次尝试获取一次
HD【20240820.2】
1.兼容系统19043.1237
HD【20240820.1】
1.优化修复前台截图
2.测试工具增加前台截图模式
HD【20240818.1】
1.修复浏览器缩小窗口导致的崩溃
2.浏览器增加异常捕捉,稳定性更高
HD【20240817.2】
1.修复普通注入的时候文件占用的情况
HD【20240817.1】
1.修改后台中键弹起BUG
2.修改HOOK封包RecvFrom崩溃BUG
HD【20240815.1】
1.优化修复后台键鼠-模拟器用户会出现的BUG
2.修复重新绑定导致的几率崩溃问题
3.增加内置激活后延迟操作
HD【20240813.3】
1.增加HOOK开启判断
2.优化
HD【20240813.2】
1.优化修复
HD【20240813.1】
1.优化修复
HD【20240812.3】
1.增加后台输入命令
HCMKB_SendStringExW
2.优化获取和设置剪切板接口
HD【20240812.2】
1.增加HOOK模块回调设置接口(X86X64)
-HDHK_SetProcessHookCallBackLparam
HD【20240812.1】
1.测试优化HOOK模块(X86)
HD【20240811.1】
1.优化和增加相关窗口进程操作接口
HCWIN_SetWindowState
HCWIN_SetWindowTransparent
HCSYS_GetCpuUsageByPid
HCSYS_GetMemoryUsageByPid
2.测试优化HOOK模块(X64)
3.工具增加相关测试按钮
HD【20240809.4】
1.测试工具增加抓图功能
HD【20240809.3】
1.测试工具增加识字调试功能
HD【20240809.2】
1.增加识字调试接口-实时查看
HCFS_CloseALLWindow_Debug
HD【20240809.1】
1.增加识字调试接口-实时查看
HCFS_FindStrMutilsAuto_Debug
HCFS_CloseALLWindow_Debug
HD【20240808.1】
1.增加任意HOOK接口(X86)
HDHK_Hook
HDHK_PauseHook
HDHK_RecoverHook
HDHK_UnHook
HD【20240807.2】
1.增加任意HOOK接口(X64)
HDHK_Hook
HDHK_PauseHook
HDHK_RecoverHook
HDHK_UnHook
2.修复HD驱动申请指定内存
HD【20240807.1】
1.修复HD驱动申请指定内存
HD【20240805.1】
1.增加组件卡槽数量到16个
2.兼容X86封包
3.修改相关封包接口-为了兼容X86X64
HDHK_InterceptApiX64--->HDHK_InterceptApi
HDHK_PauseInterceptApiX64--->HDHK_PauseInterceptApi
HDHK_RecoverInterceptApiX64--->HDHK_RecoverInterceptApi
HDHK_UnInterceptApiX64--->HDHK_UnInterceptApi
HDHK_SendApiX64--->HDHK_SendApi
HDHK_SendToApiX64--->HDHK_SendToApi
HDHK_SetProcessCallBackLparamSend-HDHK_SetProcessCallBackLparamSendX64
HDHK_SetProcessCallBackLparamRecv-HDHK_SetProcessCallBackLparamRecvX64
HDHK_SetProcessCallBackLparamSendTo-HDHK_SetProcessCallBackLparamSendToX64
HDHK_SetProcessCallBackLparamRecvFrom-HDHK_SetProcessCallBackLparamRecvFromX64
4.增加X86相关接口
HDHK_SetProcessCallBackLparamSendX86
HDHK_SetProcessCallBackLparamRecvX86
HDHK_SetProcessCallBackLparamSendToX86
HDHK_SetProcessCallBackLparamRecvFromX86
HD【20240727.2】
1.增加识字接口
-HCFS_FindStrMutilsAutoEx
-HCFS_FindStrMutilsAutoByFileEx
-HCFS_FindStrMutilsAutoByMemEx
HD【20240727.1】
1.内置JQL游戏黑屏功能
2.测试工具增加黑屏测试调试按钮
HD【20240725.1】
1.优化更新HD驱动
HD【20240724.1】
1.优化子图没有范围图大的判断
HD【20240721.1】
1.优化-1005主线程超时调用返回
2.增加清除驱动全局注入缓存接口
3.修复智能找图范围识别
HD【20240714.1】
1.增加自定义插件接口
HCModule_CALLEx
2.优化键盘输入接口
HD【20240709.1】
1.优化X32程序注入X64DLL
2.优化键鼠
3.优化自定义插件调用X86X64
4.测试工具增加相关测试按钮-注入模块
5.增强后台键鼠-过更多检测
HD【20240704.2】
1.升级服务器
HD【20240704.1】
1.修复优化细节
HD【20240703.1】
1.修复从内存加载图片BUG
2.优化输入
HD【20240702.1】
1.增加相关识字识图从内存加载子图接口
-HCFP_FindPicExFromMem
-HCFI_FindImageTemFromMem
-HCFI_FindRangeImageTemFromMem
-HCFS_FindStrMutilVPointsByFile
-HCFS_FindStrMutilVPointsByMem
-HCFS_FindStrMutilHVPointsByFile
-HCFS_FindStrMutilHVPointsByMem
2.优化多点偏移找色-排除不在范围内得偏移点
-HCFP_FindColorsOffset
3.修复韩文输入
HD【20240630.1】
1.优化切换绑定
2.新增2个从内存或文件范围识字
-HCFI_FindRangeImageTemByFile
-HCFI_FindRangeImageTemByMem
3.HCFP_FindPicEx系列接口增加返回json信息
4.优化细节
HD【20240629.1】
1.增加前台截图模式
-CAPTURETYPE_NORMAL
50
2.增加智能识图从内存中加载图片
-HCFI_FindImageByFile
-HCFI_FindImageTemByFile
-HCFI_FindImageByMem
-HCFI_FindImageTemByMem
3.优化识字接口结果返回-取消重复过滤
4.兼容b@
或
B@色彩描述-反色
5.修复识字中指定拼接字符串的BUG
6.新增普通注入2个接口X64
-HCN_NormalInstallPlugX64
-HCN_NormalInstallPlugX64Ex
HD【20240627.1】
1.优化通讯(2种模式自动识别,防止进程保护或者权限不够导致的拒绝访问)
2.增加内存模块接口(指定地址找特征码)
-HCM_FindCodeEx
3.增加绑定模式扩展接口
-HCMKB_BindModeEx
4.增加几个从内存或文件识字接口
-HCFS_FindStrMutilsAutoByMem
-HCFS_OcrByFile
-HCFS_OcrByMem
HD【20240617.1】
1.修复/优化HOOK模块修改回调参数
HD【20240615.1】
1.优化挂接主线程
2.优化底层框架
3.优化HOOK模块下重连的情况
4.兼容19045.4353系统版本
5.增加通过PID获取之前指定的窗口序号接口与HCInject_GetPrePid();同类
-HCInject_GetPreWinIndex();可以通过此接口重连和判断是否绑定过
HD【20240614.2】
1.优化自定义插件-防止重连多次加载
HD【20240614.1】
1.增加2个发包接口
-HDHK_SendApi
-HDHK_SendToApi
HD【20240613.2】
1.增加恢复拦截接口
-HDHK_RecoverInterceptApiX64
HD【20240613.1】
1.修复调试版本捕捉异常的处理
HD【20240612.2】
1.修复重连导致的超时
HD【20240612.1】版本大更新!!!版本大更新!!!版本大更新!!!
1.添加设置通讯检测间隔时间(ms)和跨进程回调函数响应反馈时间
-HCEnv_SetCheckComItlTime
-HCEnv_SetCheckCallBackTime
2.添加扩展初始化接口-提供更多参数用于初始化
-HCEnv_InitEx
3.添加扩展环境加载接口-提供更多的参数
-HCEnv_LoadEx
4.添加用于各种接口/函数/API的跨进程HOOK模块-并跨进程触发回调/拦截/修改
-
send(插件序号0) sento(插件序号3) recv(插件序号1)
recvfrom(插件序号4)
-HDHK_InterceptApiX64
-HDHK_PauseInterceptApiX64
-HDHK_UnInterceptApiX64
-HDHK_SetProcessCallBackLparamSend
-HDHK_SetProcessCallBackLparamRecv
-HDHK_SetProcessCallBackLparamSendTo
-HDHK_SetProcessCallBackLparamRecvFrom
5.修改HD驱动成功加载返回值-原来0xE0000000成功加载变为0x00000001
6.优化HD驱动的清除注入缓存
7.测试工具增加相关测试按钮-方便操作
8.优化内部通讯反馈机制-效率更高
9.原有的自定义插件卡槽2个扩容到10个
10.同步更新自定义插件库
11.兼容相关识图识字从内存加载图片
-HCFP_FindColorByMem
-HCFP_FindColorsByMem
-HCFP_FindColorsOffsetByMem
-HCFP_FindPicByMem
-HCFP_FindPicExByMem
12.新增找色从文件和内存中加载图片
-HCFP_CmpColorsByFile
-HCFP_CmpColorsByMem
-HCFP_GetColorByFile
-HCFP_GetColorByMem
13.细化绑定后台时系统版本号的识别
14.增加HD驱动申请指定内存地址的内存
-HCHD_MemoryAllocateEx
HD【20240529.1】
1.优化后台按键和绑定-兼容模拟器
2.测试工具增加相关测试按钮
3.优化修改增加按键相关接口
-HCMKB_SendStringA(增加)
-HCMKB_SendStringW(增加)
HD【20240528.1】
1.兼容模拟器(X86X64)
2.优化代码
HD【20240526.1】
1.修复心跳检测
HD【20240524.1】
1.调试版本增加2开
HD【20240523.1】
1.优化重连窗口机制
HD【20240516.1】
1.优化细节
HD【20240514.2】
1.修复内存池初始化数据-之前版本会弹窗
HD【20240514.1】
1.增加超时等待中退出循环标志-防止不必要的等待
2.优化字库文件解析字符串
HD【20240513.2】
1.修复判断驱动是否已经加载返回值
2.优化测试工具返回值显示
3.移除不必要的调试信息
HD【20240513.1】
1.增加驱动前台键鼠模块-不需要插上物理键盘鼠标
-HCHD_MousePress
-HCHD_MousePressEx
-HCHD_MouseDown
-HCHD_MouseUp
-HCHD_KbPress
-HCHD_KbDown
-HCHD_KbUp
2.移除旧接口
-HCHD_Kb
-HCHD_Mouse
HD【20240510.1】
1.兼容WIN10系统19043.1081版本(X86X64)
HD【20240509.1】
1.谷歌浏览器操作模块-内置浏览器操作(X64)
2.js注入模块-操作浏览器(X64)
-HCGB_Attach1
-HCGB_Attach2
-HCGB_Detach
-HCGB_InjectJSCode
-HCGB_ExcuteJSFile
HD【20240508.1】
1.修复N驱动内存释放问题
2.优化鼠标移动的轨迹延迟
3.优化强制关闭线程时锁的处理
4.修复拼接识字的BUG
HD【20240501.1】
1.增加通讯延迟-防止资源占比太大
2.优化内存池-修复弹窗
3.增加释放内存接口-针对内存池内存操作
-HCCS_FreeMemPool
4.经全图测试像素识别速度更效率-比大漠快
5.修复像素识图接口
-多图接口
-从文件多图接口
HD【20240427.1】
1.增加获取当前插件版本接口
-HCHD_GetVersion
2.所有像素识字识图算法改进-速度更快
HD【20240426.1】
1.优化识别范围
HD【20240425.1】
1.优化OCR识字
2.优化部分接口返回值
HD【20240424.1】
1.增加内存池-提高效率
2.优化像素识字像素识图的识别速度-更快(全图测试)
HD【20240423.1】
1.修复多开数量限制
2.修复截图缓存
HD【20240422.1】
1.兼容系统版本19045.3693
HD【20240421.1】
1.修复识字在有效高度不足11的情况的BUG
HD【20240420.1】
1.优化绑定属性字符串拼接
2.兼容系统19045版本4170
4291
3.优化像素识字接口效率提高至少10倍(全图测试)
-HCFS_FindStrMutilsAuto
4.优化找点算法IsGetPos/AddPoint
5.修复兼容系统18363系列
6.识字相关接口添加反相似度参数-(自行修改自己的导入接口)
-HCFS_FindStr
-HCFS_FindStrMutil
-HCFS_FindStrMutilVPoints
-HCFS_FindStrMutilHVPoints
-HCFS_FindStrMutilsEx
-HCFS_FindStrMutilsExx
-HCFS_FindStrMutilsAuto
-HCFS_FindStrMutilsAuto__
-HCFS_FindStrMutilsAutoByFile
-HCFS_FindStrEx
-HCFS_FindStrExx
7.优化像素识图接口效率提高至少20倍(全图测试)(支持透明图)
HD【20240411.1】
1.增加内存释放可读接口*
-HCM_IsBadReadAddr
2.取消全部通讯延迟(为了内存操作更快)*
3.增加截图缓存检查*
4.更新驱动*
HD【20240409.1】
1.增加预加载DLL接口和预加载lua文件-优先于HD框架
-HCInject_InitExx
2.增强强制关闭线程稳定性
-HCEnv_TerminateThread
-HCEnv_TerminateThreadEx
3.自带HD的lua接口
HD【20240408.2】
1.增加R0层驱动DLL模块注入接口(方便再已经打开的情况下注入)(支持32/64位)
-HCHD_NormalInstallPlugX86X64
-HCHD_NormalInjectX86X64ByFile
-HCHD_NormalInstallPlugX86X64Ex
-HCHD_NormalInjectX86X64ByFileEx
2.修改R3层普通注入接口(只支持32位)
-HCN_NormalInstallPlugX64X86->HCN_NormalInstallPlugX86
-HCN_NormalInstallPlugX64X86Ex->HCN_NormalInstallPlugX86Ex
HD【20240408.1】
1.修复打印日志信息标志BUG
HD【20240407.1】
1.优化系统版本号获取
2.兼容Win10 19045版本3693 3930 4046 4170
HD【20240404.1】
1.优化
HD【20240403.1】
1.优化智能识图默认相似度参数
-FindImageXXX系列接口默认0.8相似度
-FindImageTemXXX系列接口默认0.9相似度
2.优化通过文件指定识图识字数据相关接口的路径兼容绝对路径和相对路径
-HCRC_RecognitionCharA/W
-HCRC_RecognitionCharExA/W
-HCFI_FindImageByFile
-HCFI_FindImageTemByFile
-HCFP_FindColorByFile
-HCFP_FindColorsByFile
-HCFP_FindColorsOffsetByFile
-HCFP_FindPicByFile
-HCFP_FindPicExByFile
-HCFS_FindStrMutilsAutoByFile
3.取消相关资源全局路径检测,找不到资源会返回其他错误
4.增加强制关闭线程接口(更稳定安全防止死锁)
-HCEnv_TerminateThread
-HCEnv_TerminateThreadEx
HD【20240402.1】
1.优化初始化前清理截图数据缓存*
2.增加卡屏CRC校验接口*
-HCFP_GetRangeCRC
3.增加相关AI找图接口(和之前算法不同)*
-HCFI_FindImageTemA
-HCFI_FindImageTemW
-HCFI_FindRangeImageTemA
-HCFI_FindRangeImageTemW
4.增加相关识字识图指定图片文件接口*
-HCFI_FindImageByFile
-HCFI_FindImageTemByFile
-HCFP_FindColorByFile
-HCFP_FindColorsByFile
-HCFP_FindColorsOffsetByFile
-HCFP_FindPicByFile
-HCFP_FindPicExByFile
5.优化智能识图相关参数和阈值指定(之前导入的接口参数需要修改!!)*
6.测试工具增加调试找图找字实时标注颜色指定功能*
7.修改智能识字接口范围参数统一为xywh(之前导入的接口参数需要修改!!)*
8.修改像素识字识图范围参数统一默认值-1表示全部*
HD【20240330.2】
1.修复已知BUG
HD【20240330.1】
1.修改读字节流接口参数(HCM_ReadData/HCM_ReadDataAddr)-方便传参
HD【20240329.1】
1.智能识字工具添加删除项目,移动文件功能
2.shellcode相关接口修改形参引用改为指针-兼容别的语言无法引用问题
3.修复已知Bug
HD【20240328.1】
1.另外增加R3层内存操作接口获取模块句柄(x86x64)
2.另外增加R3层读写字节集数据接口(x86x64)
3.另外增加R3层读写单双浮点数数据接口(x86x64)
4.共增加11个接口
HD【20240327.1】
1.修复智能识字工具标注字体的异常
2.修复智能识字标注问题
3.兼容其他语言默认值
4.增加智能识字置信度信息反馈并优化智能识字训练
5.增加切换智能识字服务接口HCRC_SwitchRCServer
6.增加识字标志工具裁剪功能,图片二值化,灰度图和测试调试等功能
7.增加通用CALL传递额外ecx对象参数(X86)
8.增加实时智能识字可视化显示(实时可视化绘制)并添加设置全局绘制颜色接口HCSD_SetColor()
9.增加可视化调试窗口设置接口SetFollowClassTitleName()
10.修复特征码搜索
(x86)
HD【20240325.1】
1.修复内存读写(x86)
HD【20240324.3】
1.修复已经BUG
HD【20240324.2】
1.修复一些显示问题
HD【20240324.1】
1.增加解绑自动取消暂停绑定(X86X64)
HD【20240323.1】
1.修复恢复绑定导致的崩溃(X86)
2.修复打开查看器导致的崩溃(X86)
3.修复开发文档部分文字描述错误
4.修复暂停绑定无效(X86)
HD【20240322.2】
1.测试工具增加轨迹模式选项
HD【20240322.1】
1.兼容工作室系统版本1909.18363.778(x86x64)
2.测试工具增加轨迹模式选项
HD【20240319.1】
1.增加随机取语言文字并输入接口HCMKB_SendRoundNamePaste-保证取名
2.增加HCInject_GetHwndEx接口-返回绑定的句柄
HD【20240317.2】
1.HCInject_GetHwnd() 优化获取窗口序号对应的句柄
2.修复找图接口残留的小BUG
HD【20240316.2】
1.易语言导入接口模板
2.火山导入接口模板
HD【20240316.1】
1.增加自定义插件模块普通加载和卸载模式-方便调试(x86)
2.增加后台鼠标移动轨迹模式
3.增加内置夜鸦黑屏接口(游戏类型为7)
HD【20240315.1】
1.增加自定义插件模块普通加载和卸载模式-方便调试(x64)
2.添加插件保证多线程安全
3.兼容PT多开器
HD【20240310.2】
1.优化自定义模块接口响应速度
2.优化内部缓存大小
HD【20240310.1】
1.增加自定义插件模块普通加载和卸载模式-方便调试
2.优化并增加相关状态机模块接口
3.增加Auto识字接口返回宽度高度信息
4.修复识色接口(HCFP_FindColorsOffset)并增加参数
5.优化识图找色相似度算法
HD【20240309.1】
1.优化暂停恢复后台绑定-有些游戏会失效
2.后台绑定相关接口增加可控参数-针对不同程序指定(X84)
3.增加测试工具测试按钮
HD【20240308.1】
1.优化自定义插件模块-更方便
2.后台绑定相关接口增加可控参数-针对不同程序指定(X64)
HD【20240307.1】
1.优化部分接口返回信息
2.增加普通注入接口
HD【20240306.1】
1.修复轨迹移动的坐标获取问题
2.移除一些调试信息
3.增加多行多列识字符串2个接口(HCFS_FindStrMutilVPoints/HCFS_FindStrMutilHVPoints)
4.测试工具增加相关测试接口按钮
HD【20240305.1】
1.优化部分接口返回信息
2.增加相关识别接口可控参数-针对不同样本识别提高识别准确度
HD【20240304.2】
1.工具上增加测试识字按钮-方便调试
HD【20240304.1】
1.增加普通注入接口-方便操作小程序和调试程序*
2.增加打开识字调试信息接口(HCEnv_PrintLog)-方便调试*
3.优化识字算法-更稳定更精准*
4.增加切换绑定接口(HCMKB_SwitchBind)-方便操作(x86X64)*
5.增加单字库多字库识字接口(HCFS_FindStrMutilsAuto)-自适应字符串*
6.增加暂停绑定接口(HCMKB_PauseBind)-方便手动操作窗口(x86X64)*
7.优化多点偏移找色接口(HCFP_FindColorsOffset)-更精准*
8.修复内存模块(X86X64)*
9.增加特征码搜索测试按钮-测试工具*
10.增加几个识字和找色相关测试按钮-测试工具*
11.增加卡屏心跳检测-更方便*
12.增加登录后自动检测相关文件是否存在并创建*
13.修复多线程可能引起的验证弹窗错误*
14.优化卡屏检测接口*
15.优化截图逻辑-识别更快(50MS左右)*
16.兼容WIN10系统1607.14393.3300-(X86X64)*
17.增加注入模块-方便操作其他程序*
HD【20240229.1】
1.优化识字模块中的算法-更加精准稳定
2.增加识字调试信息(相似度)-方便调试
3.增加字库信息获取接口(2个)-方便查看
HD【20240228.3】
1.修复FindStrExx接口
HD【20240228.2】
1.增加识图识字接口(5个)-扩展
2.修改字库存储方式(支持切换字库)-方便操作
3.改接口导出方式-兼容其他语言
HD【20240228.1】
1.修复后台按键剪切板输入接口
HD【20240227.1】
1.优化后台键鼠接口的返回值-便于调试
2.修复后台键鼠系统版本兼容问题
3.修复已知小BUG
HD【20240226.2】
1.增加全局路径未设置的提示信息-便于调试
HD【20240226.1】
1.优化自定义模块中的通讯模块机制(堵塞和非堵塞和超时)(X86X64)-增强了稳定性
2.异常处理(防止退出中控的时候导致错误提示)-稳定性
3.取消32位程序内置进程名限制-解除限制
4.更新文档接口描述(自定义模块/环境模块/找字模块/找图模块)-更新
5.增加多点找色接口(HCFP_FindColors)-优化效率
6.增加一个识别多字符串接口(HCFS_FindStrExx)(之前是全部找)-优化效率
HD【20240225.2】
1.增加接受通讯模块实现双向通讯(自研通讯引擎)(X64X86)
HD【20240225.1】
1.增加自定义模块通讯接口(直接进程内部通讯)(x64X86)
2.优化通讯模块(防止特殊情况下的BUG)(x86x64)
3.增加自定义模块组件索引和通讯超时参数
HD【20240223.1】
1.优化自定义模块加载机制(x86和x64)
2.修复进程位数不匹配提示(x86和x64)
HD【20240201.1】
1.更换服务器(需要进群重新下载)
HD【20240130.2】
1.增加打开进程接口
HD【20240130.1】
1.改进系统模块中接口参数
HD【20240129.1】
1.增加窗口和进程操作接口共24个
HD【20240128.1】
1.增加X86X64通用CALL传递参数数量
HD【20240122.2】
1.增加目标进程和中控心跳检测并触发回调
2.增加X86通用CALL调用接口
HD【20240122.1】
1.兼容X86自定义组件模块
2.增加自定义模块密码账号验证(方便二次开发)
HD【20240121.2】
1.增加错误信息查找接口
HD【20240121.1】
1.增加绑定后台键鼠的开关设置(之前是全部绑定)
2.测试工具添加后台键鼠(操作前激活)选项
3.增加调试模式设置接口(方便有些接口调试操作)
HD【20240120.1】
1.修改接口导出返回值类型(方便易语言/火山调用)
HD【20240119.1】
1.增加像素OCR识字接口
2.改进识字相似度算法
2.像素识字对接测试工具
HD【20240118.1】
1.增加像素识字模块(兼容字库文件)
HD【20240117.2】
1.兼容系统win10 22H2版本(后台键鼠)
HD【20240117.1】
1.AI找图模块中增加范围内找图接口(HCFI_FindRangeImage)
HD【20240116.1】
1.增加状态机模块(多开)
HD【20240115.1】
1.调试版本(绑定本机,可调试)
2.发布版本(扣点模式)
HD【20240114.1】
1.增加调试版本,方便开发者调试
HD【20240111.2】
1.修复驱动隐藏导致的蓝屏
2.解除内置进程过滤,现在可以任意进程
HD【20240111.1】
1.优化HD驱动环境
2.增加HD驱动隐藏
HD【20240109.1】
1.增加X86后台键鼠和兼容系统
HD【20240107.1】
1.增加和完善X86后台键鼠(预计3天完成)
2.准备驱动隐藏突破某些国服游戏检查驱动导致的环境异常
HD【20240106.1】
1.优化X86X64(D3D9 D3D11
GDI)通用性后台截图
2.公布头文件(供C++使用)
3.修改手册说明
HD【20240105.1】
1.增加通用性后台截图功能(X64
GDI)
2.修复区域截图BUG
3.增加错误集
4.增加安装X86插件接口和测试按钮
5.对接X86目标进程测试通过,通讯正常
6.增加X86通用性后台截图功能(X64
D3D11)
7.修改通用性后台截图接口(需要指定窗口句柄)
8.改进截图数据格式判断
HD【20240104.1】
1.增加通用性后台截图功能(D3D9/D3D11)
2.测试工具账号注册信息优化
HD【20240103.1】
1.优化测试工具tab控件多行显示
2.搭建x86目标进程框架DLL
3.改进接口返回值和获取方式
PS:32位目标进程还不兼容,会加紧兼容
[TOP]
【1】HCInject_GetLastInfo通讯代码返回121?
->进程PID指定错误
----------------------------------------------------------------
【2】如果后台键鼠失效?
->可以尝试绑定raw属性
----------------------------------------------------------------
【3】B站教程?
->https://space.bilibili.com/436340181?spm_id_from=333.337.0.0
----------------------------------------------------------------
【4】测试工具如何使用?
->https://www.bilibili.com/video/BV1dJGfe7EQZ/?spm_id_from=333.999.0.0
----------------------------------------------------------------
【5】可以在打开游戏的情况下,安装插件实现绑定通讯进程吗?
->可以,请使用注入模块中的相关接口
----------------------------------------------------------------
【6】HCInject_GetLastInfo通讯代码返回0?
->插件没有安装成功,请检测驱动是否安装或者是否成功调用注入接口
----------------------------------------------------------------
【7】MuMu模拟器为什么游戏点击多次才会生效?
->关闭模拟器推荐的键鼠方案改为不使用方案
----------------------------------------------------------------
【8】如何不通讯的情况下,避免提示进程环境为NULL,让窗口序号生效?
->把需要生效的窗口序号对应调用 HCEnv_Load 接口,PID随便写,生成对应窗口序号的伪进程环境
->遵循一个序号一个窗口,多个线程可以操作同一个序号
----------------------------------------------------------------
【9】如何判断当前进程是否安装了插件或者对应绑定的窗口序号?
->可以调用HCInject_GetPreWinIndex
----------------------------------------------------------------
【10】如何实现重连窗口?
->可以调用HCInject_GetPrePid
拿到PID,有PID说明已经安装了插件
----------------------------------------------------------------
【11】识字返回-1120(ERROR_字库数据为空)?
->所找的字其中一个或者多个不在字库文件中,删掉不存在的即可正常
----------------------------------------------------------------
【12】为什么明明绑定了窗口,但是后台键鼠操作不了?
->一般出现这种情况是因为绑定的窗口句柄不对,我们最好绑定的是顶级窗口句柄
----------------------------------------------------------------
【13】开启后台截图后,为什么会显示标题栏(非客户区)?
->一般出现这种情况是因为绑定的窗口句柄不对,我们最好绑定的是子窗口句柄(客户区)
----------------------------------------------------------------
【14】为什么用调试版本识别速度很慢?
->换发布版本就正常了
----------------------------------------------------------------
【15】强烈建议
->不要在主线程中调用HD相关接口(窗口序号大于0的接口)
->登录最好在主线程中调用(能最大化的提高识别速度)
----------------------------------------------------------------
【16】测试工具开启截图后,查看的时候弹窗提示"创建D3D9设备失败"
->这种问题就是截图模式没有选择合适的,请根据自身游戏渲染库选择对应的模式和位数
----------------------------------------------------------------
【17】如何在绑定后台后关闭CPU帧优化?
->当帧数设置大于120
就自动关闭优化了(前提是绑定了dx.public.down.cpu
19属性)
----------------------------------------------------------------
【18】什么情况下的进程才能重连?
->调用接口HCInject_GetPrePid如果能获取到PID,则表示可以直接重连了,这个时候只需要调用HCEnv_Load或HCEnv_LoadEx
----------------------------------------------------------------
【19】什么情况下的进程不能重连?
->这里拿窗口序号1举例
->如果窗口1在正常第一次通讯后,序号1和进程PID(123) 关联了,我们卸载环境HCEnv_UnLoad ,这个时候还可以调用HCInject_GetPrePid获取PID(123)来实现重连
->接下来如果卸载环境后立马调用HCInject_Init初始化序号1并且第二个参数为真,那么表示当前序号1和之前第一次绑定的进程PID(123)彻底失去了关联(不能重连了)
->这个时候去调用HCInject_GetPrePid就不能获取之前绑定的PID(123)了
----------------------------------------------------------------
【20】为什么使用驱动接口或者绑定后台接口会返回-1193(初始化失败)?
->需要先登录HCHD_Login然后初始化HCEnv_Init,方可成功使用驱动接口
->如果是绑定后台返回-1193则是系统版本不兼容,请确认是否是win10或者win11,然后联系作者并提供TD远程进行兼容,全程不过几分钟就好
----------------------------------------------------------------
【20】雷电模拟器需要通讯那个进程和绑定那个窗口?
->通讯用dnplayer.exe就行
->后台绑定为模拟器的窗口就行
----------------------------------------------------------------
【21】为什么识字接口有的找不到??
->不要怀疑算法!
->这个时候可能你正在识别数字和符号的字,并且是很小,这个时候需要微调
->请使用HCFS_SetCharSpaceHV HCFS_IsOne11 HCFS_GroundRate 这3个微调接口
->相关文档案例水平垂直间距解析和案例分析 周围占比解析和案例分析 one11解析和案例分析
----------------------------------------------------------------
【22】如何找雷电模拟器子窗口?
->C++代码:
clock_t beginTime = clock();
HWND hwnd = NULL;
while
(1)
{
auto ret =
HCWIN_EnumWindowByProcessId
(pid, "LDPlayerMainFrame", "", 2 | 8 | 16,
0);//雷电模拟器
if (clock() - beginTime > 30 *
1000)
{
HCMT_MsgStepText (windowsIndex,
(char*)("超时获取窗口句柄失败:" + std::to_string(pid)).c_str());
HCMT_SetStop (windowsIndex);
return 1;
}
if
(ret)
{
//获取返回值 0中控环境
hwnd =
(HWND)atoi(HCEnv_GetRetJson(0));
if
(hwnd) break;
}
}
HCMT_MsgStepText(windowsIndex, (char*)("获取窗口句柄:" +
std::to_string((__int64)hwnd)).c_str());
HCMT_Sleep(2000);
//等待子窗口
beginTime =
clock();
HWND childHwnd = NULL;
while(1)
{
childHwnd = (HWND)HCWIN_FindWindowEx
((_int64)hwnd, "RenderWindow", "TheRender",
FALSE);//找客户端区域内层子窗口
if (clock() - beginTime
> 30 * 1000)
{
HCMT_MsgStepText(windowsIndex,
(char*)("超时获取窗口句柄失败:" + std::to_string(pid)).c_str());
HCMT_SetStop(windowsIndex);
return 1;
}
if
(childHwnd) break;
}
----------------------------------------------------------------
【23】附加心跳的情况下,当窗口消失,调用多线重启接口,会多次触发心跳,导致多次重启,怎么解决?
->这个时候大概率是因为在调用HCMT_MsgReStart的时候,没有调用卸载环境HCEnv_UnLoad导致的
->C++代码
__int32 HMT::心跳回调(__int32 窗口索引,
__int32 type)
{
if (type ==
1)
{
//优化加一个接口
//指定一个窗口序号
获取当先窗口的操作状态
HCEnv_UnLoad(窗口索引);//卸载环境
不卸载还会检查当前序号的心跳
HCMT_MsgReStart(窗口索引);
}
return
1;
}
----------------------------------------------------------------
【24】为什么HD虚拟机DMA模块 关联虚拟机或者读写内存失败?
->管理员打开脚本和虚拟机试一试 或者 定制虚拟机的vmx文件里的 mainMem.useNameFile = "TRUE" 要改成true ,没有就加一行
->虚拟机内系统把自带杀毒 内核隔离 防火墙关掉 (尤其是纯净版原生系统)
----------------------------------------------------------------
【25】3种安装插件方式中,打开回调和检测回调什么情况下触发的?
1.没安装过插件的,都不算重连窗口,全部当新窗口处理,会触发打开回调.
2.安装过插件的,不管是卸载了环境,还是崩溃或重启中控,都算重连窗口,会先触发检查回调,告诉开发者,开发者就可以在检查回调里面自定义一些操作
----------------------------------------------------------------
【26】3种安装插件方式中,重连窗口会触发检查回调,那么检查回调的参数告诉了开发者那些信息?
->信息一:之前绑定的窗口是否存在
->-不存在PID:开发者可以直接返回0,告诉接口当做新窗口处理,这个时候会触发打开回调,开启新的进程
->-存在PID:开发如果需要重连到之前已经打开进程,这里就可以直接返回1,告诉接口我确认当做重连窗口处理
->-存在PID:开发如果不需要重连到之前已经打开进程,这个时候可以自助关闭进程,然后直接返回0,告诉接口虽然你内部检查是重连窗口,但是我不想重连,我只想每次安装一次打开一次个新进程
->信息二:安装过插件的进程相关检查值或安装过插件的进程的窗口序号(通过第二个参数)
->-第二个参数大于0:
安装过插件的进程的窗口序号(这个时候第一,二参数大多数是一样的值,同时第四个参数是RET_重连窗口
5),处于这种情况可以直接返回1
->--表达的含义:接口内部告诉开发者可以当前重连窗口,开发也同样确认了可以当做重连窗口
->-第二个参数小于等于0:错误值(比如:安装过插件的进程PID不存在,这个时候第四个参数是RET_重连窗口序号不一致
6),处于这种情况可以直接返回1
->--表达的含义:接口内部检查到指定的窗口序号虽然之前绑定过进程,但是发现绑定的进程异常(比如:进程不存在),就会把这个异常错误值通过第二个参数返回给开发者,
从而导致第一个参数和第二个参数不一致,这个时候开发者在检查回调里面就需要自己处理,比如直接返回0从而触发打开回调,去安装绑定一个新窗口
->信息三:返回给之前绑定过窗口的窗口PID(通过第三个参数)
->信息四:通过提示值,表示相关检查值或流程值(通过第四个参数)
----------------------------------------------------------------
【27】多线程模块中为什么在执行回调中调用了HCMT_MsgReStart(),并不会重启而是直接停止了?
1.firstCallBack: FUNTYPE 第一执行回调 注意:内部应该写成循环 并配合HCMT_Sleep()和HCMT_IsRunning()
不要主动返回执行回调(return 1;) 应该调用接口内部结束或者其他操作
2.secondCallBack: FUNTYPE 第二执行回调 注意:内部应该写成循环 并配合HCMT_Sleep()和HCMT_IsRunning()
不要主动返回执行回调(return 1;) 应该调用接口内部结束
或者其他操作
----------------------------------------------------------------
[TOP]
dirType :排序类型 / 方向类型 (默认0) 支持接口
0或者1------------------------从左到右 从上到下 OCR HCFS_Ocr HCFS_OcrByFile HCFS_OcrByMem HCFP_FindColor HCFP_FindColors
2 ------------------------从右到左 从上到下 单点找色 HCFP_FindColor HCFP_FindColors
[TOP]
函数简介
:
获取当前插件版本号
函数原型:
__int64 __stdcall HCHD_GetVersion();
参数定义:
返回值:
备注:
无
[TOP]
函数简介:
获取最近一次调用接口返回的json字符串
函数原型 :
char* __stdcall HCEnv_GetRetJson(__int32
窗口序号);
参数定义:
返回值:
备注:
并不是所有接口都返回json字符串
有一些接口返回单一的值就没必要调用这个接口
一些接口需要拿到字符串信息返回,那么这些字符串会存在json字符串中,需要自己调用此接口获取
[TOP]
函数简介 :
获取最近一次调用接口返回的值(用于检测是否有错)
函数原型 :
__int64 __stdcall HCEnv_GetRetValue(__int32
窗口序号);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
通过传递HD返回值获取字符串信息
函数原型:
char* __stdcall HCEnv_GetErrorStr (__int32 ret);
参数定义:
返回值:
备注:
[TOP]
函数简介
:
[TOP]
函数简介
:
获取最大窗口数
函数原型 :
__int64
__stdcall HCEnv_GetMaxWindowNum();
参数定义:
返回值:
备注:
窗口序号不能大于等于这个返回值同时也不能小于0
[TOP]
函数简介
:
获取当前环境搭建流程中的操作信息
函数原型:
__int64
__stdcall HCInject_GetLastInfo(__int32
窗口序号);
参数定义 :
返回值:
备注:
这个CALL返回 HD状态信息 可以确定当前处于那个步骤
[TOP]
函数简介
:
设置插件信息
函数原型:
__int64 __stdcall HCInject_SetPlugin(char*发布版本DLL名 = NULL, char* 调试版本DLL名 =
NULL);
参数定义 :
调试版本DLL名:为空
则根据不同版本内置了DLL名字
返回值:
备注:
易语言/火山/Python/炫语言/C#等语言:还需要拿到模块源码更改导入DLL名字 需要与自定义DLL同名
内置版本名规则:
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//===========================64位
#ifdef
_WIN64
#ifdef _UNICODE
//64位W版本
std::string HCInject::g_发布版本DLL名字 =
"hd64.dll";
std::string HCInject::g_调试版本DLL名字 =
"hddebug64.dll";
#else
//64位A版本
std::string HCInject::g_发布版本DLL名字 =
"hd64a.dll";
std::string HCInject::g_调试版本DLL名字 =
"hddebug64a.dll";
#endif
//===========================32位
#else
#ifdef
_UNICODE
//32位W版本
std::string HCInject::g_发布版本DLL名字 =
"hd.dll";
std::string HCInject::g_调试版本DLL名字 =
"hddebug.dll";
#else
//32位A版本
std::string HCInject::g_发布版本DLL名字 =
"hda.dll";
std::string HCInject::g_调试版本DLL名字 =
"hddebuga.dll";
#endif
#endif
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
[TOP]
群里下载!!
实例代码和教程
882724064
[TOP]
1.x32 debug版本 unicode字符集 为例(注意插件版本)
uafxcwd.lib;Libcmtd.lib;
J:\vs2017 workSpace\HD RGB引擎完整版\HDValue
J:\vs2017 workSpace\HD RGB引擎完整版\include
J:\vs2017 workSpace\HD RGB引擎完整版\plugin
2.release版本 unicode字符集
uafxcw.lib;Libcmt.lib;hd.lib
uafxcw.lib;Libcmt.lib;
J:\vs2017 workSpace\HD RGB引擎完整版\HDValue
J:\vs2017 workSpace\HD RGB引擎完整版\include
J:\vs2017 workSpace\HD RGB引擎完整版\plugin
[TOP]
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
1.群里下载SDK完整版SDK仅包含(unicode)x86版本的调试/发布库-共2个版本
2.本测试项目中附带的SDK完整版plugin目录包含unicode项目的X86X64(调试/发布库)版本-共4个版本
-test01中控测试项目仅做了(unicode)X86X64项目环境搭建,(ascii)X86X64项目同理
-MyHd自定义插件测试项目仅做了x64发布版本的环境搭建,其他版本同理
3.需要额外使用(ascii)X86X64版本的库请在群里下载也放在plugin中,并在项目中引入对应的lib文件即可
-右键项目-属性-链接器-输入
4.需要更新64位库请在群文件下载后放置plugin目录中替换掉对应的版本文件
5.需要更新完整版SDK版本,请在群里下载最新版本,并全部替换覆盖即可
6.调试版本才可以调试,发布版本不能调试,检查到可能导致锁死账号,请注意!!!
特别注意:
1.如果使用VS调试版本,请把对应版本的DLL放置项目的版本文件中
2.更新版本也是如此
3.为了保障和exe同目录,因为vs调试目录不是引入库设置的目录,而是exe生成的目录下,不放进去找不到
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
目录结构:
-com
自定义插件库(全系版本)
-controler
多任务控制器头文件--废弃
-HDValue
HD值类型源文件
-HYoloTest
HDYolo测试文件
-include
HD插件头文件
-plugin
HD库文件(完整版SDK仅存在x86版本,如果需要其他版本请看上面几点)
-state
HD状态机头文件--废弃
-test
HD测试程序
-hdfiner.exe
后台截图查看器,用于测试截图是否开启成功
-HDTool.exe
HD综合后台测试工具,需要正式账号
-Update.exe
HD更新器
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
[TOP]
//【此版本是炫语言开发环境所需要的HD插件相关库】
//【包含x86x64版本-unicode】
//官网:www.hdgdk.com
//官网群:882724064
//通过网盘分享的文件:HD插件自动化库
//链接: https://pan.baidu.com/s/1YXp1u03b-8E4psnddhxJmQ
提取码: f25d
//解压放根目录下即可
//目录结构:
//-HD自动化
//--HD插件
//----extern(HD类型头文件文件夹)
//----include(HD头文件文件夹)
//----lib(HD库文件夹)-需要链接下载
//----plugin(HD扩展插件库文件夹)-需要链接下载
//----xinclude(HD炫语言库文件夹)
//----module_heart_extern.h(HD类型模块)
//----module_heart_hd.h(HD插件模块)
//----module_heart_plugin.h(HD扩展插件模块)
[TOP]
炫彩IDE下载:
加入HD插件模块:
3.由于模块仅包含头文件,dll,lib各个版本库文件需要在下方下载链接下载或者进群882724064下载
链接: https://pan.baidu.com/s/1YXp1u03b-8E4psnddhxJmQ 提取码: f25d
文件放置同目录下
4.更新库同理替换覆盖对应的文件即可
//目录结构:
//-HD自动化
//--HD插件
//----extern(HD类型头文件文件夹)
//----include(HD头文件文件夹)
//----lib(HD库文件夹)-需要链接下载
//----plugin(HD扩展插件库文件夹)-需要链接下载
//----xinclude(HD炫语言库文件夹)
//----module_heart_extern.h(HD类型模块)
//----module_heart_hd.h(HD插件模块)
//----module_heart_plugin.h(HD扩展插件模块)
[TOP]
群里下载!!
实例代码和教程
882724064
[TOP]
#引入HD插件
import ctypes
import os
import time
import hdtype
import json
import subprocess
from itertools import takewhile
bDebug = True
account = b"heart"
password = b"111"
appName64 = b"Game.exe"
resPath = b"C:\\"
# 加载DLL
# 不需要pip install
print("当前目录:%s"%os.getcwd())
#hd = ctypes.windll.LoadLibrary(os.getcwd() + "\HD_SDK_Debug\HDDebug.dll")
#调试版本
hd = ctypes.CDLL(os.getcwd() + "\HD_SDK_Debug\HDDebug.dll")
#发布版本
hdr = ctypes.CDLL(os.getcwd() + "\HD_SDK_Debug\hd.dll")

[TOP]
# 1.登录
def HCHD_Login(e):
ret = hd.HCHD_Login(account, password,
ctypes.c_char_p(b""), ctypes.c_char_p(b""),
ctypes.c_char_p(False), ctypes.c_char_p(False))
print("Login:%d" % ( ret ) )
[TOP]
# 2.初始化中控
def init(e):
ret = hd.HCEnv_Debug(bDebug)
print("HCEnv_Debug:%d" % (ret))
# HCEnv_Init自动初始化中控环境 可以用0序号来获取中控环境信息
ret = hd.HCEnv_Init()
print("HCEnv_Init:%d" % (ret))
# 32/64
ret = hd.HCEnv_SetProcessType(64)
print("HCEnv_SetProcessType:%d" % (ret))
# 资源路径 用于识图识字
ret = hd.HCRES_SetResPathA(ctypes.c_char_p(resPath))
print("HCRES_SetResPathA:%d" % (ret))
def HCRES_SetResPathA(resPath):
ret = hd.HCRES_SetResPathA(ctypes.c_char_p(resPath))
print("HCRES_SetResPathA:%d" % (ret))
def HCEnv_SetProcessType(type):
ret = hd.HCEnv_SetProcessType(ctypes.c_int32(type))
print("HCEnv_SetProcessType:%d" % (ret))
def HCEnv_Debug(bDebug):
ret = hd.HCEnv_Debug(ctypes.c_bool(bDebug))
print("HCEnv_Debug:%d" % (ret))
def HCEnv_Init(timeout):
ret = hd.HCEnv_Init(ctypes.c_int32(timeout))
print("HCEnv_Init:%d" % (ret))
# 3.设置目标
def setTarget(type):
ret = hd.HCEnv_SetProcessType(type)
print("SetTarget:%d" % (ret))
# 4.加载驱动
def loadHDDriver():
ret = hd.HCHD_LoadDrv()
print("HCHD_LoadDrv:%d" % (ret))
ret = hd.HCHD_InstallPlugX64(appName64, 1, 0)
print("HCHD_InstallPlugX64:%d" % (ret))
def HCHD_LoadDrv():
ret = hd.HCHD_LoadDrv()
print("HCHD_LoadDrv:%d" % (ret))
def HCHD_InstallPlugX64(appname, injectType, memType):
ret = hd.HCHD_InstallPlugX64(ctypes.c_char_p(appname),
ctypes.c_int32(injectType),
ctypes.c_int32(memType),
)
print("HCHD_InstallPlugX64:%d" % (ret))
# 5.通讯初始化
def HCInject_Init(index):
# 窗口序号 0-30 一共31个序号
# 0 1 2 3 4...递增
# 0是中控
# 1开始自己管理目标进程序号
ret = hd.HCInject_Init(ctypes.c_int32(index), ctypes.c_bool(True))
print("HCInject_Init:%d" % (ret))
# 6.循环获取PID :通过自己的方式打开游戏或者自动打开
def GetPidWhile(index):
pid = hd.HCInject_GetPid(index)
while pid <= 0:
pid = hd.HCInject_GetPid(index)
print("HCInject_GetPid:%d" % (pid))
time.sleep(1)
return pid
# 7.加载环境
def HCEnv_LoadEx(index,pid):
ret = hd.HCEnv_LoadEx(index, pid, 0, ctypes.c_bool(False))
print("HCEnv_LoadEx:%d" % (ret))
# 8.继续 中控加载环境成功后,告诉插件,中控已经加载环境了,如果不调用继续,那么插件就会卡着不会继续执行
def HCInject_Continue(index):
ret = hd.HCInject_Continue(index)
print("HCInject_Continue:%d" % (ret))
# 9.测试通讯是否成功
def HCEnv_TestCALL_RetArray(index):
ret = hd.HCEnv_TestCALL_RetArray(ctypes.c_int32(index),
ctypes.c_int64(0), ctypes.c_int64(0),
ctypes.c_int64(0), ctypes.c_int64(0),
ctypes.c_int64(0), ctypes.c_int64(0),
ctypes.c_bool(False))
# 拿到char*字符串
hd.HCEnv_GetRetJson.restype = ctypes.c_char_p
retJson = hd.HCEnv_GetRetJson(ctypes.c_int32(index))
print(retJson)
# char*字符串转换为python字符串 中文 gbk 反之就用utf-8
retJson3 = str(retJson, 'gbk') #中文 gbk
print(retJson3)
print("HCEnv_TestCALL_RetArray:%d retJson:%s" % (ret, retJson3))
[TOP]
#两种写法
heartFunType_stdcall = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_int)#定义一个__stdcall的回调函数
#typedef __int32(*HeartFunType)(__int32 窗口索引, __int32 type);
@heartFunType_stdcall
def heartCallBack(index, type):
print("窗口序号:%d 类型:%d" % (index, type))
# 这个回调函数里面 不要执行耗时的操作
# 最好开一个线程去操作耗时的代码
# 这个里面可以改变某一些变量标志 来实现重启!
return 1
heartFun = heartFunType_stdcall(heartCallBack) #全局
# python 设置回调!!!!
# 1.函数调用约定 __stdcall(WINFUNCTYPE) CFUNCTYPE
# 2.变量的生命周期 heartFun = heartFunType(heartCallBack) 这个变量要全局 或者 生命周期和CDLL里面一样长
# 附加心跳
# int64 __stdcall HCEnv_AttachHeart(__int32 type,
# __int32 funCallbackAddr, __int32 timeOut = 10000);
def HCEnv_AttachHeart(type, timeOut):
# typedef __int32(*HeartFunType)(__int32 窗口索引, __int32 type);
ret = hd.HCEnv_AttachHeart(ctypes.c_int32(type),
heartFun,
ctypes.c_int32(timeOut)
)
print("HCEnv_AttachHeart:%d" % (ret))
[TOP]
# 封装
# 驱动返回值 大于等于0 成功 小于0 错误信息
# 驱动申请内存
# int64 __stdcall HCHD_MemoryAllocate(__int32 pid,
# __int64 memorySize, __int32 memoryProtect, BOOL bHighAddress, __int64 pOutBuffer);
def HCHD_MemoryAllocate(pid, memorySize, memoryProtect, bHighAddress, pOutBuffer):
v2 = ctypes.cast(pOutBuffer, ctypes.c_void_p)# (void*)(0x123456)
v3 = int(v2.value)# (int)((void*)(0x123456))
hd.HCHD_MemoryAllocate.restype = ctypes.c_int64
ret = hd.HCHD_MemoryAllocate(ctypes.c_int32(pid),
ctypes.c_int64(memorySize),
ctypes.c_int32(memoryProtect),
ctypes.c_bool(bHighAddress),
ctypes.c_int64(v3)
)
print("HCHD_MemoryAllocate:%d" % (ret))
# 驱动读写
# int64 __stdcall HCHD_RW(__int32 pid,
# __int64 targetAddress,
# __int64 bufferAddress, __int32 bufferOfBytes,
# __int32 rwType);读写类型[0=读内存;1=写内存;2=强写内存]
def HCHD_RW(pid, targetAddress, bufferAddress , bufferOfBytes, rwType):
v2 = ctypes.cast(bufferAddress, ctypes.c_void_p)# (void*)(0x123456)
v3 = int(v2.value)# (int)((void*)(0x123456))
hd.HCHD_RW.restype = ctypes.c_int64
ret = hd.HCHD_RW(ctypes.c_int32(pid),
ctypes.c_int64(targetAddress),
ctypes.c_int64(v3),
ctypes.c_int32(bufferOfBytes),
ctypes.c_int32(rwType)
)
print("HCHD_RW:%d" % (ret))
# 调用传递参数
def drvMemAllo(self):
value = ctypes.c_int64(0)
hdpy.HCHD_MemoryAllocate(14072, 8, 0x40, False, ctypes.byref(value))
print(value.value)
self.addressEdit.setText(str(value.value))
def writeMem(self):
addr = int(self.addressEdit.text())
writeValue = ctypes.c_int64(123)
hdpy.HCHD_RW(14072, addr, ctypes.byref(writeValue), 8, 1)
def readMem(self):
addr = int(self.addressEdit.text())
readValue = ctypes.c_int64(0)
hdpy.HCHD_RW(14072, addr, ctypes.byref(readValue), 8, 0)
print(readValue.value)
[TOP]
群里下载!!
实例代码和教程
882724064
[TOP]
群里下载!!
实例代码和教程
882724064
[TOP]
[TOP]
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
.如果 (HD_登录初始化 (“22”, “222”, “”, “”, , )) ' 调用我们的HD插件 一定要初始化登录
后续的一些接口才能使用
标签1.标题 = “登录成功”
.否则
标签1.标题 = “登录失败”
[TOP]
[TOP]
软件找HD作者拿(魔改版)
[TOP]
函数简介
:
设置有米软件路径(EXE路径)
函数原型:
__int64 __stdcall HCIP_YMSetRootPath(char *
path);
参数定义:
返回值:
备注:
软件找HD作者拿(魔改版)
[TOP]
函数简介 :
添加IP
函数原型
:
__int64
__stdcall HCIP_YMAddIP(char *ip, int port, char
*account, char *password, int type, int kfp = 1, char* proName =
NULL);
参数定义:
返回值:
备注:
软件找HD作者拿(魔改版)
[TOP]
函数简介 :
添加代理的进程名
函数原型 :
__int64 __stdcall HCIP_YMAddProcess(char
*proName);
参数定义:
返回值:
备注:
软件找HD作者拿(魔改版)
[TOP]
函数简介 :
打开有米软件
函数原型 :
__int64 __stdcall HCIP_YMOpen(int
type);
参数定义:
返回值:
备注:
软件找HD作者拿(魔改版)
流程:
[TOP]
函数简介
:
有米软件是否已经打开
函数原型 :
__int64 __stdcall HCIP_YMIsOpen(int type);
参数定义:
返回值:
备注:
软件找HD作者拿(魔改版)
流程:
[TOP]
函数简介
:
关闭有米软件
函数原型 :
__int64 __stdcall HCIP_YMClose(int type);
参数定义:
返回值:
备注:
软件找HD作者拿(魔改版)
流程:
[TOP]
如果要使用HD引擎
请先登录!!!
[TOP]
函数简介
:
HD登录验证接口(强烈建议主线程中调用)
函数原型:
__int64 __stdcall HCHD_Login(char* account, char*password, char*appName,
char*appLparam, BOOL bAutoUpdate = FALSE, BOOL bShowMsgBox =
FALSE);
参数定义:
返回值:
大于0表示版本号:当前服务器的版本号 不是当前插件的版本号
备注:
1.验证接口,所有接口需要通过验证才能调用
2.如果自己写中控可以不用打开自动更新
[TOP]
函数简介
:
[TOP]
函数简介
:
[TOP]
函数简介
:
[TOP]
函数简介
:
[TOP]
主要针对二次封装
简化流程
[TOP]
函数简介
:
第一种通讯安装插件方式(安装插件再打开进程) 如果使用HD多线程模块 强烈建议在登录回调中使用
函数原型:
__int64 __stdcall HDEX_InstallPlugin1(__int32
winIndex, char*app, int appType, int injectType, int memType, int gameType, BOOL
bAccept, __int64 openFun, __int64 checkFun = NULL, int timeOut =
30000);
参数定义:
app:进程名
appType:进程类型 32/64
injectType:注入类型 0 1 2
memeType :内存模式 0 1 2
gameType:游戏类型 一般为0就行
bAccept:是否开启接受线程
openFun:打开回调 回调类型:typedef __int64(__stdcall*INSTALLPLUGINTYPE)(int windowsIndex);
checkFun:检查回调 回调类型:typedef __int64(__stdcall*CHECKINSTALLPLUGINTYPE)(int windowsIndex, int preWindowsIndex, int prePid, int error);
timeOut:超时时间
返回值:
备注:
可以参考表安装插件接口类型表
回调解析:
打开回调openFun:可以参考表安装插件接口类型表
typedef __int64(__stdcall*INSTALLPLUGINTYPE)(int windowsIndex);
参数:
windowsIndex:当前指定序号
说明:
1.对于第一种方式打开回调不能为NULL,内部先安装插件再触发回调打开进程(在打开回调中可以手动或者自动打开进程 1.如果是手动直接返回1就行或错误值表示中断操作
2.如果是自动返回对应的PID或错误值表示中断操作)
2.其他二种方式打开回调可以为NULL,表示进程已经打开了,不需要在回调中打开,此时使用指定的PID或者窗口句柄来安装插件,具体是PID还是句柄请查看 安装插件接口类型表
3.返回值根据当前的安装插件方式不同有不同的含义:(具体请看安装插件接口类型表和覆盖策略)
3.1方式二 是通过PID安装插件 那么返回值应该为打开进程的PID,并把传递的PID参数给覆盖了(请看PID覆盖策略 ),可以返回小于等于0的错误值或者不存在的PID,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.1.1 PID覆盖策略
//1.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
//2.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID无效小于等于0不存在 就用指定参数的PID
//3.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID无效小于等于0不存在 就直接返回错误
//4.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
3.2方式三 是通过窗口句柄安装插件 那么返回值应该为打开进程的句柄,并把传递的句柄参数给覆盖了(请看窗口句柄覆盖策略 ) ,可以返回小于等于0的错误值或者窗口句柄无效,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.2.1 窗口句柄覆盖策略
//1.如果指定参数的窗口句柄有效
同时打开回调返回的的句柄有效 就用打开回调返回的句柄覆盖指定参数的句柄
//2.如果指定参数的窗口句柄有效
同时打开回调返回的的句柄无效 就用指定参数的句柄
//3.如果指定参数的窗口句柄无效
同时打开回调返回的的句柄无效 就直接返回错误
//4.如果指定参数的窗口句柄无效 同时打开回调返回的的句柄有效
就用打开回调返回的句柄覆盖指定参数的句柄
检查回调checkFun:
typedef __int64(__stdcall*CHECKINSTALLPLUGINTYPE)(int windowsIndex, int preWindowsIndex, int prePid, int error);
参数:
windowsIndex:当前指定序号
preWindowsIndex:之前绑定的序号或者错误值(小于0) --来源HCInject_GetPreWinIndex返回
prePid:之前绑定的序号对应的PID--来源HCInject_GetPid返回
error:提示值
error==RET_重连窗口(5)----->返回值含义:(1重连直接进行加载环境 0新窗口)
error==RET_重连窗口序号不一致(6)----->返回值含义:(1重连并使用之前绑定的序号进行加载环境 0新窗口(需要用户在回调中把之前PID给关闭))
其他情况可以返回小于0的自定义值:表示直接中断安装插件流程,并返回对应的值(这个值只要小于0即可,可以作为自定义值)
说明:
1.如果指定的检查回调为NULL,当内部检查到是重连窗口的时候
2.如果发现序号不一致就会直接返回(ERROR_当前进程插件序号不一致 -1216)
3.如果序号一致就直接加载环境并实现重连
几个核心的点 归纳总结出来 其实就能规避掉很多坑了 比如
1.没安装过插件的 都不算重连窗口 全部当新窗口处理 会触发打开回调
2.安装过插件的 不管是卸载了环境 还是崩溃或重启中控 都算重连窗口 不会触发打开回调
会触发检查回调
[TOP]
函数简介
:
第二种通讯安装插件方式(打开进程然后安装插件) , 通过pid 如果使用HD多线程模块 强烈建议在登录回调中使用
函数原型:
__int64 __stdcall HDEX_InstallPlugin2(__int32 winIndex,
int funType, int pid, int appType, int gameType, BOOL bAccept, __int64 openFun =
NULL, __int64 checkFun =
NULL, int timeOut =
30000);
参数定义:
funType:内部安装插件接口类型 查看安装插件接口类型表 支持2 4 6
pid:指定PID 可以为0,但是必须指定打开回调,打开回调返回PID
appType:进程类型 32/64
gameType:游戏类型 一般为0就行
bAccept:是否开启接受线程
openFun:打开回调 回调类型:typedef __int64(__stdcall*INSTALLPLUGINTYPE)(int windowsIndex);
checkFun:检查回调 回调类型:typedef __int64(__stdcall*CHECKINSTALLPLUGINTYPE)(int windowsIndex, int preWindowsIndex, int prePid, int error);
timeOut:超时时间
返回值:
备注:
可以参考表安装插件接口类型表
回调解析:
打开回调openFun
typedef __int64(__stdcall*INSTALLPLUGINTYPE)(int windowsIndex);
参数:
windowsIndex:当前指定序号
说明:
1.对于第一种方式打开回调不能为NULL,内部先安装插件再触发回调打开进程(在打开回调中可以手动或者自动打开进程 1.如果是手动直接返回1就行或错误值表示中断操作
2.如果是自动返回对应的PID或错误值表示中断操作)
2.其他二种方式打开回调可以为NULL,表示进程已经打开了,不需要在回调中打开,此时使用指定的PID或者窗口句柄来安装插件,具体是PID还是句柄请查看
安装插件接口类型表
3.返回值根据当前的安装插件方式不同有不同的含义:(具体请看安装插件接口类型表和覆盖策略)
3.1方式二 是通过PID安装插件 那么返回值应该为打开进程的PID,并把传递的PID参数给覆盖了(请看PID覆盖策略 ),可以返回小于等于0的错误值或者不存在的PID,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.1.1 PID覆盖策略
//1.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
//2.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID无效小于等于0不存在 就用指定参数的PID
//3.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID无效小于等于0不存在 就直接返回错误
//4.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
3.2方式三 是通过窗口句柄安装插件 那么返回值应该为打开进程的句柄,并把传递的句柄参数给覆盖了(请看窗口句柄覆盖策略 ),可以返回小于等于0的错误值或者窗口句柄无效,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.2.1 窗口句柄覆盖策略
//1.如果指定参数的窗口句柄有效
同时打开回调返回的的句柄有效 就用打开回调返回的句柄覆盖指定参数的句柄
//2.如果指定参数的窗口句柄有效
同时打开回调返回的的句柄无效 就用指定参数的句柄
//3.如果指定参数的窗口句柄无效
同时打开回调返回的的句柄无效 就直接返回错误
//4.如果指定参数的窗口句柄无效 同时打开回调返回的的句柄有效
就用打开回调返回的句柄覆盖指定参数的句柄
检查回调checkFun:
typedef __int64(__stdcall*CHECKINSTALLPLUGINTYPE)(int windowsIndex, int preWindowsIndex, int prePid, int error);
参数:
windowsIndex:当前指定序号
preWindowsIndex:之前绑定的序号或者错误值(小于0) --来源HCInject_GetPreWinIndex返回
prePid:之前绑定的序号对应的PID--来源HCInject_GetPid返回
error:提示值
error==RET_重连窗口(5)----->返回值含义:(1重连直接进行加载环境 0新窗口)
error==RET_重连窗口序号不一致(6)----->返回值含义:(1重连并使用之前绑定的序号进行加载环境 0新窗口(需要用户在回调中把之前PID给关闭))
说明:
1.如果指定的检查回调为NULL,当内部检查到是重连窗口的时候
2.如果发现序号不一致就会直接返回(ERROR_当前进程插件序号不一致 -1216)
3.如果序号一致就直接加载环境并实现重连
几个核心的点 归纳总结出来 其实就能规避掉很多坑了 比如
1.没安装过插件的 都不算重连窗口 全部当新窗口处理 会触发打开回调
2.安装过插件的 不管是卸载了环境 还是崩溃了中控 都算重连窗口
不会触发打开回调
[TOP]
函数简介 :
第三种通讯安装插件方式(打开进程然后安装插件) , 通过窗口句柄 如果使用HD多线程模块 强烈建议在登录回调中使用
函数原型
:
__int64 __stdcall HDEX_InstallPlugin3(__int32 winIndex, int
funType,__int64 hwnd, int appType, int gameType, BOOL bAccept, __int64 openFun =
NULL, __int64 checkFun = NULL, int timeOut =
30000);
参数定义:
funType:内部安装插件接口类型 查看安装插件接口类型表 支持3 5 7
hwnd:指定窗口句柄 可以为0,但是必须指定打开回调,打开回调返回窗口句柄
appType:进程类型 32/64
gameType:游戏类型 一般为0就行
bAccept:是否开启接受线程
openFun:打开回调 回调类型:typedef __int64(__stdcall*INSTALLPLUGINTYPE)(int windowsIndex);
checkFun:检查回调 回调类型:typedef __int64(__stdcall*CHECKINSTALLPLUGINTYPE)(int windowsIndex, int preWindowsIndex, int prePid, int error);
timeOut:超时时间
返回值:
备注:
可以参考表安装插件接口类型表
回调解析:
打开回调openFun:可以参考表安装插件接口类型表
typedef __int64(__stdcall*INSTALLPLUGINTYPE)(int windowsIndex);
参数:
windowsIndex:当前指定序号
说明:
1.对于第一种方式打开回调不能为NULL,内部先安装插件再触发回调打开进程(在打开回调中可以手动或者自动打开进程 1.如果是手动直接返回1就行或错误值表示中断操作
2.如果是自动返回对应的PID或错误值表示中断操作)
2.其他二种方式打开回调可以为NULL,表示进程已经打开了,不需要在回调中打开,此时使用指定的PID或者窗口句柄来安装插件,具体是PID还是句柄请查看安装插件接口类型表
3.返回值根据当前的安装插件方式不同有不同的含义:(具体请看安装插件接口类型表和覆盖策略)
3.1 方式二 是通过PID安装插件 那么返回值应该为打开进程的PID,并把传递的PID参数给覆盖了(请看PID覆盖策略 ),可以返回小于等于0的错误值或者不存在的PID,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.1.1 PID覆盖策略
//1.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
//2.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID无效小于等于0不存在
就用指定参数的PID
//3.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID无效小于等于0不存在
就直接返回错误
//4.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
3.2 方式三 是通过窗口句柄安装插件 那么返回值应该为打开进程的句柄,并把传递的句柄参数给覆盖了(请看窗口句柄覆盖策略 ),可以返回小于等于0的错误值或者窗口句柄无效,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.2.1 窗口句柄覆盖策略
//1.如果指定参数的窗口句柄有效 同时打开回调返回的的句柄有效
就用打开回调返回的句柄覆盖指定参数的句柄
//2.如果指定参数的窗口句柄有效 同时打开回调返回的的句柄无效 就用指定参数的句柄
//3.如果指定参数的窗口句柄无效 同时打开回调返回的的句柄无效 就直接返回错误
//4.如果指定参数的窗口句柄无效 同时打开回调返回的的句柄有效 就用打开回调返回的句柄覆盖指定参数的句柄
检查回调checkFun:
typedef __int64(__stdcall*CHECKINSTALLPLUGINTYPE)(int windowsIndex, int preWindowsIndex, int prePid, int error);
参数:
windowsIndex:当前指定序号
preWindowsIndex:之前绑定的序号或者错误值(小于0) --来源HCInject_GetPreWinIndex返回
prePid:之前绑定的序号对应的PID--来源HCInject_GetPid返回
error:提示值
error==RET_重连窗口(5)----->返回值含义:(1重连直接进行加载环境 0新窗口)
error==RET_重连窗口序号不一致(6)----->返回值含义:(1重连并使用之前绑定的序号进行加载环境 0新窗口(需要用户在回调中把之前PID给关闭))
说明:
1.如果指定的检查回调为NULL,当内部检查到是重连窗口的时候
2.如果发现序号不一致就会直接返回(ERROR_当前进程插件序号不一致 -1216)
3.如果序号一致就直接加载环境并实现重连
几个核心的点 归纳总结出来 其实就能规避掉很多坑了 比如
1.没安装过插件的 都不算重连窗口 全部当新窗口处理 会触发打开回调
2.安装过插件的 不管是卸载了环境 还是崩溃了中控 都算重连窗口
不会触发打开回调
[TOP]
安装插件接口类型表:
调用接口名->内部安装插件接口,安装顺序 | funType | 安装方式 | 是否需要驱动 | 打开回调返回值 |
HDEX_InstallPlugin1->HCHD_InstallPlug(86/64) 无模块强力注入,先安装插件再打开进程 | 1 | 自动 | 需要HD驱动 | openFun返回任意(无用处),不可为NULL |
HDEX_InstallPlugin2->HCHD_NormalInstallPlugX86X64 有模块强力注入,先打开进程再安装插件 | 2 | pid | 需要HD驱动 | penFun返回pid(替换参数pid),可为NULL |
HDEX_InstallPlugin3-> HCHD_NormalInstallPlugX86X64 有模块强力注入,先打开进程再安装插件 | 3 | hwnd | 需要HD驱动 | openFun返回句柄(替换参数句柄),可为NULL |
HDEX_InstallPlugin2-> HCHD_NormalInstallPlugX86X64Ex 有模块强力注入,先打开进程再安装插件 | 4 | pid | 需要HD驱动 | penFun返回pid(替换参数pid),可为NULL |
HDEX_InstallPlugin3->HCHD_NormalInstallPlugX86X64Ex 有模块强力注入,先打开进程再安装插件 | 5 | hwnd | 需要HD驱动 | openFun返回句柄(替换参数句柄),可为NULL |
HDEX_InstallPlugin2->HCN_NormalInstallPlugX86 HCN_NormalInstallPlugX64 有模块注入,先打开进程再安装插件 | 6 | pid | 不需要驱动 | penFun返回pid(替换参数pid),可为NULL |
HDEX_InstallPlugin3->HCN_NormalInstallPlugX86Ex HCHD_NormalInstallPlugX64Ex 有模块注入,先打开进程再安装插件 | 7 | hwnd | 不需要驱动 | openFun返回句柄(替换参数句柄),可为NULL |
HDEX_InstallPlugin2->HCHDVT_InstallPlugX86 HCHDVT_InstallPlugX64 无模块注入,先打开进程再安装插件 | 8 | pid | 需要HDVT驱动 | penFun返回pid(替换参数pid),可为NULL |
HDEX_InstallPlugin3->HCHDVT_InstallPlugX86 HCHDVT_InstallPlugX64 无模块注入,先打开进程再安装插件 | 9 | hwnd | 需要HDVT驱动 | openFun返回句柄(替换参数句柄),可为NULL |
回调解析:
打开回调openFun:可以参考表安装插件接口类型表
typedef __int64(__stdcall*INSTALLPLUGINTYPE)(int windowsIndex);
参数:
windowsIndex:当前指定序号
说明:
1.对于
第一种方式
打开回调不能为NULL,内部先安装插件再触发回调打开进程(
在打开回调中可以手动或者自动打开进程 1.如果是手动直接返回1就行或错误值表示中断操作
2.如果是自动返回对应的PID或错误值表示中断操作)
2.其他二种方式打开回调可以为NULL,表示进程已经打开了,不需要在回调中打开,此时使用指定的PID或者窗口句柄来安装插件,具体是PID还是句柄请查看
安装插件接口类型表
3.返回值根据当前的安装插件方式不同有不同的含义:(
具体请看安装插件接口类型表和覆盖策略)
3.1方式二 是通过PID安装插件 那么返回值应该为打开进程的PID,并把传递的PID参数给覆盖了(请看PID覆盖策略 ),可以返回小于等于0的错误值或者不存在的PID,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.1.1 PID覆盖策略
//1.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
//2.如果指定的参数PID有效大于0并存在
同时打开回调返回的PID无效小于等于0不存在 就用指定参数的PID
//3.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID无效小于等于0不存在 就直接返回错误
//4.如果指定的参数PID无效小于等于0不存在
同时打开回调返回的PID有效大于0并存在
就用打开回调返回的PID覆盖指定参数的PID
3.2方式三 是通过窗口句柄安装插件 那么返回值应该为打开进程的句柄,并把传递的句柄参数给覆盖了(请看窗口句柄覆盖策略 ),可以返回小于等于0的错误值或者窗口句柄无效,从而中断安装插件退出,不做相应的安装插件流程(初始化序号-获取PID-加载环境-等待20-继续-等待120),并把打开回调返回值当作安装插件返回值返回。
3.2.1 窗口句柄覆盖策略
//1.如果指定参数的窗口句柄有效
同时打开回调返回的的句柄有效 就用打开回调返回的句柄覆盖指定参数的句柄
//2.如果指定参数的窗口句柄有效
同时打开回调返回的的句柄无效 就用指定参数的句柄
//3.如果指定参数的窗口句柄无效
同时打开回调返回的的句柄无效 就直接返回错误
//4.如果指定参数的窗口句柄无效 同时打开回调返回的的句柄有效
就用打开回调返回的句柄覆盖指定参数的句柄
检查回调checkFun:
typedef __int64(__stdcall*CHECKINSTALLPLUGINTYPE)(int windowsIndex, int preWindowsIndex, int prePid, int error);
参数:
windowsIndex:当前指定序号
preWindowsIndex:之前绑定的序号
prePid:之前绑定的序号对应的PID
error:提示值
error==RET_重连窗口(5)----->返回值含义:(1重连直接进行加载环境 0新窗口)
error==RET_重连窗口序号不一致(6)----->返回值含义:(1重连并使用之前绑定的序号进行加载环境 0新窗口(需要用户在回调中把之前PID给关闭))
说明:
1.如果指定的检查回调为NULL,当内部检查到是重连窗口的时候
2.如果发现序号不一致就会直接返回(ERROR_当前进程插件序号不一致 -1216)
3.如果序号一致就直接加载环境并实现重连
[TOP]
函数简介
:
初始化插件环境
函数原型:
__int64
__stdcall HCInject_Init(__int32 窗口序号, BOOL 是否重置
= FALSE);
参数定义 :
返回值:
备注:
每次打开游戏都需要先初始化一次
不要多次初始化
该接口还会把当前全局进程位数HCEnv_SetProcessType与当前窗口序号进程绑定,省去了切换进程位数的操作,如果不绑定可能会返回-1107(ERROR_进程位数不匹配)
[TOP]
函数简介
:
初始化插件环境
函数原型:
__int64
__stdcall HCInject_InitEx(__int32 窗口序号, char
*预加载LUA模块全路径, BOOL 是否重置 = FALSE);
参数定义 :
返回值:
备注:
每次打开游戏都需要先初始化一次
不要多次初始化
如果不需要用LUA来初始化自己的数据,可以直接使用HCInject_Init
该接口还会把当前全局进程位数HCEnv_SetProcessType与当前窗口序号进程绑定,省去了切换进程位数的操作,如果不绑定可能会返回-1107(ERROR_进程位数不匹配)
[TOP]
函数简介 :
初始化插件环境
函数原型:
__int64
__stdcall HCInject_InitExx(__int32 窗口序号, char *预加载DLL模块全路径 =
NULL, char *预加载LUA模块全路径 = NULL, __int32 addType = -1, BOOL 是否重置 =
FALSE);
参数定义 :
返回值:
备注:
每次打开游戏都需要先初始化一次
不要多次初始化
如果不需要用LUA来初始化自己的数据或者预加载DLL,可以直接使用HCInject_Init
该接口还会把当前全局进程位数HCEnv_SetProcessType与当前窗口序号进程绑定,省去了切换进程位数的操作,如果不绑定可能会返回-1107(ERROR_进程位数不匹配)
[TOP]
函数简介:
获取打开的进程PID
函数原型:
__int64
__stdcall HCInject_GetPid(__int32
窗口序号);
参数定义 :
返回值:
备注:
调用这个接口之前必须保证插件已经加载才会获取PID
[TOP]
函数简介:
获取打开的进程之前的PID(可以用于重连)
函数原型:
__int64 __stdcall HCInject_GetPrePid
(__int32
窗口序号);
参数定义 :
返回值:
备注:
当我们在调试的时候中控如果崩了,如果此时插件还在游戏进程中执行,那么可以当打开中控的时候直接获取PID进行通讯,而不是调用初始化之类的操作
[TOP]
函数简介:
通过进程PID尝试拿到绑定的窗口序号
函数原型:
__int64
__stdcall
HCInject_GetPreWinIndex(__int32
pid);
参数定义 :
返回值:
备注:
返回如果大于等于0的值表示之前进程绑定的窗口序号
没有进程PID返回-1178
没有绑定过返回-1179
[TOP]
函数简介
:
获取窗口句柄,内部是通过PID获取窗口句柄 需要先安装好插件到目标进程
函数原型:
__int64
__stdcall HCInject_GetHwnd(__int32 窗口序号, char* className,
char* title, __int32 filter, BOOL bType, __int32 mis =
0);
参数定义 :
className:窗口类名(不指定为NULL/0)
title:窗口标题(不指定为NULL/0)
filter: 1标题 2类名 8检测是否无父窗口 16检查窗口句柄是否有效 多个标识可以用| 累加
bType:真/1 为模糊匹配 假/0 为完全匹配
mis:循环检查毫秒数 mis<=0 表示不需要循环获取 >0表示内部循环获取句柄 直到有值
返回值:
备注:
内部是通过HCWIN_EnumWindowByProcessId获取
[TOP]
函数简介 :
获取窗口句柄(需要内置,一般不需要调用这个获取句柄),如果需要通过PID获取句柄请调用HCInject_GetHwnd
函数原型:
__int64
__stdcall HCInject_GetHwndEx(__int32 窗口序号);
参数定义 :
返回值:
备注:
这个接口和内置的游戏接口有关,需要搭建完通讯才能调用
并不是一定获取到
如果要获取进程句柄还需要自行获取,除非内置了游戏数据
[TOP]
函数简介
:
继续环境加载操作
函数原型:
__int64
__stdcall HCInject_Continue(__int32
窗口序号);
参数定义 :
返回值:
备注:
当我们调用了HCEnv_Load后需要调用这个接口来验证
[TOP]
函数简介
:
存自定义二进制数据
函数原型:
__int64 __stdcall HCInject_SetData(__int32 窗口序号, void *用户数据缓冲区, __int32
数据大小);
参数定义 :
返回值:
备注:
无
[TOP]
函数简介
:
取自定义二进制数据
函数原型:
__int64 __stdcall HCInject_GetData(__int32 窗口序号,
void *用户数据缓冲区, __int32
缓冲区大小);
参数定义 :
返回值:
备注:
取的数据就是用HCInject_SetData接口存的数据
[TOP]
[TOP]
函数简介
:
HD插件环境加载(初始化中控环境)
函数原型:
__int64 __stdcall HCEnv_Init(__int32 timeOut = 10000);
参数定义:
返回值:
返回值为0是正确的,表示当前中控进程窗口序号为0 !!!
目标进程窗口序号大于等于1,自己管理, 0序号内置为中控进程窗口序号
备注:
中控初始化开始就要调用,仅仅一次
[TOP]
函数简介
:
HD插件环境加载(初始化中控环境)(扩展版本)最新版本一般不用了
函数原型:
__int64 __stdcall HCEnv_InitEx(__int32 通讯超时毫秒 = 10000, __int32 通讯检测间隔毫秒 = 20, __int32 回调响应毫秒 = 5);
参数定义:
通讯检测间隔毫秒:默认就行,越小响应越快,CPU占用了越高(可以忽视 最新版本不需要考虑这个问题了)
回调响应毫秒:默认就行,越小响应越快,CPU占用了越高
返回值:
返回值为0是正确的,表示当前中控进程窗口序号为0 !!!
目标进程窗口序号大于等于1,自己管理, 0序号内置为中控进程窗口序号
备注:
中控初始化开始就要调用,仅仅一次
[TOP]
函数简介
:
HD插件环境加载
函数原型:
__int64
__stdcall HCEnv_Load
(__int32 窗口序号, __int32 目标进程PID, __int32 游戏类型 =
0);
参数定义:
返回值:
备注:
调用这个接口需要先调用环境初始化模块中的初始化接口
每次打开进程后都要调用
[TOP]
函数简介
:
HD插件环境加载(扩展版本),涉及到回调
函数原型:
__int64
__stdcall HCEnv_LoadEx
(__int32 窗口序号, __int32 目标进程PID, __int32 游戏类型 = 0, BOOL 是否开启接受线程 =
FALSE);
参数定义:
返回值:
备注:
调用这个接口需要先调用环境初始化模块中的初始化接口
每次打开进程后都要调用
[TOP]
函数简介 :
HD插件环境卸载
函数原型 :
__int64 __stdcall HCEnv_UnLoad
(__int32
窗口序号);
参数定义:
返回值:
备注:
调用这个接口需要先调用环境初始化模块中的初始化接口
进程关闭一定要记得卸载窗口序号对应的窗口环境,以便于下次窗口序号使用
1.没安装过插件的 都不算重连窗口 全部当新窗口处理
2.安装过插件的 不管是卸载了环境 还是崩溃了中控 都算重连窗口
[TOP]
函数简介
:
获取副窗口序号
函数原型:
__int64 __stdcall HDEnv_GetWinExIndex(__int32 winIndex);
参数定义:
返回值:
备注:
这个副窗口序号可以用于登录器的绑定和操作,相当于窗口序号的一个助手,做一些额外的事情
相当于一个窗口序号可以操作2个进程
如:窗口序号1
那么他返回的窗口扩展序号就是1+31
也就是32序号
[TOP]
函数简介 :
获取全局副窗口序号,这是一个全局的序号
函数原型:
__int64 __stdcall HDEnv_GetGlobalWinExIndex ();
参数定义:
无
返回值:
备注:
一个中控仅有一个
计算方式:0+31
也就是这个全局序号为31
序号从0开始
用途:
给当前中控分配一个助手,来控制一个进程来辅助中控做一些事情
[TOP]
函数简介
:
给中控附加心跳
函数原型:
__int64 __stdcall HCEnv_AttachHeart(__int32 type, __int64 funCallbackAddr, __int32 timeOut = 10000);
参数定义:
给中控附加心跳
type:1->通讯线程 2->主线程 3->卡屏
6->1+2+3
如果需要检测主线程心跳是否卡住,请记得先HOOK主线程【HC_HookMainThread】接口
timeOut:检测超时,当超过这个时间相关值没有发现改变,则判定为卡住或者掉线
funCallbackAddr:当出现卡住或者掉线会触发相应的回调函数,并传递2个参数分别是->窗口索引和事件类型
typedef __int32(__stdcall
*HeartFunType)(__int32 窗口索引, __int32 type);
回调函数返回值:1就行
无实际意义
返回值:
备注:
检测主线程心跳
如果需要检测主线程心跳是否卡住,请记得先HOOK主线程接口HC_HookMainThread
设置心跳回调函数类型
typedef
__int32(*HeartFunType)(__int32 窗口索引, __int32 type);
回调函数返回值:0不重置之前的记录
1重置之前的记录(一般重新开启新进程会设置为1)
//
1.通讯 崩溃/关闭等等原因 导致进程不存在 -> 重启窗口
// 2.主线程
崩溃/关闭/未响应/目标进程卡死原因 导致进程不存在/存在 -> 强制关闭 - >重启窗口
设置挂接主线程
// 2.1. 附加心跳的时候 可以检查主线程的状态(游戏/目标)
// 2.2. 后面的内存操作 可以主线程调用
//
2.3. 注意:附加心跳的时候 设置的检查时间 一定要大于 安装插件到挂接主线程的时间
// 3.卡屏
崩溃/关闭/区域图像卡死了原因 导致进程不存在/存在 -> 强制关闭 - >重启窗口
设置屏幕检查范围
//
6.1+2+3
[TOP]
函数简介 :
当我们心跳检测指定了3或者6
需要设置卡屏范围和卡屏检测次数
当大于这个次数 就调用回调
函数原型:
__int64 __stdcall HCEnv_SetScreenCheckHeart(__int32 x, __int32 y, __int32 w,
__int32 h, __int32 最大次数,__int32 截屏前后间隔时间 =
1000);
参数定义:
返回值:
备注:
[TOP]
函数简介
:
脱离中控附加的心跳检测
函数原型 :
__int64 __stdcall HCEnv_DetachHeart(
);
参数定义:
无
返回值:
备注:
脱离会堵塞直到脱离成功
一般中控进程结果关闭前调用
[TOP]
函数简介
:
设置导入接口为调试模式
函数原型 :
__int64 __stdcall HCEnv_Debug(BOOL 是否调试 = FALSE);
参数定义:
返回值:
备注:
中控初始化开始就可以调用,仅仅一次
发布版本不需要调用此接口,默认为发布版本
[TOP]
函数简介
:
添加线程环境
函数原型:
__int64 __stdcall HCEnv_AddThread(__int32 窗口序号, __int32 线程ID, __int32 bDebug
= 0);
参数定义:
线程ID:当前线程ID
bDebug :是否是调试模式,如果是那么线程ID可以任意指定
返回值:
备注:
这个接口用来测试用的,开发者一般用不到
[TOP]
函数简介 :
测试是否通讯成功,返回单一值
函数原型:
__int64 __stdcall HCEnv_TestCALL_RetValue(__int32 窗口序号, __int64 rcx = 0,
__int64 rdx = 0, __int64 r8 = 0, __int64 r9 = 0, __int64 lparam5 = 0, __int64
lparam6 = 0, BOOL 是否主线程调用 = FALSE);
参数定义:
rcx:CALL参数
rdx:CALL参数
r8:CALL参数
r9:CALL参数
l5:CALL参数
l6:CALL参数
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
这个接口用来测试是否环境搭建成功
[TOP]
函数简介
:
测试是否通讯成功,返回json字符串
函数原型:
__int64 __stdcall HCEnv_TestCALL_RetArray(__int32 窗口序号, __int64 rcx = 0,
__int64 rdx = 0, __int64 r8 = 0, __int64 r9 = 0, __int64 lparam5 = 0, __int64
lparam6 = 0, BOOL 是否主线程调用 = FALSE);
参数定义:
rcx:CALL参数
rdx:CALL参数
r8:CALL参数
r9:CALL参数
l5:CALL参数
l6:CALL参数
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
这个接口用来测试是否环境搭建成功
[TOP]
函数简介 :
测试是否通讯成功,返回单一值
函数原型:
__int64 __stdcall HCEnv_TestCALL_RetValueEx(__int32 窗口序号, __int32 线程ID,
__int64 rcx = 0, __int64 rdx = 0, __int64 r8 = 0, __int64 r9 = 0, __int64
lparam5 = 0, __int64 lparam6 = 0, BOOL 是否主线程调用 = FALSE);
参数定义:
rcx:CALL参数
rdx:CALL参数
r8:CALL参数
r9:CALL参数
l5:CALL参数
l6:CALL参数
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
这个接口用来测试是否环境搭建成功
[TOP]
函数简介
:
测试是否通讯成功,返回json字符串
函数原型:
__int64 __stdcall HCEnv_TestCALL_RetArrayEx(__int32 窗口序号, __int32 线程ID,
__int64 rcx = 0, __int64 rdx = 0, __int64 r8 = 0, __int64 r9 = 0, __int64
lparam5 = 0, __int64 lparam6 = 0, BOOL 是否主线程调用 = FALSE);
参数定义:
rcx:CALL参数
rdx:CALL参数
r8:CALL参数
r9:CALL参数
l5:CALL参数
l6:CALL参数
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
这个接口用来测试是否环境搭建成功
[TOP]
函数简介
:
设置目标进程位数
函数原型:
__int64 __stdcall HCEnv_SetProcessType (__int32 进程位数);
参数定义:
返回值:
备注:
该接口是全局设置,也就是设置了一次,接下来的所有进程都是该位数,可以多次调用切换进程位数,建议使用HCEnv_SetProcessTypeEx这个扩展版本
如果使用了HDEX_InstallPlugin1 HDEX_InstallPlugin2 HDEX_InstallPlugin3 这些接口 可以不用调用这个接口设置目标进程位数
如果是自定义通讯流程就需要自己设置后然后初始化序号进行通讯绑定
[TOP]
函数简介 :
指定某个序号绑定的进程位数
函数原型:
__int64 __stdcall HCEnv_SetProcessTypeEx(__int32 窗口序号,__int32 进程位数);
参数定义:
窗口序号:窗口序号
返回值:
备注:
如果使用了HDEX_InstallPlugin1 HDEX_InstallPlugin2 HDEX_InstallPlugin3 这些接口 可以不用调用这个接口设置目标进程位数
如果是自定义通讯流程就需要自己设置后然后初始化序号进行通讯绑定
[TOP]
函数简介
:
设置中控事件处理回调函数
函数原型:
__int64 __stdcall HCEnv_SetHandleEventCallBack(__int64 funCallBack);
参数定义:
返回值:
备注:
这个回调函数作用于当自定义模块通知中控的时候
中控事件处理回调函数接口类型:
{
__int32 m_callType;//自定义
HDValue m_call;
HDValue m_rcx;
HDValue m_rdx;
HDValue m_r8;
HDValue m_r9;
HDValue m_lparam5;
HDValue m_lparam6;
HDValue m_lparam7;
HDValue m_lparam8;
HDValue m_value;
HDValue m_size;
char m_buffer[MAX_PATH];
char m_buffer2[MAX_PATH];
HDValue* m_pRetValue;//值 单独
char* m_pRetJson;//字符串 返回
}HDHandleEventInfo;
{
HDbgPrintf_Normal("处理接受事件->窗口序号:%d callType:%d buffer1:%s
buffer2:%s call:%llX rcx:%llX rdx:%llX",
窗口序号,
Info.m_callType,
Info.m_buffer,
Info.m_buffer2,
Info.m_call,
Info.m_rcx,
Info.m_rdx
);
if
(Info.m_callType == 1)
{
*Info.m_pRetValue =
999;
auto ret =
HCMKB_UnBind(窗口序号);
HDbgPrintf_Normal("解绑后台 ret:%d",
ret);
return 8;
}
else if (Info.m_callType ==
2)
{
//处理逻辑
*Info.m_pRetValue =
123;
sprintf_s(Info.m_pRetJson, 1024 * 10, "%s",
"我是中控");
//672 637
auto ret = HCMKB_Bind(窗口序号,
Info.m_call,"1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0|1|");
HDbgPrintf_Normal("绑定后台
ret:%d", ret);
if (ret ==
1)
{
Sleep(1000);
ret =
HCMKB_MoveTo(窗口序号, 672, 610,
0);
HDbgPrintf_Normal("模拟移动一次->672 610 ret:%d",
ret);
ret =
HCMKB_LeftClick(窗口序号);
HDbgPrintf_Normal("模拟点击一次->ret:%d",
ret);
}
return 1024 * 10;//大于8
认为是字符串
}
*Info.m_pRetValue = 1;
return
8;
}
[TOP]
函数简介 :
设置关闭回调函数(处理HD功能失效,内部自动关闭中控前的操作)
函数原型
:
__int64 __stdcall HCEnv_SetShutDownCallBack(__int64 funCallBack);
参数定义:
返回值:
备注:
当HD出现异常或者失效或者网络验证出现断线,会在自动关闭自身在期间会先调用这个回调(这个回调自己做好关闭前处理工作) 然后会自动调用微软API接口ExitProcess();结束自身
在这个回调用户可以自行处理自己的业务逻辑
1.资源清理逻辑
2.接口释放逻辑
3.自启逻辑
4.自定义处理逻辑
回调函数接口类型:
code:错误代码
[TOP]
函数简介 :
设置 通讯检测间隔毫秒
函数原型
:
__int64 __stdcall HCEnv_SetCheckComItlTime(__int32 通讯检测间隔毫秒 = 20);
参数定义:
返回值:
备注:
1.值越小响应越快,随之带来的效率更高但是会导致CPU利用率变高
2.值的大小根据当前的项目指定,对于一直要实时响应的最好小点
[TOP]
函数简介
:
设置回调响应毫秒
函数原型 :
__int64 __stdcall HCEnv_SetCheckCallBackTime(__int32 回调响应毫秒 = 5);
参数定义:
返回值:
备注:
1.值越小响应越快,随之带来的效率更高但是会导致CPU利用率变高
2.值的大小根据当前的项目指定,对于一直要实时响应的最好小点
[TOP]
函数简介
:
强制结束当前线程(可以在卸载环境后调用)
函数原型:
__int64 __stdcall HCEnv_TerminateThread(__int32 窗口序号, __int32 threadId, BOOL 是否操作锁 = TRUE);
参数定义:
返回值:
备注:
强制结束当前线程
内部会对锁操作
循环拿到锁才会强制关闭并返回成功
此接口小心使用
1.不到万不得已不要强制关闭线程(因为强制关闭线程不管在任何时候都有可能造成不可能预计的BUG)
2.调用此接口的线程不要和结束的线程是同一个(虽然内部有检查)
3.该接口如果参数:是否操作锁为真,那么会堵塞,直到拿到锁权限后,才会强制关闭线程,然后解锁(防止死锁).
[TOP]
函数简介 :
强制结束当前线程 (可以在卸载环境后调用)
函数原型:
__int64 __stdcall HCEnv_TerminateThreadEx(__int32 窗口序号, __int64 threadHandle, BOOL 是否操作锁 = TRUE);
参数定义:
返回值:
备注:
强制结束当前线程
内部会对锁操作
循环拿到锁才会强制关闭并返回成功
此接口小心使用
1.不到万不得已不要强制关闭线程(因为强制关闭线程不管在任何时候都有可能造成不可能预计的BUG)
2.调用此接口的线程不要和结束的线程是同一个(虽然内部有检查)
3.该接口如果参数:是否操作锁为真,那么会堵塞,直到拿到锁权限后,才会强制关闭线程,然后解锁(防止死锁).
[TOP]
窗口序号范围说明:
两种模式:(不需要设置,序号自行维护,但是要知道序号的含义)
以下是对两种不同模型下窗口序号对应的含义:
第一种:共享模式可以30开
-0中控序号
-1~30 窗口序号
-31 中控序号的副窗口序号(助手)
-32-61 窗口序号的副窗口序号(助手)
第二种:独立模式(无助手)可以60开
-0中控序号
-1~30 窗口序号
-31 无用
-32-61 窗口序号
调试/发布版本说明:
调试版本:
测试账号可以使用,但是只能单开
正式账号不限制
发布版本:
正式账号不限制
[TOP]
通用性多线程框架
适合各种语言
完美兼容HD接口
解决语言差异性带来的不稳定性
[TOP]
函数简介 :
初始化多线程 设置相关 流程回调
函数原型 :
__int64 __stdcall HCMT_InitProcess (__int64 hwnd, void*
updateUICallBack, void* loginCallBack, void* firstCallBack, void* secondCallBack,
void* endCallBack,
void*
restartPreCallBack);
参数定义:
updateUICallBack:
UIFUNTYPE
UI回调
loginCallBack:
FUNTYPE 登录回调 唯一锁,多个窗口同时启动会一个一个调用,保证有序性!!!!
firstCallBack:
FUNTYPE 第一执行回调 注意:内部应该写成循环
并配合HCMT_Sleep()和HCMT_IsRunning() 不要主动返回执行回调(return 1;) 应该调用接口内部结束或者其他操作
secondCallBack: FUNTYPE 第二执行回调 注意:内部应该写成循环 并配合HCMT_Sleep()和HCMT_IsRunning()
不要主动返回执行回调(return 1;) 应该调用接口内部结束或者其他操作
endCallBack: FUNTYPE 结束回调
restartPreCallBack: FUNTYPE 重启前回调
返回值:
备注:
1.普通回调1参数windowsIndex:代表的是窗口序号也是主序号
2.每个回调参数的函数类型不一样,注意对应
回调触发顺序:
开启窗口:登录回调--->第一/第二执行回调同时开启--->结束回调
重启窗口:重启前回调--->登录回调--->第一/第二执行回调同时开启--->结束回调
参数回调函数类型:
------------------------------------------------------------------------------------普通回调1
typedef __int64(__stdcall *FUNTYPE )(__int32 windowsIndex);
windowsIndex:窗口序号
------------------------------------------------------------------------------------普通回调2
typedef __int64(__stdcall *FUNTYPE )(__int32 index);
index:窗口序号/主序号/副序号
------------------------------------------------------------------------------------UI回调
typedef
__int64(__stdcall *UIFUNTYPE)(__int32
windowsIndex, char *stepText, BOOL end1, BOOL pause1, __int32 threadState1,
BOOL m_end2, BOOL m_pause2, __int32 threadState2);
windowsIndex:窗口序号
stepText:日志信息/操作信息
end1:主执行线程的结束标志状态
pause1:主执行线程的暂停标志状态
threadState1:主执行线程的线程操作状态
end2:副线程的结束标志状态
pause2:副线程的暂停标志状态
threadState2:副线程的线程操作状态
------------------------------------------------------------------------------------消息回调
typedef __int64(__stdcall *MSGFUNTYPE)(WPARAM wparam,,
LPARAM lparam);
wparam:自定义参数1
lparam:自定义参数2
[TOP]
函数简介 :
初始化多线程 设置相关 流程回调 可以绑定一个全局参数
函数原型 :
__int64 __stdcall
HCMT_InitProcessEx(__int64 hwnd, void*
updateUICallBackEx, void* loginCallBack, void* firstCallBack, void*
secondCallBack, void* endCallBack, void* restartPreCallBack, void* lparam);
参数定义:
updateUICallBack:UIFUNTYPEUI回调
loginCallBack: FUNTYPE 登录回调
唯一锁,多个窗口同时启动会一个一个调用,保证有序性!!!!
firstCallBack:FUNTYPE 第一执行回调注意:内部应该写成循环
并配合HCMT_Sleep()和HCMT_IsRunning() 不要主动返回执行回调(return 1;) 应该调用接口内部结束或者其他操作
secondCallBack:FUNTYPE第二执行回调 注意:内部应该写成循环 并配合HCMT_Sleep()和HCMT_IsRunning()
不要主动返回执行回调(return 1;) 应该调用接口内部结束或者其他操作
endCallBack:
FUNTYPE
结束回调
restartPreCallBack: FUNTYPE
重启前回调
lparam:绑定一个全局参数,一般我们指定为一个UI对象地址
返回值:
备注:
1.普通回调1参数windowsIndex:代表的是窗口序号也是主序号
2.每个回调参数的函数类型不一样,注意对应
回调触发顺序:
开启窗口:登录回调--->第一/第二执行回调同时开启--->结束回调
重启窗口:重启前回调--->登录回调--->第一/第二执行回调同时开启--->结束回调
参数回调函数类型:
------------------------------------------------------------------------------------普通回调1
typedef __int64(__stdcall *FUNTYPE )(__int32 windowsIndex);
windowsIndex:窗口序号
------------------------------------------------------------------------------------普通回调2
typedef __int64(__stdcall *FUNTYPE )(__int32 index);
index:窗口序号/主序号/副序号
------------------------------------------------------------------------------------UI回调EX
typedef __int64(__stdcall *UIFUNTYPEEX)(__int32 windowsIndex, char *stepText, void* lparam,
BOOL m_end1, BOOL m_pause1, __int32 threadState1, BOOL m_end2, BOOL m_pause2,
__int32 threadState2);
windowsIndex:窗口序号
stepText:日志信息/操作信息
lparam:HCMT_InitProcessEx绑定一个全局参数,一般我们指定为一个UI对象地址,这个回调可以拿到这个地址
end1:主执行线程的结束标志状态
pause1:主执行线程的暂停标志状态
threadState1:主执行线程的线程操作状态
end2:副线程的结束标志状态
pause2:副线程的暂停标志状态
threadState2:副线程的线程操作状态
------------------------------------------------------------------------------------消息回调
typedef __int64(__stdcall *MSGFUNTYPE)(WPARAM wparam,, LPARAM lparam);
wparam:自定义参数1
lparam:自定义参数2
[TOP]
函数简介 :
初始化多线程结束/暂停/恢复状态的操作回调
函数原型
:
__int64 __stdcall HCMT_InitOperate(void* endBindCallBack, void*
pauseBindCallBack, void*
recoverBindCallBack);
参数定义:
endBindCallBack:FUNTYPE 结束绑定回调 当调用HCMT_SetStop/HCMT_SetAllStop
会触发
pauseBindCallBack:FUNTYPE 暂停绑定回调 当调用HCMT_SetPause/HCMT_SetAllPause
会触发
recoverBindCallBack:FUNTYPE 恢复绑定回调 当调用HCMT_SetRecover /HCMT_SetAllRecover
会触发
返回值:
备注:
1.仅仅对于这3个回调而言 普通回调2 参数index:大于多开限制数量,就是副序号;小于就是主序号(也是窗口序号);计算公式:if(index >= 多开限制数) 主序号= index - 多开限制数;
//(index >= 多开环境数量) ? (index
- 多开环境数量) :
(index)
2.其他接口的windowsIndex就代表的是窗口序号也是主序号
3.多开限制数量最大常量为31,请自行在程序里面定义
4.多开限制数量用HCEnv_GetMaxWindowNum返回一个常数,可以自己写成一个常量
回调触发顺序:
结束窗口操作:endBindCallBack 并传递对应的线程序号(线程序号可能是主序号也就是窗口序号,也有可能是副序号)
暂停窗口操作:pauseBindCallBack 并传递对应的线程序号 (线程序号可能是主序号也就是窗口序号,也有可能是副序号)
恢复窗口操作:recoverBindCallBack 并传递对应的线程序号 (线程序号可能是主序号也就是窗口序号,也有可能是副序号)
参数回调函数类型:
------------------------------------------------------------------------------------普通回调1
typedef __int64(__stdcall *FUNTYPE )(__int32 windowsIndex);
windowsIndex:窗口序号
------------------------------------------------------------------------------------普通回调2
typedef __int64(__stdcall *FUNTYPE )(__int32 index);
index:窗口序号/主序号/副序号
------------------------------------------------------------------------------------UI回调
typedef __int64(__stdcall *UIFUNTYPE)(__int32 windowsIndex, char *stepText, BOOL
end1, BOOL pause1, __int32 threadState1, BOOL m_end2, BOOL m_pause2, __int32
threadState2);
windowsIndex:窗口序号
stepText:日志信息/操作信息
end1:主执行线程的结束标志状态
pause1:主执行线程的暂停标志状态
threadState1:主执行线程的线程操作状态
end2:副线程的结束标志状态
pause2:副线程的暂停标志状态
threadState2:副线程的线程操作状态
------------------------------------------------------------------------------------消息回调
typedef __int64(__stdcall *MSGFUNTYPE)(WPARAM wparam,, LPARAM lparam);
wparam:自定义参数1
lparam:自定义参数2
[TOP]
函数简介 :
注册窗口消息
函数原型
:
__int64 __stdcall HCMT_RegisterMessage(__int32 msg, void*
msgCallBack);
参数定义:
msgCallBack:MSGFUNTYPE
消息回调
备注:
1.通过HCMT_MsgSend/HCMT_MsgPost来触发回调
参数回调函数类型:
------------------------------------------------------------------------------------普通回调1
typedef __int64(__stdcall *FUNTYPE )(__int32 windowsIndex);
windowsIndex:窗口序号
------------------------------------------------------------------------------------普通回调2
typedef __int64(__stdcall *FUNTYPE )(__int32 index);
index:窗口序号/主序号/副序号
------------------------------------------------------------------------------------UI回调
typedef __int64(__stdcall *UIFUNTYPE)(__int32 windowsIndex, char *stepText, BOOL
end1, BOOL pause1, __int32 threadState1, BOOL m_end2, BOOL m_pause2, __int32
threadState2);
windowsIndex:窗口序号
stepText:日志信息/操作信息
end1:主执行线程的结束标志状态
pause1:主执行线程的暂停标志状态
threadState1:主执行线程的线程操作状态
end2:副线程的结束标志状态
pause2:副线程的暂停标志状态
threadState2:副线程的线程操作状态
------------------------------------------------------------------------------------消息回调
typedef __int64(__stdcall *MSGFUNTYPE )(WPARAM wparam,LPARAM lparam);
wparam:自定义参数1
lparam:自定义参数2
[TOP]
函数简介
:
发送消息(同步)
函数原型
:
__int64 __stdcall HCMT_MsgSend(__int32 msg, void* wparam, void*
lparam);
参数定义:
wparam:自定义参数
lparam:自定义参数
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
参数回调函数类型:
------------------------------------------------------------------------------------普通回调1
typedef __int64(__stdcall *FUNTYPE )(__int32 windowsIndex);
windowsIndex:窗口序号
------------------------------------------------------------------------------------普通回调2
typedef __int64(__stdcall *FUNTYPE )(__int32 index);
index:窗口序号/主序号/副序号
------------------------------------------------------------------------------------UI回调
typedef __int64(__stdcall *UIFUNTYPE)(__int32 windowsIndex, char *stepText, BOOL
end1, BOOL pause1, __int32 threadState1, BOOL m_end2, BOOL m_pause2, __int32
threadState2);
windowsIndex:窗口序号
stepText:日志信息/操作信息
end1:主执行线程的结束标志状态
pause1:主执行线程的暂停标志状态
threadState1:主执行线程的线程操作状态
end2:副线程的结束标志状态
pause2:副线程的暂停标志状态
threadState2:副线程的线程操作状态
------------------------------------------------------------------------------------消息回调
typedef __int64(__stdcall *MSGFUNTYPE)(WPARAM wparam,, LPARAM lparam);
wparam:自定义参数1
lparam:自定义参数2
[TOP]
函数简介 :
发送消息(异步)
函数原型
:
__int64 __stdcall HCMT_MsgPost(__int32 msg, void* wparam, void*
lparam);
参数定义:
wparam:自定义参数
lparam:自定义参数
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
参数回调函数类型:
------------------------------------------------------------------------------------普通回调1
typedef __int64(__stdcall *FUNTYPE )(__int32 windowsIndex);
windowsIndex:窗口序号
------------------------------------------------------------------------------------普通回调2
typedef __int64(__stdcall *FUNTYPE )(__int32 index);
index:窗口序号/主序号/副序号
------------------------------------------------------------------------------------UI回调
typedef __int64(__stdcall *UIFUNTYPE)(__int32 windowsIndex, char *stepText, BOOL
end1, BOOL pause1, __int32 threadState1, BOOL m_end2, BOOL m_pause2, __int32
threadState2);
windowsIndex:窗口序号
stepText:日志信息/操作信息
end1:主执行线程的结束标志状态
pause1:主执行线程的暂停标志状态
threadState1:主执行线程的线程操作状态
end2:副线程的结束标志状态
pause2:副线程的暂停标志状态
threadState2:副线程的线程操作状态
------------------------------------------------------------------------------------消息回调
typedef __int64(__stdcall *MSGFUNTYPE)(WPARAM wparam,, LPARAM lparam);
wparam:自定义参数1
lparam:自定义参数2
[TOP]
函数简介 :
通过消息开启窗口操作
函数原型 :
__int64 __stdcall HCMT_MsgStart(__int32
windowsIndex, BOOL bAsyn =
FALSE);
参数定义:
bAsyn:是否异步发送
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.开启成功后会相应触发对应设置的回调函数
3.顺序:
开启窗口:登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
重启窗口:重启前回调--->登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
停止窗口:结束绑定回调->结束回调
[TOP]
函数简介 :
通过消息停止窗口操作
函数原型 :
__int64 __stdcall HCMT_MsgStop(__int32 windowsIndex, BOOL bAsyn =
FALSE);
参数定义:
bAsyn:是否异步发送
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.开启成功后会相应触发对应设置的回调函数
3.顺序:
开启窗口:登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
重启窗口:重启前回调--->登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
停止窗口:结束绑定回调->结束回调
[TOP]
函数简介 :
通过消息重启窗口操作
函数原型 :
__int64 __stdcall HCMT_MsgReStart(__int32 windowsIndex, BOOL bAsyn =
FALSE);
参数定义:
bAsyn:是否异步发送
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.开启成功后会相应触发对应设置的回调函数
3.顺序:
开启窗口:登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
重启窗口:重启前回调--->登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
停止窗口:结束绑定回调->结束回调
[TOP]
函数简介 :
通过消息重启窗口操作(扩展版本)
函数原型 :
__int64 __stdcall
HCMT_MsgReStartEx(__int32 windowsIndex, BOOL bUnload
= TRUE, BOOL bAsyn =
FALSE);
参数定义:
bAsyn:是否异步发送
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.开启成功后会相应触发对应设置的回调函数
3.顺序:
开启窗口:登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
重启窗口:重启前回调--->登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
停止窗口:结束绑定回调->结束回调
[TOP]
函数简介 :
通过消息触发UI回调,并传递线程状态信息和日志操作信息给UI回调
函数原型 :
__int64 __stdcall
HCMT_MsgUpdateUI
(__int32 windowsIndex, BOOL bAsyn =
FALSE);
参数定义:
bAsyn:是否异步发送
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
[TOP]
函数简介 :
通过消息触发UI回调,并传递线程状态信息和日志操作信息给UI回调
函数原型 :
__int64 __stdcall HCMT_MsgStepText(__int32 windowsIndex, char* text, BOOL
bAsyn =
FALSE);
参数定义:
text:步骤信息/日志信息
触发一次UI回调后,文本会自动清空
bAsyn:是否异步发送
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
[TOP]
函数简介 :
设置所有窗口结束
函数原型 :
__int64 __stdcall HCMT_SetAllPause();
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的暂停绑定回调
[TOP]
函数简介
:
获取主副序号对应的线程的状态值
函数原型 :
__int64 __stdcall HCMT_GetState(__int32
index);
参数定义 :
返回1:状态值 注意:如果需要转换为字符串,需要调用HCMT_GetStateString
返回其他值:查看返回值表 HD返回值表
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的暂停绑定回调
typedef enum
THREADSTATE//线程状态
{
THREADSTATE_NONE =
-1,//未启动
THREADSTATE_STARTING =
0,//开启中
THREADSTATE_LOGINING =
1,//正在登录
THREADSTATE_RUNNING =
2,//正在运行
THREADSTATE_PAUSE =
3,//暂停
THREADSTATE_PAUSEING =
4,//正在暂停
THREADSTATE_RECOVERING =
5,//正在恢复
THREADSTATE_WILLSTOP =
6,//准备停止
THREADSTATE_STOPPING =
7//正在停止
}THREADSTATE;
[TOP]
函数简介 :
获取状态整数值对应的字符串
函数原型 :
char* __stdcall
HCMT_GetStateString (__int32 threadState);
参数定义:
备注:
无
[TOP]
函数简介 :
判断是否能开启新的(主副线程) 传递的只能是主序号
函数原型 :
__int64
__stdcall HCMT_IsCanStart(__int32
windowsIndex);
参数定义:
备注:
无
[TOP]
函数简介
:
直接开启窗口操作
函数原型 :
__int64 __stdcall HCMT_Start(__int32
windowsIndex);
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.开启成功后会相应触发对应设置的回调函数
3.顺序:
开启窗口:登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
重启窗口:重启前回调--->登录回调--->第一/第二执行回调同时开启--->{暂停/恢复/结束绑定回调}->结束回调
停止窗口:结束绑定回调->结束回调
[TOP]
函数简介 :
设置所有窗口恢复
函数原型 :
__int64 __stdcall
HCMT_SetAllRecover();
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的恢复绑定回调
[TOP]
函数简介 :
设置所有窗口停止
函数原型 :
__int64 __stdcall
HCMT_SetAllStop
();
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的停止绑定回调
[TOP]
函数简介 :
设置窗口暂停
函数原型 :
__int64 __stdcall HCMT_SetPause(__int32
windowsIndex);
参数定义 :
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的暂停绑定回调
[TOP]
函数简介 :
设置主副序号对应的线程暂停
函数原型 :
__int64 __stdcall HCMT_SetPauseEx(__int32
index);
参数定义 :
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的暂停绑定回调
[TOP]
函数简介 :
设置窗口恢复
函数原型 :
__int64 __stdcall HCMT_SetRecover(__int32
windowsIndex);
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的恢复绑定回调
[TOP]
函数简介 :
设置主副序号对应的线程恢复
函数原型 :
__int64 __stdcall HCMT_SetRecoverEx(__int32
index);
参数定义 :
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的暂停绑定回调
[TOP]
函数简介 :
设置窗口停止
函数原型 :
__int64 __stdcall HCMT_SetStop(__int32
windowsIndex);
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的结束绑定回调
[TOP]
函数简介 :
[TOP]
函数简介
:
判断主副序号对应的线程是否是已被暂停状态
函数原型 :
__int64 __stdcall HCMT_IsPause(__int32
index);
参数定义 :
返回1:表示已经暂停
返回0:表示未被暂停
返回其他值:查看返回值表 HD返回值表
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的暂停绑定回调
[TOP]
函数简介 :
判断主副序号对应的线程是否是 已被结束状态
函数原型 :
__int64 __stdcall HCMT_IsStop(__int32
index);
参数定义 :
返回1:表示已经结束
返回其他值:查看返回值表 HD返回值表
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.标志会在HCMT_Sleep接口中检查并触发对应的暂停绑定回调
[TOP]
函数简介 :
设延迟函数,自带暂停/结束/恢复检查
函数原型
:
__int64 __stdcall HCMT_Sleep(int
mis);
参数定义:
1:正常
2:线程结束
3.线程被暂停过
其他值:查看返回值表 HD返回值表
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.检查随后触发HCMT_InitOperate设置的3个回调;理论上不能在HCMT_InitOperate设置的3个回调中调用,因为会导致无限调用自己(但是内部做了检测所以不会无限调用,也就是如果当前第一次已经检查到标志位并触发对应的绑定回调了,在回调中又再一次调用HCMT_Sleep,那么这一次的HCMT_Sleep只会正常休眠,并不继续检查了,防止无限调用);
3.其他回调均可以(无影响)
4.如果要内部检测状态机状态需要调用HCMT_StatusSleep
[TOP]
=============================================================================功能演示参考测试工具 多线程模块
//typedef __int64(__stdcall *FUNTYPE)(__int32 windowsIndex);
//typedef
__int64(__stdcall *UIFUNTYPE)(__int32 windowsIndex, char *stepText, BOOL m_end1,
BOOL m_pause1, __int32 threadState1, BOOL m_end2, BOOL m_pause2, __int32
threadState2);
//typedef __int64(__stdcall *MSGFUNTYPE)(WPARAM wparam,,
LPARAM lparam);
#define 多开环境数量 31*2
多开环境数量 用 HCEnv_GetMaxWindowNum返回一个常数,可以自己写成一个常量
=============================================================================初始化列表和设置回调
// TODO:
在此添加额外的初始化
//
DWORD dwStyle =
m_list.GetExtendedStyle();
//内部双缓冲,防止界面闪烁VC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,#define
LVS_EX_DOUBLEBUFFER 0x00010000
LVS_EX_CHECKBOXES
m_list.SetExtendedStyle(dwStyle | LVS_EX_CHECKBOXES |
LVS_REPORT | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT |
LVS_EX_DOUBLEBUFFER);
m_list.InsertColumn(0, L"序号", LVCFMT_CENTER,
45);
m_list.InsertColumn(1, L"账号", LVCFMT_CENTER,
50);
m_list.InsertColumn(2, L"密码", LVCFMT_LEFT,
50);//
m_list.InsertColumn(3, L"邮箱", LVCFMT_LEFT,
50);//
m_list.InsertColumn(4, L"人物信息", LVCFMT_LEFT,
100);//
m_list.InsertColumn(5, L"操作", LVCFMT_LEFT,
120);//
m_list.InsertColumn(6, L"状态信息", LVCFMT_LEFT,
500);//
// 初始化
for (int index = 1; index < 多开环境数量;
index++)
{
CString
info;
info.Format(L"%d", index);
auto in =
m_list.InsertItem(index - 1, info);//序号
m_list.SetItemText(in, 1,
g_账号信息Array[index].账号);
m_list.SetItemText(in, 2,
g_账号信息Array[index].密码);
m_list.SetItemText(in, 3,
g_账号信息Array[index].邮箱);
info.Format(L"%s,%d (%0.2f,%0.2f,%0.2f)",
g_账号信息Array[index].名字, g_账号信息Array[index].等级*index, g_账号信息Array[index].fx,
g_账号信息Array[index].fy,
g_账号信息Array[index].fz);
m_list.SetItemText(in, 4,
info);
m_list.SetItemText(in, 5,
L"");
m_list.SetItemText(in, 6,
L"");
}
//
auto ret1 =
HCMT_InitProcess((int)Chit2TestDlg::g_pChit2TestDlg->m_hWnd, UIFun, LoginFun,
FirstFun, SecondFun, EndFun, RestartFun);
auto ret2 =
HCMT_InitOperate(EndBindFun, PauseBindFun, RecoverBindFun);
CString
info;
info.Format(L"1.HDMT_InitProcess->Ret:%lld\r\n2.HCMT_InitOperate->Ret:%lld",
ret1,ret2);
m_logEdit.SetWindowText(info);
=============================================================================登录回调
__int64 __stdcall LoginFun(__int32
windowsIndex)
{
HDbgPrintf_Tools("LoginFun[%d]---begin",
windowsIndex);
HCMT_MsgStepText(windowsIndex,
"登录中");
HCMT_Sleep(2000);
HDbgPrintf_Tools("LoginFun[%d]---end",
windowsIndex);
return 1;
}
=============================================================================主执行回调
__int64 __stdcall FirstFun(__int32
windowsIndex)
{
int index = 0;
while
(HCMT_IsRunning())
{
index++;
HDbgPrintf_Tools("FirstFun[%d]:%d",
windowsIndex, index);
auto ret = HCMT_Sleep(1000); if (ret ==
RET_结束)break;
}
return 1;
}
=============================================================================副执行回调
__int64 __stdcall SecondFun(__int32
windowsIndex)
{
int index = 0;
while
(HCMT_IsRunning())
{
index++;
HDbgPrintf_Tools("SecondFun[%d]:%d",
windowsIndex, index);
auto ret = HCMT_Sleep(1000); if (ret ==
RET_结束)break;
}
return 1;
}
=============================================================================结束回调
__int64 __stdcall EndFun(__int32
windowsIndex)
{
HDbgPrintf_Tools("EndFun[%d]->关闭截图",
windowsIndex);
HDbgPrintf_Tools("EndFun[%d]->解绑后台",
windowsIndex);
HDbgPrintf_Tools("EndFun[%d]->卸载环境",
windowsIndex);
HCMT_Sleep(2000);
return 1;
}
=============================================================================重启前回调
__int64 __stdcall RestartFun(__int32
windowsIndex)
{
HDbgPrintf_Tools("RestartFun[%d]->关闭绑定游戏进程",
windowsIndex);
HCMT_MsgStepText(windowsIndex,
"关闭绑定游戏进程");
HCMT_Sleep(2000);
return 1;
}
=============================================================================结束绑定回调
//typedef __int64(__stdcall *FUNTYPE)(__int32 index);
__int64 __stdcall EndBindFun(__int32
index)
{
HDbgPrintf_Tools("EndBindFun[%d]->解绑后台",
index);
if (index >= 多开环境数量) index = index -
多开环境数量;
//这里最好还需要判断序号
是主次
//因为后台绑定相关接口调用一次就行了
HCMT_MsgStepText(index,
"解绑后台");
HCMT_Sleep(1000);
return 1;
}
=============================================================================暂停绑定回调
__int64 __stdcall PauseBindFun(__int32
index)
{
HDbgPrintf_Tools("PauseBindFun[%d]->暂停后台",
index);
if (index >= 多开环境数量) index = index -
多开环境数量;
//这里最好还需要判断序号
是主次
//因为后台绑定相关接口调用一次就行了
HCMT_MsgStepText(index,
"暂停后台");
HCMT_Sleep(1000);
return 1;
}
=============================================================================恢复绑定回调
__int64 __stdcall RecoverBindFun(__int32
index)
{
HDbgPrintf_Tools("RecoverBindFun[%d]->恢复后台",
index);
if (index >= 多开环境数量)index = index -
多开环境数量;
//这里最好还需要判断序号
是主次
//因为后台绑定相关接口调用一次就行了
HCMT_MsgStepText(index,
"恢复后台");
HCMT_Sleep(1000);
return 1;
}
=============================================================================UI回调
//自定义结构体根据自行修改
typedef struct 账号信息
{
//其他信息
WCHAR
账号[MAX_PATH];
WCHAR 密码[MAX_PATH];
WCHAR
邮箱[MAX_PATH];
WCHAR 备注[MAX_PATH];
WCHAR
名字[MAX_PATH];
//线程状态信息
WCHAR 状态信息[MAX_PATH];//主
副
//人物信息
int 等级;
float fx, fy,
fz;
//
账号信息()
{
ZeroMemory(名字,
MAX_PATH);
wcscpy_s(名字, MAX_PATH, L"HD多线程");
等级 =
99; fx = 1.0f; fy = 2.0f; fz = 3.0f;
ZeroMemory(账号,
MAX_PATH);
wcscpy_s(账号, MAX_PATH,
L"882724064");
ZeroMemory(密码,
MAX_PATH);
wcscpy_s(密码, MAX_PATH,
L"1809096");
ZeroMemory(邮箱,
MAX_PATH);
wcscpy_s(邮箱, MAX_PATH, L"382856600@qq.com");
ZeroMemory(备注,
MAX_PATH);
wcscpy_s(备注, MAX_PATH,
L"HD多线程测试");
}
}账号信息;
static 账号信息 g_账号信息Array[多开环境数量];
//UI回调
__int64 __stdcall UIFun(__int32 windowsIndex, char *stepText, BOOL m_end1,
BOOL m_pause1, __int32 threadState1, BOOL m_end2, BOOL m_pause2, __int32
threadState2)
{
if (Chit2TestDlg::g_pChit2TestDlg == NULL) return
0;
CListCtrl* plist =
&(Chit2TestDlg::g_pChit2TestDlg->m_hDialog_多线程.m_list);
if
(plist == NULL) return 0;
if (stepText)
{
int
len = strlen(stepText);
if (len >
0)
{
CString infoW =
Tool::AsciiToUnicode(stepText).c_str();
plist->SetItemText(windowsIndex
- 1, 5, infoW);
}
}
CString
info;
info.Format(L"[主]->E:%d P:%d S:%s | [次]->E:%d P:%d S:%s ",
m_end1,
m_pause1,Tool::AsciiToUnicode(HCMT_GetStateString(threadState1)).c_str(),
m_end2, m_pause2,
Tool::AsciiToUnicode(HCMT_GetStateString(threadState2)).c_str());
plist->SetItemText(windowsIndex
- 1, 6, info);
return 1;
}
=============================================================================
[TOP]
该模块需要配合多线程模块接口一起使用!!
该模块需要配合多线程模块接口一起使用!!
该模块需要配合多线程模块接口一起使用!!
使用该模块接口 记得初始化多线程模块!!
使用该模块接口 记得初始化多线程模块!!
使用该模块接口 记得初始化多线程模块!!
[TOP]
函数简介
:
开启状态机
函数原型 :
__int64 __stdcall HCMT_StartStatus();
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用 配合多线程模块一起使用
2.一般在执行回调或者检查回调 调用就行 不需要都开启(内部有检测是否开启)
3.支持多线程,但是不建议,执行回调中调用就行了
[TOP]
函数简介 :
添加状态机(状态值和状态回调进行映射绑定)
函数原型 :
__int64 __stdcall HCMT_AddStatus(__int64 funCallBack, __int64
lparam, BOOL bEnable, __int32
statusType);
参数定义:
lparam:额外参数,可以传递指针或者8字节数据,这个用户自定义参数会在触发回调的时候传递给回调的第二个形参
bEnable:状态是否有效,无效是不会触发状态回调的,即便是检索到这个状态的时候,也不会触发回调,只会不停判断
statusType:状态值,自定义值 (内置:-1表示无状态,不要重复指定) 大小决定优先级
《《《 特别注意:状态值的大小也表示优先级,优先级越高的回调,享有最先执行权限!!!! 》》》
如:登录回调>死亡回调>买药回调>限时副本回调>主线回调
优先级大小策略:
1.优先级用户自行定义大小(-1表示没有,不要重复)建议从0开始 1 2 3...依次递增
2.优先级高回调的可以打断或者中断优先级低的回调,当优先级高的回调执行完毕,会继续执行优先级低的回调
2.如果是优先级一样的回调,只有执行完第一个,才能执行第二个.
3.优先级低的回调是不能打断优先级高的回调,此时如果想执行优先级低的回调,那么必须等待优先级高的回调执行完毕后,方可执行优先级低的回调
4.回调内部如果有循环流程,应加入退出循环条件,不要死循环
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用 配合多线程模块一起使用
2.必须在初始化的时候就添加全部可用的状态值
如:窗口初始化完成接口中
3.这个接口不能再多线程调用
4.如果需要多线程调用就自己加锁
5.不支持多线程
[TOP]
函数简介
:
全局(全部窗口序号)禁用或者开启 状态
函数原型 :
__int64 __stdcall HCMT_EnableStatus(__int32 statusType, BOOL
bEnable);
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用 配合多线程模块一起使用
2.操作的状态值,必须先调用HCMT_AddStatus 添加状态,否则无效
3.支持多线程
[TOP]
函数简介 :
改变状态机状态
函数原型 :
__int64 __stdcall HCMT_ChangeStatus(__int32
statusType);
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate/HCMT_StartStatus后才能调用 配合多线程模块一起使用
2.操作的状态值,必须先调用HCMT_AddStatus 添加状态,否则无效
3.支持多线程,一般在检测回调中调用
4.只能改变比之前优先级低的优先级
《《《特别注意:状态值的大小也表示优先级,优先级越高的回调,享有最先执行权限!!!! 》》》
如:登录回调>死亡回调>买药回调>限时副本回调>主线回调
优先级大小策略:
1.优先级用户自行定义大小(-1表示没有,不要重复)建议从0开始 1 2 3...依次递增
2.优先级高回调的可以打断或者中断优先级低的回调,当优先级高的回调执行完毕,会继续执行优先级低的回调
2.如果是优先级一样的回调,只有执行完第一个,才能执行第二个.
3.优先级低的回调是不能打断优先级高的回调,此时如果想执行优先级低的回调,那么必须等待优先级高的回调执行完毕后,方可执行优先级低的回调
4.回调内部如果有循环流程,应加入退出循环条件,不要死循环
[TOP]
函数简介 :
回溯状态
函数原型 :
__int64
__stdcall HCMT_RetraceStatus(BOOL bClear =
FALSE);
参数定义:
bClear:真表示清除之前的栈缓存同时改变当前状态位-1(空)
bClear:假表示清除当前栈顶的状态,相同的全部删除,同时改变当前状态为清除后的栈顶的那个状态
备注:
1.HDMT_InitProcess/HCMT_InitOperate/HCMT_StartStatus后才能调用 配合多线程模块一起使用
2.操作的状态值,必须先调用HCMT_AddStatus 添加状态,否则无效
3.支持多线程,一般在检测回调中调用
4.只能改变比之前优先级低的优先级
《《《特别注意:状态值的大小也表示优先级,优先级越高的回调,享有最先执行权限!!!! 》》》
如:登录回调>死亡回调>买药回调>限时副本回调>主线回调
优先级大小策略:
1.优先级用户自行定义大小(-1表示没有,不要重复)建议从0开始 1 2 3...依次递增
2.优先级高回调的可以打断或者中断优先级低的回调,当优先级高的回调执行完毕,会继续执行优先级低的回调
2.如果是优先级一样的回调,只有执行完第一个,才能执行第二个.
3.优先级低的回调是不能打断优先级高的回调,此时如果想执行优先级低的回调,那么必须等待优先级高的回调执行完毕后,方可执行优先级低的回调
4.回调内部如果有循环流程,应加入退出循环条件,不要死循环
[TOP]
函数简介 :
当前状态机的状态在回调中是否有效
函数原型 :
__int64 __stdcall HCMT_IsStatus();
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate/HCMT_StartStatus后才能调用 配合多线程模块一起使用
2.用在状态回调中,检索是否是当前状态
3.在设置的状态回调函数中循环调用检查当前窗口序号的状态类型是否是当前的映射的回调状态类型
4.支持多线程
C++例子:
=========================================================================
__int64 __stdcall HMT::登录状态回调(__int32 windowsIndex,
__int64 lparam)
{
while
(HCMT_IsStatus())
{
auto ret =
HCMT_StatusSleep(1000);
HDbgPrintf_Command("HCMT_StatusSleep:%lld",
ret);
HCMT_MsgStepText(windowsIndex,
"正在登录中...");
}
return
1;
}
=========================================================================
[TOP]
函数简介
:
状态机延迟函数 (自带暂停/结束/恢复/状态机)
函数原型 :
__int64 __stdcall HCMT_StatusSleep(int
mis);
参数定义:
1:正常
2:线程结束
3.线程被暂停过
4.状态机当前状态被改变
其他值:查看返回值表 HD返回值表
备注:
1.HDMT_InitProcess/HCMT_InitOperate/HCMT_StartStatus后才能调用 配合多线程模块一起使用
2.支持多线程 自带暂停/结束/恢复/状态机
3.注意区别于HCMT_Sleep这个接口是没法检索状态机状态的
C++例子:
=========================================================================
__int64 __stdcall HMT::登录状态回调(__int32 windowsIndex,
__int64 lparam)
{
while
(HCMT_IsStatus())
{
auto ret = HCMT_StatusSleep(1000);// <<<<<<<<-----------------------------这里能及时返回(当我们状态变动的时候) 返回值:4 表示状态变动
HDbgPrintf_Command("HCMT_StatusSleep:%lld",
ret);
HCMT_MsgStepText(windowsIndex,
"正在登录中...");
}
return 1;
}
=========================================================================
[TOP]
函数简介 :
获取状态机状态
函数原型 :
__int64 __stdcall HCMT_GetStatus(__int32
windowsIndex);
参数定义:
备注:
1.HDMT_InitProcess/HCMT_InitOperate/HCMT_StartStatus后才能调用 配合多线程模块一起使用
2.支持多线程,一般在UI回调中调用,获取状态值并显示到控件上
[TOP]
函数简介 :
设延迟函数,自带暂停/结束/恢复检查/状态机状态(可选)(扩展版本)
函数原型 :
__int64 __stdcall HCMT_SleepEx(int mis,BOOL bStatus =
FALSE);
参数定义:
1:正常
2:线程结束
3.线程被暂停过
4.状态改变了
其他值:查看返回值表 HD返回值表
备注:
1.HDMT_InitProcess/HCMT_InitOperate后才能调用
2.仅仅设置的是标志位,不会堵塞线程
3.检查随后触发HCMT_InitOperate设置的3个回调;理论上不能在HCMT_InitOperate设置的3个回调中调用,因为会导致无限调用自己(但是内部做了检测所以不会无限调用,也就是如果当前第一次已经检查到标志位并触发对应的绑定回调了,在回调中又再一次调用HCMT_Sleep,那么这一次的HCMT_Sleep只会正常休眠,并不继续检查了,防止无限调用);
3.其他回调均可以(无影响)
4.如果要内部检测状态机状态需要调用HCMT_StatusSleep
[TOP]
函数简介
:
[TOP]
函数简介
:
通用CALL(适合X64),支持0-8个参数
函数原型
:
__int64
__stdcall HC_CALL(__int32 窗口序号, __int64 CALL地址,
__int64 rcx = 0, __int64 rdx = 0, __int64 r8 = 0, __int64 r9 = 0, __int64
lparam5 = 0, __int64 lparam6 = 0, __int64 lparam7 = 0, __int64
lparam8 = 0, BOOL 是否主线程调用 =
FALSE);
参数定义:
rcx:CALL参数
rdx:CALL参数
r8:CALL参数
r9:CALL参数
l5:CALL参数
l6:CALL参数
l7:CALL参数
l8:CALL参数
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
如果需要更多参数传递请联系作者
[TOP]
函数简介 :
通用CALL(适合X86),支持0到8个参数
函数原型 :
__int64 __stdcall HC_CALLX86(__int32 窗口序号, __int32 CALL地址, __int32
ecx = 0,__int32
lparam1 = 0, __int32 lparam2 =
0, __int32 lparam3 = 0, __int32 lparam4 = 0, __int32 lparam5 =
0, __int32 lparam6 = 0, __int32 lparam7 = 0, __int32 lparam8 =
0, __int32 lparamNum = 0, __int32 addEsp = -1, BOOL 是否主线程调用 =
FALSE);
参数定义:
ecx :对象参数
lparam1-lparam8:从第一个到第八个参数
lparamNum:当前接口地址的传递的参数数量(支持0到8个参数)
addEsp:如果调用的接口地址是内平栈就置为-1,如果是外平栈就设置为参数数量(lparamNum)*0x4
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
如果需要更多参数传递请联系作者
[TOP]
函数简介
:
挂接主线程
函数原型
:
__int64
__stdcall HC_HookMainThread(__int32 窗口序号,
__int64 窗口句柄);
参数定义:
返回值:
备注:
无
[TOP]
PS:最好复制到浏览器打开
[TOP]
函数简介:
汇编文本转换机器码
函数原型
:
__int64 __stdcall HCSH_GetShellCode(__int32 模式, char* 汇编文本, BYTE
*机器码缓冲区, __int32 机器码缓冲区大小, __int64 返回机器码字节大小的地址, __int64 错误1变量的地址, __int64
错误2变量的地址);
参数定义:
机器码缓冲区大小:机器码缓冲区大小(单位:字节)
错误1:返回错误1(第几行有错误) 注意是传递变量的地址,在CALL内部写入值
错误2:返回错误2(具体错误描述) 注意是传递变量的地址,在CALL内部写入值
返回值:
备注:
无
[TOP]
函数简介
:
机器码写入到进程
函数原型
:
__int64 __stdcall HCSH_WriteShellCode(__int32 pid, BYTE *机器码缓冲区, __int32
机器码缓冲区大小, __int64 返回变量的地址);
参数定义:
机器码缓冲区:机器码缓冲区
机器码缓冲区大小:机器码缓冲区大小
返回地址:返回写入的地址 注意是传递变量的地址,在CALL内部写入值
返回值:
备注:
这里执行用的是HD驱动来申请和写入这个机器码,注意要把HD驱动安装好
拿到了写入地址可以使用HD驱动创建远线程来执行
[TOP]
https://www.bilibili.com/video/BV1Gj411v7Lk/?spm_id_from=333.999.0.0
https://www.bilibili.com/video/BV1yj411a75o/?spm_id_from=333.999.0.0
PS:最好复制到浏览器打开
[TOP]
函数简介:
执行或加载LUA文件
函数原型
:
__int64 __stdcall HCLUA_ReadFile(__int32 窗口序号, char*文件名路径, __int32 LUA标识符,
BOOL 是否执行 = FALSE, BOOL 是否需要拿到返回值 = FALSE, BOOL 是否主线程调用 =
FALSE);
参数定义:
文件名路径:LUA文件名路径
LUA标识符:一个任意整数的标识(不要重复就行)
是否执行:是否直接执行LUA文件
是否需要拿到返回值:是否需要拿到返回值
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
LUA标识符:当【是否需要拿到返回值】参数为真的时候,用作线程的标识符,方便主动退出线程,标识符规则:不要太大了
{0到100}以内就行
是否执行:真表示执行并加载LUA(比如:注入一些自定义LUA接口同时还能执行LUA),反之只是加载LUA文件(比如:注入一些自定义LUA接口)
是否需要拿到返回值:真表示堵塞直到LUA文件执行完毕并获取返回值,反之表示开启一根线程执行(无法拿到返回值,可以在LUA文件中做一些耗时的操作)
[TOP]
函数简介
:
关闭LUA线程
函数原型
:
__int64 __stdcall HCLUA_CloseLua(__int32 窗口序号, __int32 LUA标识符 =
-1);
参数定义:
LUA标识符:通过标识符来停止LUA线程
返回值:
备注:
LUA标识符:调用【HCLUA_ReadFile】接口指定的【LUA标识符】参数,一一对应,-1表示全部LUA线程退出!!!
[TOP]
函数简介 :
执行被注册过的LUA函数
函数原型
:
__int64 __stdcall HCLUA_ExcuteCall (__int32 窗口序号,
char*函数名, __int32 参数数量 = 0, __int64 rcx = 0, __int64 rdx = 0, __int64 r8 = 0,
__int64 r9 = 0, __int64 lparam5 = 0, __int64 lparam6 = 0, BOOL 是否主线程调用 =
FALSE);
参数定义 :
函数名:被注册过的函数名
参数数量 :参数数量
rcx:CALL参数
rdx:CALL参数
r8:CALL参数
r9:CALL参数
l5:CALL参数
l6:CALL参数
是否主线程调用:是否主线程调用
返回值:
备注:
json:
{"error":0,"ret":AAA,"data":XXX}
[TOP]
内置插件模块
各种HOOK
[TOP]
封包API相关HOOK接口
[TOP]
函数简介
:
设置拦截API(内置插件)X86X64
函数原型 :
__int64
HDHK_InterceptApi(__int32 窗口序号, char* 模块名字, char*
拦截接口名字, __int32 破坏字节数, __int64 回调地址,
__int64 附加参数, BOOL 是否主线程调用 =
FALSE);
参数定义:
返回值:
备注:
目前仅支持4个API接口拦截:"send" "sendto" "recv" "recvfrom" 所在模块:"ws2_32.dll"
回调写法:
注意版本对应!!
==========================================================================================================================
参数解析:
rcx:套接字socket
rdx:缓冲区地址(这个地址是原生的)
r8:缓冲区大小(这个大小是原生缓冲区地址的大小)
r9:对应的flag参数
rbp:对应调用拦截接口时候的rbp寄存器值(一般我们不用修改)
rsp:调用原生接口对应的rsp寄存器值(通过这个值可以拿到任意其他堆栈值)
buffer:维护的内部缓冲区,发包收包的内容全在这个里面,修改包内容的时候,修改这个缓冲区内容就行,并把这个维护的缓冲区地址当做rdx传递过去(参考:修改回调返回方法)
bufferMaxSize:维护的内部缓冲区最大大小
bufferRealSize:维护的内部缓冲区中真实有效的字节大小(一般就是拦截的包内容大小)
l5:表示端口
l6:表示IP网络字节序 如:0x0100007F 表示IP"127.0.0.1"
==========================================================================================================================
"send":可以修改包内容 可以修改包大小
X86X64:
typedef __int32(__stdcall *HandleCallBackFunType_Send)(__int32 窗口序号, __int32 插件序号, __int64 rcxOrl1, __int64 rdxOrl2, __int64 r8Orl3, __int64 r9Orl4, __int64 rbp, __int64 rsp, __int64 rip, char*buffer, __int32 bufferMaxSize, __int32 bufferRealSize, __int64 lparam);//返回1表示要修改
==========================================================================================================================
"sendto":可以修改包内容 可以修改包大小
X86X64:
typedef __int32(__stdcall *HandleCallBackFunType_SendTo)(__int32 窗口序号, __int32 插件序号, __int64 rcxOrl1, __int64 rdxOrl2, __int64 r8Orl3, __int64 r9Orl4, __int64 l5, __int64 l6, __int64 rbp, __int64 rsp, __int64 rip, char*buffer, __int32 bufferMaxSize, __int32 bufferRealSize, __int64 lparam);//返回1表示要修改
==========================================================================================================================
"recv": 可以修改包内容 不能修改包大小
X86X64:
typedef __int32(__stdcall *HandleCallBackFunType_Recv )(__int32 窗口序号, __int32 插件序号, __int64 rcxOrl1, __int64 rdxOrl2, __int64 r8Orl3, __int64 r9Orl4, __int64 rbp, __int64 rsp, __int64 rip, char*buffer, __int32 bufferMaxSize, __int32 bufferRealSize, __int64 lparam);//返回1表示要修改
==========================================================================================================================
"recvfrom":可以修改包内容 不能修改包大小
X86X64:
typedef __int32(__stdcall *HandleCallBackFunType_RecvFrom)(__int32 窗口序号, __int32 插件序号, __int64 rcxOrl1, __int64 rdxOrl2, __int64 r8Orl3, __int64 r9Orl4, __int64 l5, __int64 l6, __int64 rbp, __int64 rsp, __int64 rip, char*buffer, __int32 bufferMaxSize, __int32 bufferRealSize, __int64 lparam);//返回1表示要修改
==========================================================================================================================
回调内修改写法请转至》》》》》修改回调返回方法《《《《《《
[TOP]
函数简介 :
暂停拦截API(内置插件)X86X64
函数原型
:
__int64 HDHK_PauseInterceptApi(__int32 窗口序号, char* 模块名字,
char* 拦截接口名字, BOOL 是否主线程调用 = FALSE);
参数定义 :
返回值:
备注:
目前仅支持4个API接口拦截:"send" "sendto" "recv" "recvfrom" 所在模块:"ws2_32.dll"
[TOP]
函数简介 :
恢复拦截API(内置插件)X86X64
函数原型
:
__int64 HDHK_RecoverInterceptApi(__int32 窗口序号, char* 模块名字,
char* 拦截接口名字, BOOL 是否主线程调用 = FALSE);
参数定义 :
返回值:
备注:
目前仅支持4个API接口拦截:"send" "sendto" "recv" "recvfrom" 所在模块:"ws2_32.dll"
[TOP]
函数简介 :
卸载拦截API(内置插件)X86X64
函数原型
:
__int64 HDHK_UnInterceptApi(__int32 窗口序号, char* 模块名字,
char* 拦截接口名字, BOOL 是否主线程调用 = FALSE);
参数定义 :
返回值:
备注:
目前仅支持4个API接口拦截:"send" "sendto" "recv" "recvfrom" 所在模块:"ws2_32.dll"
[TOP]
函数简介
:
调用SendAPI(目标进程中调用) X86X64
函数原型 :
__int64
HDHK_SendApi(__int32 窗口序号, __int32 socket, BYTE
*buffer, __int32 bufferSize, __int32 flag, BOOL 是否主线程调用 =
FALSE);
参数定义 :
bufferSize:缓冲区字节大小
flag:send的第4个参数flag
返回值:
备注:
无
[TOP]
函数简介 :
调用SendtoAPI(目标进程中调用) X86X64
函数原型
:
__int64
HDHK_SendToApi(__int32 窗口序号, __int32 socket, BYTE
*buffer, __int32 bufferSize, __int32 flag, __int32 port, __int32 ip, BOOL
是否主线程调用 = FALSE);
参数定义 :
bufferSize:缓冲区字节大小
flag:send的第4个参数flag
port:目标地址端口
ip:IP网络字节序,需要把字符串 如:"127.0.0.1"转为0x0100007F整数
返回值:
备注:
无
[TOP]
X86:
对应插件版本调用以下接口修改参数:
__int64 HDHK_ SetProcessCallBackLparamSendX86(__int32 窗口序号, __int32 l1, __int32 l2, __int32 l3,
__int32 l4, __int32 ebp, __int32 esp, __int32 eip, __int32
mark
);//设置回调函数返回值
给目标进程
__int64 HDHK_ SetProcessCallBackLparamRecvX86(__int32 窗口序号, __int32
l1, __int32 l2, __int32 l3, __int32 l4, __int32 ebp, __int32 esp, __int32 eip,
__int32 mark);//设置回调函数返回值 给目标进程
__int64 HDHK_ SetProcessCallBackLparamSendToX86(__int32 窗口序号, __int32
l1, __int32 l2, __int32 l3, __int32 l4, __int32 l5, __int32 l6, __int32 ebp,
__int32 esp, __int32 eip, __int32 mark);//设置回调函数返回值 给目标进程 l5端口
l6地址
__int64 HDHK_ SetProcessCallBackLparamRecvFromX86(__int32 窗口序号, __int32
l1, __int32 l2, __int32 l3, __int32 l4, __int32 l5, __int32 l6, __int32 ebp,
__int32 esp, __int32 eip, __int32 mark);//设置回调函数返回值 给目标进程 l5端口
l6地址
备注:
参数
窗口序号:窗口序号
一一对应传递:l1 l2 l3 l4 l5 l6 rbp(一般不修改) esp(一般不修改) eip(一般不修改,设置的跳回地址)
mark:修改相关寄存器值和其他值的掩码值(2的倍数) ,修改多个值用| (或)连接 如:1|2|4 表示调用对应的修改参数接口的l1 l2 l3有效传递并修改
1(l1 需要修改) 第一个参数
2(l2 需要修改) 如果是缓冲区,那么指定对应回调函数的参数传递过来的 char*buffer 这个值 第二个参数
4 (l3 需要修改) 第三个参数
8 (l4 需要修改) 第四个参数
16 (ebp 需要修改)
32 (esp 需要修改)
64 (eip 需要修改)
128 (l5 端口需要修改)
256(l6 IP地址需要修改) 整数型的网络字节序 如:"127.0.0.1" 那么就需要写成:0x0100007F
返回值
0:表示不修改并且走原有流程
1:表示修改值并且走原有流程->针对拦截包并且包长度一致使用这个模式
2:表示修改值并且不走原有流程,而是走自己的流程->针对拦截包并且包长度不一致使用这个模式
========================================================================================================================================================================================
如:sendto回调+修改
__int32(__stdcallHandleCallBackFun_Sendto )(__int32
窗口序号, __int32 插件序号, __int64 rcxOrl1, __int64 rdxOrl2, __int64 r8Orl3, __int64
r9Orl4, __int64 l5, __int64 l6, __int64 rbp, __int64 rsp, __int64 rip,
char*buffer, __int32 bufferMaxSize,
__int32 bufferRealSize, __int32 lparam)//返回1或2表示要修改
{
//参数打印
HDbgPrintf_HOOK("触发Sendto回调->窗口序号:%d 插件序号:%d
rcxOrl1:%llX rdxOrl2:%llX r8Orl3 ::%llX r9Orl4:%llX l5::%llX l6:%llX rbp:%llX rsp:%llX
rip:%llX bufferRealSize:%d lparam:%d",
窗口序号,
插件序号,
rcxOrl1, rdxOrl2, r8Orl3,
r9Orl4 ,
l5, l6,
rbp, rsp, rip,
bufferRealSize,
lparam
);
//IP地址转换
//struct in_addr; in_addr.S_un.S_addr
in_addr ipAddr; ipAddr.S_un.S_addr =
((ULONG)l6);
char str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &ipAddr, str,
INET_ADDRSTRLEN);
//传递过来的网络IP字节序(0x0100007f)转成字符串形式"127.0.0.1"
HDbgPrintf_HOOK("目标端口:%lld 目标地址:%s", l5,
str);
//。。。。。中间处理自己的逻辑(千万不要做任何耗时的功能)或者开一个线程处理
//。。。。。
//。。。。。
//最后调用修改接口修改对应的寄存器值和其他值
return HDHK_
SetProcessCallBackLparam_SendToX86(窗口序号,
rcxOrl1,rdxOrl2,r8Orl3,r9Orl4,l5,l6,rbp,rsp,rip,0)
;//这个接口成功会返回1
}
========================================================================================================================================================================================
[TOP]
X64:
对应插件版本调用以下接口修改参数:
__int64 HDHK_ SetProcessCallBackLparamSendX64(__int32 窗口序号,
__int64 rcx, __int64 rdx, __int64
r8, __int64 r9, __int64 rbp, __int64 rsp, __int64 rip, __int32
mark);//设置回调函数返回值 给目标进程
__int64 HDHK_ SetProcessCallBackLparamRecvX64(__int32 窗口序号, __int64
rcx, __int64 rdx, __int64 r8, __int64 r9, __int64 rbp, __int64 rsp, __int64 rip,
__int32 mark);//设置回调函数返回值 给目标进程
__int64 HDHK_ SetProcessCallBackLparamSendToX64(__int32 窗口序号, __int64
rcx, __int64 rdx, __int64 r8, __int64 r9, __int64 l5, __int64 l6, __int64 rbp,
__int64 rsp, __int64 rip, __int32 mark);//设置回调函数返回值 给目标进程 l5端口
l6地址
__int64 HDHK_ SetProcessCallBackLparamRecvFromX64(__int32 窗口序号, __int64
rcx, __int64 rdx, __int64 r8, __int64 r9, __int64 l5, __int64 l6, __int64 rbp,
__int64 rsp, __int64 rip, __int32 mark);//设置回调函数返回值 给目标进程 l5端口
l6地址
备注:
参数
窗口序号:窗口序号
一一对应传递:rcx rdx r8 r9 l5 l6 rbp(一般不修改) rsp(一般不修改) rip(一般不修改,设置的跳回地址)
mark:修改相关寄存器值和其他值的掩码值(2的倍数) ,修改多个值用| (或)连接 如:1|2|4 表示调用对应的修改参数接口的rcx rdx r8有效传递并修改
1(rcx 需要修改)
2(rdx 需要修改) 如果是缓冲区,那么指定对应回调函数的参数传递过来的 char*buffer 这个值
4 (r8 需要修改)
8 (r9 需要修改)
16 (rbp 需要修改)
32 (rsp 需要修改)
64 (rip 需要修改)
128 (l5 端口需要修改)
256(l6 IP地址需要修改) 整数型的网络字节序 如:"127.0.0.1" 那么就需要写成:0x0100007F
返回值
0:表示不修改并且走原有流程
1:表示修改值并且走原有流程->针对拦截包并且包长度一致使用这个模式
2:表示修改值并且不走原有流程,而是走自己的流程->针对拦截包并且包长度不一致使用这个模式
========================================================================================================================================================================================
如:sendto回调+修改
__int32(__stdcall HandleCallBackFun_Sendto )(__int32 窗口序号, __int32 插件序号, __int64 rcxOrl1, __int64 rdxOrl2,
__int64 r8Orl3, __int64 r9Orl4, __int64 l5, __int64 l6, __int64 rbp, __int64 rsp,
__int64 rip, char*buffer, __int32 bufferMaxSize,
__int32 bufferRealSize, __int32
lparam)//返回1或2表示要修改
{
//参数打印
HDbgPrintf_HOOK("触发Sendto回调->窗口序号:%d 插件序号:%d
rcxOrl1:%llX
rdxOrl2:%llXr8Orl3
::%llX r9Orl4:%llX l5::%llX l6:%llX rbp:%llX rsp:%llX rip:%llX
bufferRealSize:%d lparam:%d",
窗口序号, 插件序号,
rcx,
rdx, r8, r9,
l5, l6,
rbp, rsp,
rip,
bufferRealSize,
lparam
);
//IP地址转换
//struct
in_addr; in_addr.S_un.S_addr
in_addr ipAddr; ipAddr.S_un.S_addr =
((ULONG)l6);
char str[INET_ADDRSTRLEN];
inet_ntop(AF_INET,
&ipAddr, str, INET_ADDRSTRLEN);//传递过来的网络IP字节序(0x0100007f)转成字符串形式"127.0.0.1"
HDbgPrintf_HOOK("目标端口:%lld 目标地址:%s", l5,
str);
//。。。。。中间处理自己的逻辑(千万不要做任何耗时的功能)或者开一个线程处理
//。。。。。
//。。。。。
//最后调用修改接口修改对应的寄存器值和其他值
return HDHK_ SetProcessCallBackLparam_SendToX64(窗口序号,rcxOrl1,rdxOrl2,r8Orl3,r9Orl4,l5,l6,rbp,rsp,rip,0);//这个接口成功会返回1
}
========================================================================================================================================================================================
[TOP]
任意HOOK地址接口
[TOP]
函数简介
:
任意HOOK(内置插件)X86X64
函数原型 :
__int64
HDHK_Hook(__int32 窗口序号, __int64 hook地址, __int32 破坏字节
,__int64 回调地址, __int64 附加参数, BOOL 是否主线程调用 =
FALSE);
参数定义:
返回值:
备注:
无
回调写法:
==========================================================================================================================
X86X64:
typedef
__int64(__stdcall *HandleCallBackFunType)(
__int32
窗口序号, __int32 插件序号,
__int64 raxOreax, __int64 rbxOrebx,
__int64
rcxOrecx, __int64 rdxOredx,
__int64 rbpOrebp, __int64 rspOresp,
__int64
rsiOresi, __int64 rdiOredi,
__int64 r8, __int64 r9, __int64 r10, __int64 r11,
__int64 r12, __int64 r13, __int64 r14, __int64 r15,
__int64
lparam);
参数解析:
窗口序号:对应的窗口序号
插件序号:内部自动传递
raxOreax rbxOrebx rcxOrecx rdxOredx rbpOrebp rspOresp rsiOresi rdiOredi:分别对应X86X64的8个寄存器
r8 r9 r10 r11 r12 r13 r14 r15:分别对应X64的8个寄存器
lparam:是HDHK_Hook的第五个参数附加参数
备注:
返回值 :
0 【忽视被破坏的汇编语句,直接跳到下一句汇编地址(HOOK地址+破坏字节)】
1 【走原有流程】
2 【需要修改值】+【忽视被破坏的汇编语句,直接跳到下一句汇编地址(HOOK地址+破坏字节)】
3 【需要修改值】+【走原有流程】
备注:调用约定是__stdcall
X86X64通用调用案例:
__int32 __stdcall HandleHookCallBackFun
(
__int32 窗口序号, __int32 插件序号,
__int64 raxOreax,
__int64 rbxOrebx,
__int64 rcxOrecx, __int64 rdxOredx,
__int64 rbpOrebp,
__int64 rspOresp,
__int64 rsiOresi, __int64 rdiOredi,
__int64 r8, __int64
r9, __int64 r10, __int64 r11, __int64 r12, __int64 r13, __int64 r14, __int64
r15,
__int64 lparam)
{
HDbgPrintf_HOOK("触发HOOK回调->窗口序号:%d 插件序号:%d raxOreax:%llX rbxOrebx:%llX
rcxOrecx:%llX rdxOredx:%llX rbpOrebp::%llX rspOresp:%llX rsiOresi:%llX
rdiOredi:%llX r8:%llX r9:%llX r10:%llX
r11:%llX
r12:%llX r13:%llX r14:%llX r15:%llX lparam:%d",
窗口序号,
插件序号,
raxOreax, rbxOrebx, rcxOrecx,
rdxOredx,
rbpOrebp, rspOresp, rsiOresi,
rdiOredi,
r8, r9, r10, r11, r12, r13, r14,
r15,
lparam
);
//....中间执行自己的逻辑
//....可以用驱动读写
//如果需要修改寄存器值 就调用HDHK_SetProcessHookCallBackLparam设置
__int32 mark = 1;
auto ret =
HDHK_SetProcessHookCallBackLparam(窗口序号,
插件序号,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0,
mark);
HDbgPrintf_HOOK("ret:%lld",ret);
//返回值: 0 忽视HOOK语句 直接跳到原来 1 走原有流程 2 需要修改值+直接跳到原来 3
需要修改值+走原有流程
return
3;
}
回调内修改写法请转至》》》》》修改回调返回方法(X86X64)《《《《《《
[TOP]
函数简介 :
暂停任意HOOK(内置插件)X86X64
函数原型 :
__int64
HDHK_PauseHook(__int32 窗口序号,
__int64 hook地址, BOOL 是否主线程调用 =
FALSE);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
恢复任意HOOK(内置插件)X86X64
函数原型 :
__int64
HDHK_RecoverHook(__int32 窗口序号, __int64 hook地址, BOOL
是否主线程调用 = FALSE);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
卸载任意HOOK(内置插件)X86X64
函数原型 :
__int64
HDHK_UnHook(__int32 窗口序号, __int64 hook地址, BOOL
是否主线程调用 = FALSE);
参数定义:
返回值:
备注:
无
[TOP]
HD返回值表X86X64:
__int64 __stdcall HDHK_SetProcessHookCallBackLparam(__int32
窗口序号, __int32 插件序号,
__int64 raxOreax, __int64 rbxOrebx,
__int64 rcxOrecx,
__int64 rdxOredx,
__int64 rbpOrebp, __int64 rspOresp,
__int64 rsiOresi,
__int64 rdiOredi,
__int64 r8, __int64 r9, __int64 r10,
__int64 r11,
__int64 r12, __int64 r13,
__int64 r14, __int64 r15,
__int64 rip,
__int32 mark);
备注:
参数
窗口序号:窗口序号
窗口序号:对应的窗口序号
插件序号:内部自动传递
raxOreax rbxOrebx rcxOrecx rdxOredx rbpOrebp rspOresp rsiOresi rdiOredi:分别对应X86X64的8个寄存器
r8 r9 r10 r11 r12 r13 r14 r15:分别对应X64的8个寄存器
rip:分别对应X86X64的跳回地址(一般不需要改变,除非特殊需求)
mark:修改相关寄存器值和其他值的掩码值(2的倍数) ,修改多个值用| (或)连接 如:1|2|4 表示调用对应的修改参数接口的rax rcx rdx 或 eax ecx edx有效传递并修改
mark:
1
2
4
8
16
32
64
128 256
512 1024 2048
4096 8192
16384
32768 65536
寄存器:raxOreax rbxOrebx rcxOrecx
rdxOredx rbpOrebp rspOresp
rsiOresi rdiOredi
r8 r9
r10
r11 r12
r13
r14 r15
rip
返回值
看返回值表HD返回值表
========================================================================================================================================================================================
X86X64通用调用案例:
回调+修改
__int64 __stdcall HandleHookCallBackFun (
__int32 窗口序号, __int32 插件序号,
__int64 raxOreax, __int64 rbxOrebx,
__int64 rcxOrecx, __int64 rdxOredx,
__int64 rbpOrebp, __int64 rspOresp,
__int64 rsiOresi, __int64 rdiOredi,
__int64 r8, __int64 r9, __int64 r10, __int64 r11, __int64
r12, __int64 r13, __int64 r14, __int64 r15,
__int64
lparam
)
{
HDbgPrintf_HOOK("触发HOOK回调->窗口序号:%d 插件序号:%d raxOreax:%llX rbxOrebx:%llX
rcxOrecx:%llX rdxOredx:%llX rbpOrebp::%llX rspOresp:%llX rsiOresi:%llX
rdiOredi:%llX r8:%llX r9:%llX r10:%llX
r11:%llX r12:%llX r13:%llX r14:%llX r15:%llX lparam:%lld",
窗口序号, 插件序号,
raxOreax, rbxOrebx, rcxOrecx,
rdxOredx,
rbpOrebp, rspOresp,
rsiOresi, rdiOredi,
r8, r9, r10, r11,
r12, r13, r14, r15,
lparam
);
//....中间执行自己的逻辑
//....可以用驱动读写
//如果需要修改寄存器值 就调用HDHK_SetProcessHookCallBackLparam 设置
//这里我们只让rax或eax值有效修改 mark为2的0次方也就是1
__int32 mark = 1;
auto ret =
HDHK_SetProcessHookCallBackLparam(窗口序号,
插件序号,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0, mark);
HDbgPrintf_HOOK("ret:%lld",ret);
//回调返回值: 0 忽视HOOK语句 直接跳到原来 1 走原有流程 2 需要修改值+直接跳到原来 3
需要修改值+走原有流程
return 3;
}
========================================================================================================================================================================================
[TOP]
[TOP]
如何找HOOK点
最好的就是一句汇编 破坏数量大于等于5
可以包含相对跳
【1】如果涉及到一句汇编
如:
1.OK
772A4FAF | E9 9F2AFFFF | jmp ntdll.77297A53
2.OK
772A4F79 | E8 423C0100 | call
<ntdll.RtlRaiseException>
3.OK
FF15
9AAF7800 | call qword ptr ds:[<&TlsGetValue>]
4.OK
00007FFE1056246D | 8B0D 7969A100 | mov ecx,dword
ptr ds:[7FFE10F78DEC]
00007FFE1056246D | 890D 7969A100 | mov dword ptr
ds:[7FFE10F78DEC],ecx
5.OK
==
48:8B0D
7869A100 | mov rcx,qword ptr ds:[7FFE10F78DEC] 0D:rcx
48:890D 7869A100 | mov
qword ptr ds:[7FFE10F78DEC],rcx
==
00007FFE6FCFB2B8 | 4C:8B15 498B0300 |
mov r10,qword ptr ds:[7FFE6FD33E08] | 15 r10
00007FFE6FCFB2B8 | 44:8B15
498B0300 | mov r10d,dword ptr ds:[7FFE6FD33E08] |
00007FFE6FCFB2B8 | 44:8915
498B0300 | mov dword ptr ds : [7FFE6FD33E08], r10d |
00007FFE6FCFB2B8 |
4C:8915 498B0300 | mov qword ptr ds : [7FFE6FD33E08], r10 |
==
00007FFE6FCFB297 | 44:391D 52800300 | cmp dword ptr ds :
[7FFE6FD332F0], r11d | dword:4439
00007FFE6FCFB297 | 44:3B1D 52800300 | cmp
r11d,dword ptr ds:[7FFE6FD332F0] | dword:443B
00007FFE6FCFB297 | 4C:391D
52800300 | cmp qword ptr ds:[7FFE6FD332F0],r11 | qword:4839
00007FFE6FCFB297
| 4C:3B1D 52800300 | cmp r11,qword ptr ds:[7FFE6FD332F0] | qword:483B
6.OK
00007FFE6FCFB2AF | F04C:0FB115
488B0300 | lock cmpxchg qword ptr
ds:[7FFE6FD33E00],r10 |
00007FFE6FCFB2AF | F044:0FB11D
488B0300 | lock cmpxchg dword ptr
ds:[7FFE6FD33E00],r11d |
7.OK 这种情况没有偏移可以计算
注意和情况5的区别
00007FFFB53A91C0 | 48:8BC4 | mov rax, rsp |
00007FFFB53A91C3 | 48 : 8958 10 | mov qword ptr ds : [rax + 10], rbx
|
8.OK
其他(没有jmp call je jg
相对偏移等跳转指令)都可以
【2】如果涉及到2句或大于2句的汇编 那么汇编中不要涉及相对跳(jmp je
jg等)之类的汇编
如:
1. NO
00007FFE1056247E
| 48:85C0 | test rax, rax |
00007FFE10562481 | 74 0C | je
sogoupy.7FFE1056248F | 74是跳
2.NO
00007FFE10562467 | 74 04 | je sogoupy.7FFE1056246D
| 74是跳
00007FFE10562469 | 85D2 | test edx, edx |
00007FFE1056246B | 75 22
| jne sogoupy.7FFE1056248F | 75是跳
3.NO
00007FFE0FE57A39 | 48:8BF0 | mov rsi, rax
|
00007FFE0FE57A3C | 8B0D FAFE0500 | mov ecx, dword ptr ds : [7FFE0FEB793C] |
FAFE0500是偏移
【3】实战HOOK例子:
1. 无跳转汇编
00007FFE0FE57A2B | 48:83EC
30
| sub
rsp,30
| HOOK 破坏7字节
00007FFE0FE57A2F |
48:8BF9
| mov
rdi,rcx
|
00007FFE0FE57A32 |
33DB
| xor
ebx,ebx
| jmp back
00007FFE0FE57A34 | E8
E7000000
| call ichat_bundle64.7FFE0FE57B20
|
00007FFE0FE57A39 |
48:8BF0
| mov
rsi,rax
|
2. E8 0x00000000
00007FFE0FE57A34 | E8
E7000000
| call ichat_bundle64.7FFE0FE57B20 |
HOOK 破坏5字节
00007FFE0FE57A39 |
48:8BF0
| mov
rsi,rax
| jmp back
00007FFE0FE57A3C | 8B0D
FAFE0500 | mov ecx,dword ptr
ds:[7FFE0FEB793C] |
3. mov
00007FFE0FE57A3C | 8B0D
FAFE0500 | mov ecx,dword ptr
ds:[7FFE0FEB793C] | HOOK 破坏6字节
00007FFE0FE57A42 | FF15
F0770300 |
call qword ptr
ds:[<&TlsGetValue>]
| jmp back
00007FFE0FE57A48 |
48:8BC8
| mov
rcx,rax
|
4. mov
00007FFE0FE57BD1 | 48:892D
50540600 | mov qword ptr
ds:[7FFE0FEBD028],rbp | HOOK 破坏7字节
00007FFE0FE57BD8 |
49:8BCE
| mov
rcx,r14
| jmp back
5. jmp
00007FFE0FE211BA | E9
196A0300
| jmp ichat_bundle64.7FFE0FE57BD8 | HOOK
破坏5字节
00007FFE0FE211BF |
CC
|
int3
| jmp back
6. cmp
00007FFE6FCFB297 | 44:391D
52800300 | cmp dword ptr
ds:[7FFE6FD332F0],r11d | HOOK 破坏7字节
00007FFE6FCFB29E | 74
2E
| je
user32.7FFE6FCFB2CE
| jmp back
7. call
00007FFE6FCFB2D9 | E8
D2FDFFFF
| call <user32.MessageBoxTimeoutW> |
HOOK 破坏5字节 00007FFE6FCFB0B0
00007FFE6FCFB2DE | 48:83C4
38
| add
rsp,38
| jmp back
00007FFE6FCFB2E2 |
C3
|
ret
|
8. lock cmpxchg qword
00007FFE6FCFB2AF | F04C:0FB115
488B0300 | lock cmpxchg qwordptr ds:[7FFE6FD33E00],r10| HOOK
破坏9字节
00007FFE6FCFB2B8 | 4C:8B15
498B0300 | mov
r10,qword ptr
ds:[7FFE6FD33E08]
| jmp back
9. lock cmpxchg
dword
00007FFE6FCFB2AF | F044:0FB11D 488B0300 | lock
cmpxchg dword ptrds:[7FFE6FD33E00],r11d |破坏9字节
00007FFE6FCFB2B8 | 4C:8B15
498B0300
| mov r10,qword ptr
ds:[7FFE6FD33E08]
| jmp back
10.wspsend头
00007FFFB53A91C0 |
48:8BC4 | mov rax, rsp |
00007FFFB53A91C3 | 48 : 8958 10 | mov qword ptr ds
: [rax + 10], rbx |
[TOP]
1.函数原型
int WSPSend(
SOCKET s, ---rcx
LPWSABUF lpBuffers,---rdx
DWORD dwBufferCount,---r8
LPDWORD lpNumberOfBytesSent, ---r9
DWORD dwFlags, ---rsp+28h
LPWSAOVERLAPPED lpOverlapped,---rsp+30h
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, ---rsp+38h
LPWSATHREADID lpThreadId, ---rsp+40h
LPINT lpErrno---rsp+48h
);
2.拦截包在第二个参数lpBuffers结构体(WSABUF)中的第一个成员是包长度 第二个成员是包地址
typedef struct __WSABUF {
u_long len;
char FAR* buf;
}
WSABUF, FAR* LPWSABUF;
3.每次拦截读取这个包内容就行
4.注意第三个参数dwBufferCount表示一共有多少个结构体(WSABUF)
易语言拦截案例:
[TOP]
函数简介:
加载N驱动
函数原型:
__int64 __stdcall HCN_LoadDrv ();
参数定义:
返回值:
成功返回1
备注:
需要联网,可以卸载,驱动内置了进程,如需要自定义进程名联系管理员添加或者用HD驱动
[TOP]
函数简介
:
注入32/64位DLL(需要先加载N驱动)
函数原型:
HEARTDLL_API_HN __int64 __stdcall HCN_InjectDllWX86 (wchar_t
*DLL路径W);
HEARTDLL_API_HN __int64 __stdcall HCN_InjectDllAX86 (char
*DLL路径A);
参数定义:
返回值:
成功返回1
备注:
无
[TOP]
函数简介
:
注入32/64位DLL(需要先加载N驱动)
函数原型:
HEARTDLL_API_HN __int64 __stdcall HCN_InjectDllWX64 (wchar_t
*DLL路径W);
HEARTDLL_API_HN __int64 __stdcall HCN_InjectDllAX64 (char
*DLL路径A);
参数定义:
返回值:
成功返回1
备注:
无
[TOP]
函数简介
:
安装32/64位HD插件(需要先加载N驱动)
函数原型:
__int64
__stdcall HCN_InstallPlugX86();
__int64
__stdcall HCN_InstallPlugX64();
参数定义:
返回值:
成功返回1
备注:
无
[TOP]
函数简介
:
卸载驱动同时清除了注入的DLL缓存
函数原型
:
__int64 __stdcall HCN_UnLoadDrv();
参数定义:
返回值:
返回值:0释放失败 1成功释放
备注:
取消窗口关联,一定要卸载相关信息,随后所有循环会快速内退,从而线程安全退出!!!!
[TOP]
//宏返回值
//驱动宏返回值
//宏返回值
//宏返回值
//这个值必须大于0 用在最开始加载驱动的返回
小于0会蓝屏!!
#define LOAD_SUCCESS
0x00000001
//下面的值是其他接口自定义返回值 必须小于0
大于0统一返回的都是0!!
#define
DRERROR_SUCCESS 0x00000002
#define DRERROR_SUCCESSEX 0xE0000000
#define
DRERROR_SUCCESSTEST 0xE0000001
#define DRERROR_EXIST 0xE0000002
#define
DRERROR_FAID 0xE0000003
#define DRERROR_无法打开进程 0xE0000004
#define
DRERROR_无效的句柄表 0xE0000005
#define DRERROR_用户验证失败 0xE0000006
#define
DRERROR_内存类型不符 0xE0000007
#define DRERROR_超出内存范围 0xE0000008
#define
DRERROR_隐藏内存失败 0xE0000009
#define DRERROR_查询内存失败 0xE000000A
#define
DRERROR_申请内存失败 0xE000000B
#define DRERROR_超出读写字节 0xE000000C
#define
DRERROR_分配内存失败 0xE000000D
#define DRERROR_无效的缓冲区 0xE000000E
#define
DRERROR_无法结束自身 0xE000000F
#define DRERROR_无法识别数据 0xE0000010
#define
DRERROR_进程位数错误 0xE0000011
#define DRERROR_读写地址错误 0xE0000012
#define
DRERROR_劫持线程失败 0xE0000013
#define DRERROR_X86DLL格式有误 0xE0000014
#define
DRERROR_X64DLL格式有误 0xE0000015
#define DRERROR_无合适处理器 0xE0000016
#define
DRERROR_未找到鼠标 0xE0000017
#define DRERROR_未找到键盘
0xE0000018
#define DRERROR_未找到入口参数 0xE0000019//没有找到入口参数
#define
DRERROR_输入缓冲区为空 0xE0000020//输入缓冲区为空
#define DRERROR_未找到模块基址
0xE0000021//
#define DRERROR_未找到函数地址 0xE0000022//
#define ERROR_参数有误
0xE0000023//参数有误
PS:最好复制到浏览器打开
[TOP]
函数简介
:
加载HD驱动 (正式版本)
函数原型
:
__int64
__stdcall
HCHD_LoadDrv();
参数定义
:
返回值:
备注:
需要联网,不可以卸载驱动,可以清除注入DLL缓存
此接口相当于调用HCHD_LoadDrv2 传递-1:HDEx正式版本(云下发 正常驱动,无特殊处理)
[TOP]
函数简介 :
云下发
加载驱动或组件 (可以通过指定驱动序号,加载不同版本的驱动 如:正式版本 定制版本 备用版本 其他保护盾 VT等等)
函数原型
:
__int64
__stdcall HCHD_LoadDrv2(__int32 type = 0);
参数定义 :
说明:云下发 加载驱动或组件
-1:HDEx正式版本(云下发
正常驱动,无特殊处理)
0:HDExx备用版本(云下发 适合驱动快读读写遍历)
1:HDExxx定制版本(云下发 正常驱动,无特殊处理)
2:HDHOOK驱动(云下发 快速读写 VT无痕HOOK)
3:HDPP保护驱动(云下发 进程保护和隐藏等保护)
4:HDYOLOV识别(云下发 HYolov5 8 10 11
组件到当前路径并安装)
后续还会增加其他组件和驱动保护盾....
返回值:
备注:
需要联网,不可以卸载驱动,可以清除注入DLL缓存
[TOP]
函数简介 :
初始化HD驱动快速读写(一般在HD安装驱动接口后的下一句就开始初始化)
函数原型 :
__int64
__stdcall HCHD_InitFastRW();
参数定义 :
无
返回值:
备注:
如果最开始安装HD驱动调用的是HCHD_LoadDrv同时又需要快速读写遍历,就需要先调用此接口,然后调用HCHD_RWExx 进行快读内存读写遍历(百万级别)
如果最开始安装HD驱动调用的是HCHD_LoadDrv2并传递驱动序号为0,表示可以直接调用HCHD_RWExx 进行快读内存读写遍历(百万级别),不需要再调用此接口了
[TOP]
函数简介 :
把DLL注入到指定进程中(指定DLL二进制文件数据)
函数原型 :
__int64
__stdcall HCHD_InjectX86X64(char* injectExeName, __int32
dllBits, __int32 injectMode, __int32 memoryHide, PVOID injectData, __int32
injectSize);
参数定义 :
memoryHide:内存保护模式(0/1/2)
injectData:注入数据缓冲区首地址
injectSize:注入数据缓冲区大小(单位:字节)
返回值
:
备注:
不能卸载驱动,可以清除注入DLL缓存,支持32/64进程
[TOP]
函数简介 :
把DLL注入到指定进程中(指定DLL文件路径)
函数原型
:
__int64
__stdcall HCHD_InjectX86X64ByFile(char* injectExeName, __int32
dllBits, __int32 injectMode, __int32 memoryHide, char
*DLL绝对路径A);
参数定义 :
memoryHide:内存保护模式(0/1/2)
DLL绝对路径A:DLL绝对路径A
返回值 :
备注:
不能卸载驱动,可以清除注入DLL缓存,支持32/64进程
[TOP]
函数简介
:
安装HD插件到指定进程中
函数原型 :
__int64
__stdcall HCHD_InstallPlugX86
(char* injectExeName, __int32 injectMode, __int32 memoryHide);
__int64
__stdcall HCHD_InstallPlugX64
(char* injectExeName, __int32 injectMode, __int32 memoryHide);
参数定义 :
memoryHide:内存保护模式(0/1/2)
返回值 :
备注:
需要联网,可以清除注入DLL缓存,支持32/64进程
[TOP]
函数简介
:
卸载插件(并不是从进程中卸载,而是清除了下一次进程打开的时候安装插件的缓存)
函数原型 :
__int64 __int64 __stdcall
HCHD_UnInstallPlug();
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
前台驱动鼠标移动并点击
函数原型 :
__int64 __stdcall HCHD_MousePress(__int32 abx, __int32 aby, __int32 mButCode,
__int32 mis);
参数定义 :
X:屏幕坐标Y
mButCode:
鼠标移动时鼠标按钮的值
如下:
#define MOUSE_BUTTON_1_DOWN 1 左按下
#define MOUSE_BUTTON_1_UP
2 左弹起
#define MOUSE_BUTTON_2_DOWN 4 中按下
#define MOUSE_BUTTON_2_UP
8 中弹起
#define MOUSE_BUTTON_3_DOWN 16 右按下
#define MOUSE_BUTTON_3_UP
32
右弹起
mis:按下和弹起之间的毫秒差
返回值 :
备注:
无
[TOP]
函数简介 :
前台驱动鼠标移动并点击(可指定句柄)
函数原型 :
__int64 __stdcall HCHD_MousePressEx(__int64 hwnd, __int32 x, __int32 y,
__int32 mButCode, __int32 mis);
参数定义 :
hwnd: 窗口句柄
X:窗口客户区坐标Y
mButCode:
鼠标移动时鼠标按钮的值
如下:
#define MOUSE_BUTTON_1_DOWN 1 左按下
#define MOUSE_BUTTON_1_UP
2 左弹起
#define MOUSE_BUTTON_2_DOWN 4 中按下
#define MOUSE_BUTTON_2_UP
8 中弹起
#define MOUSE_BUTTON_3_DOWN 16 右按下
#define MOUSE_BUTTON_3_UP
32 右弹起
mis:按下和弹起之间的毫秒差
返回值 :
备注:
无
[TOP]
函数简介 :
前台驱动鼠标移动并按下指定键(可指定句柄)
函数原型 :
__int64 __stdcall HCHD_MouseDown(__int64 hwnd, __int32 x, __int32 y, __int32
mButCode);
参数定义 :
hwnd: 窗口句柄
X:窗口客户区坐标Y
mButCode:
鼠标移动时鼠标按钮的值
如下:
#define MOUSE_BUTTON_1_DOWN 1 左按下
#define MOUSE_BUTTON_2_DOWN 4 中按下
#define MOUSE_BUTTON_3_DOWN 16
右按下
返回值 :
备注:
无
[TOP]
函数简介 :
前台驱动鼠标移动并弹起指定键(可指定句柄)
函数原型 :
__int64 __stdcall HCHD_MouseUp(__int64 hwnd, __int32 x, __int32 y, __int32
mButCode);
参数定义 :
hwnd: 窗口句柄
X:窗口客户区坐标Y
mButCode:
鼠标移动时鼠标按钮的值
如下:
#define MOUSE_BUTTON_1_UP
2 左弹起
#define MOUSE_BUTTON_2_UP
8 中弹起
#define MOUSE_BUTTON_3_UP
32 右弹起
返回值 :
备注:
无
[TOP]
函数简介 :
前台驱动键盘(按下并弹起)
函数原型 :
__int64 __stdcall HCHD_KbPress(__int32 virtualKeyCode, __int32
mis);
参数定义 :
virtualKeyCode:虚拟键码
mis:按下和弹起之间的毫秒差
返回值 :
备注:
无
[TOP]
函数简介
:
前台驱动键盘(按下某键)
函数原型 :
__int64 __stdcall HCHD_KbDown(__int32
virtualKeyCode);
参数定义 :
virtualKeyCode:虚拟键码
返回值 :
备注:
无
[TOP]
函数简介 :
前台驱动键盘(弹起某键)
函数原型 :
__int64 __stdcall HCHD_KbUp(__int32
virtualKeyCode);
参数定义 :
virtualKeyCode:虚拟键码
返回值 :
备注:
无
[TOP]
函数简介:
驱动读写
函数原型 :
__int64 __stdcall HCHD_RW(__int32 pid, __int64 targetAddress, __int64
bufferAddress, __int32 bufferOfBytes, __int32
rwType);
参数定义 :
返回值 :
备注:
无
[TOP]
,函数简介 :
驱动读写(百万级别读写 单线程)
函数原型 :
__int64
__stdcall HCHD_RWExx(__int32 pid, __int64 targetAddress,
__int64 bufferAddress, __int32 bufferOfBytes, __int32
rwType);
参数定义 :
返回值 :
备注:
如果最开始安装HD驱动调用的是HCHD_LoadDrv同时又需要快速读写遍历,就需要先调用HCHD_InitFastRW,然后调用此接口进行快读内存读写遍历(百万级别)
如果最开始安装HD驱动调用的是HCHD_LoadDrv2并传递驱动序号为0,表示可以直接调用HCHD_RWExx 进行快读内存读写遍历(百万级别),不需要再调用HCHD_InitFastRW接口了
[TOP]
函数简介
:
驱动读写Ex(开始批读写)与HCHD_EndRWEx成对出现 适合快速遍历(百万级别读写 单线程)
函数原型:
__int64
__stdcall HCHD_BeginRWEx(__int32
pid);
参数定义 :
返回值 :
备注:
适合快速遍历
[TOP]
函数简介
:
驱动读写Ex(批量读写)(百万级别读写 单线程)
函数原型
:
__int64
__stdcall
HCHD_RWEx
(__int64 targetAddress, __int64 bufferAddress, __int32 bufferOfBytes,
__int32 rwType);
参数定义 :
返回值 :
备注:
先调用HCHD_BeginRWEx 然后中间调用该接口HCHD_RWEx 最后调用HCHD_EndRWEx 用于释放环境
[TOP]
函数简介 :
驱动读写Ex(结束批读写)与HCHD_BeginRWEx成对出现 适合快速遍历(百万级别读写 单线程)
函数原型:
__int64
__stdcall HCHD_EndRWEx();
参数定义 :
无
返回值 :
备注:
适合快速遍历
[TOP]
函数简介 :
检查地址是否可读
函数原型 :
__int64 __stdcall HCHD_AddrIsRead(__int32 pid, __int64 addr,__int32
size);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
进程保护
函数原型
:
__int64 __stdcall
HCHD_PP(__int32 pid, BOOL
bOpen);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介 :
开启进程隐藏
函数原型 :
__int64 __stdcall HCHD_PHide(__int32 pid);
参数定义 :
返回值 :
备注:
一次性只能隐藏一个,如果需要隐藏第二个,先把之前的给显示了
[TOP]
函数简介
:
[TOP]
函数简介 :
进程杀死
函数原型 :
__int64 __stdcall HCHD_PPKill(char* processName,__int32
pid);
参数定义 :
pid:进程PID
指定了PID
进程名就失效
返回值 :
备注:
无
[TOP]
函数简介
:
驱动申请内存
函数原型
:
__int64 __stdcall HCHD_MemoryAllocate(__int32 pid, __int64 memorySize,
__int32 memoryProtect, BOOL bHighAddress, __int64
pOutBuffer);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
驱动申请内存(扩展版本)
函数原型 :
__int64 __stdcall HCHD_MemoryAllocateEx(__int32 pid, __int64
memoryAddr, __int64 memorySize, __int32 memoryProtect, BOOL bHighAddress,
__int64 pOutBuffer);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
驱动内存释放
函数原型 :
__int64 __stdcall HCHD_MemoryFree(__int32 pid, __int64
memoryAddress);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介:
驱动修改内存保护属性
函数原型 :
__int64 __stdcall
HCHD_MemoryProtect(__int32 pid, __int64 memoryAddress, __int64
memoryOfBytes, __int32 newProtect);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
驱动内存隐藏
函数原型 :
__int64 __stdcall HCHD_MemoryHide (__int32
pid, __int64 memoryAddress, __int64
memoryOfBytes);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
驱动内存查询
函数原型 :
__int64 __stdcall HCHD_MemoryQuery (__int32 pid, __int64 memoryAddress,
PVOID pOutBuffer);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介:
驱动通过特征码查找地址
函数原型 :
__int64 __stdcall HCHD_MemoryFindCode(__int32 pid, __int64 address, __int64
siginCode, __int32 siginCodeSize, __int32 iProtect, __int64
outBuffer);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
驱动获取主模块EXE的地址
函数原型 :
__int64 __stdcall HCHD_GetMainModuleBase(__int32 pid, __int64
outBuffer);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
驱动获取指定模块的地址
函数原型 :
__int64 __stdcall HCHD_GetModuleBase(__int32 pid, char* moduleName, __int64
outBuffer);
参数定义 :
moduleName:模块名(Ascii字符串)
返回值 :
备注:
无
[TOP]
函数简介 :
驱动获取指定模块的指定的函数地址
函数原型 :
__int64 __stdcall HCHD_GetModuleCallAddr(__int32 pid, char* moduleName, char*
callName, __int64 outBuffer);
参数定义 :
moduleName:模块名(Ascii字符串)
callName:函数名字(Ascii字符串)
返回值 :
备注:
无
[TOP]
函数简介:
驱动修改机器码
函数原型:
__int64 __stdcall HCHD_ChangeMachineKey(__int32
type);
参数定义 :
参数:类型
0=全部开启
1=注册表
2=硬盘序列号
3=网卡序列号
4=本地文件特征
5=微端设备序列号
6=网络代理设备序列号
7=图形处理器(GPU-GUID)
8=分区序列号
9=固态硬盘序列号
10=主板BIOS序列号
11=硬盘数据卷序列号(静态)
12=硬盘数据卷序列号(动态)
返回值 :
备注:
无
[TOP]
函数简介
:
驱动内核反截图
函数原型
:
__int64 __stdcall HCHD_NTNCaptureScreen(__int64 hWnd, BOOL
Enable);
参数定义 :
hWnd:窗口句柄
返回值 :
备注:
无
[TOP]
函数简介:
驱动内存远线程执行函数
函数原型 :
__int64 __stdcall HCHD_NTThreadRunCall(__int32 pid, __int64
callAddress);
参数定义 :
pid:进程PID
返回值 :
备注:
无
[TOP]
函数简介
:
驱动清除注入缓存(全局插件缓存,DLL缓存)
函数原型 :
__int64
__stdcall HCHD_ClearInject();
参数定义 :
无
返回值 :
备注:
无
[TOP]
函数简介
:
进程提权
函数原型 :
__int64 __stdcall HCHD_PcrocessRoot(__int32
pid);
参数定义 :
pid:进程PID(内部会通过PID获取进程句柄)
返回值 :
备注:
无
[TOP]
函数简介
:
进程提权
函数原型 :
__int64 __stdcall HCHD_HandleRoot(__int64
handle);
参数定义 :
handle:句柄
返回值 :
备注:
无
[TOP]
函数简介
:
普通注入插件(X86),不需要安装驱动,这个不是无痕注入,只支持32位的
函数原型:
__int64 __stdcall
HCN_NormalInstallPlugX86 (__int32
pid);
参数定义:
返回值:
备注:
这个不是无痕注入
方便操作一些小程序
普通注入插件DLL
参数->进程PID,进程位数(32)
可以在打开进程的经常下安装插件DLL
初始化进程环境后调用这个安装插件
然后循环等待拿到PID
不是驱动级别
[TOP]
函数简介
:
普通注入插件(X86)),不需要安装驱动,这个不是无痕注入
函数原型:
__int64 __stdcall
HCN_NormalInstallPlugX86Ex (__int64
topHwnd);
参数定义:
返回值:
备注:
这个不是无痕注入
方便操作一些小程序
用法和HCN_NormalInstallPlugX86一样 这个接口只是参数是句柄 防止一些进程一次性打开多个 这个句柄可以用来指定某个窗口
[TOP]
函数简介 :
普通注入插件(X64),不需要安装驱动,这个不是无痕注入,只支持64位的
函数原型:
__int64 __stdcall
HCN_NormalInstallPlugX64(__int32
pid);
参数定义:
返回值:
备注:
这个不是无痕注入
方便操作一些小程序
普通注入插件DLL
参数->进程PID,进程位数(32)
可以在打开进程的经常下安装插件DLL
初始化进程环境后调用这个安装插件 然后循环等待拿到PID
不是驱动级别
[TOP]
函数简介
:
普通注入插件(X64),不需要安装驱动,这个不是无痕注入 ,只支持64位的
函数原型:
__int64 __stdcall
HCN_NormalInstallPlugX64Ex(__int64
topHwnd);
参数定义:
返回值:
备注:
这个不是无痕注入
方便操作一些小程序
用法和HCN_NormalInstallPlugX86一样 这个接口只是参数是句柄 防止一些进程一次性打开多个 这个句柄可以用来指定某个窗口
[TOP]
函数简介
:
安装HD插件(需要预先安装HD驱动) ,【注入方式1】
函数原型:
__int64 __stdcall
HCHD_NormalInstallPlugX86X64(__int32 pid, __int32
dllBits, BOOL bWait = TRUE);
参数定义:
返回值:
备注:
不是无模块注入
可以在打开进程的情况下注入
驱动级别的,自动判断目标进程位数
[TOP]
函数简介 :
安装指定DLL(需要预先安装HD驱动) ,【注入方式1】
函数原型:
__int64 __stdcall
HCHD_NormalInjectX86X64ByFile(__int32 pid, char
*DLL绝对路径A,BOOL bWait = TRUE);
参数定义 :
返回值:
备注:
不是无模块注入
可以在打开进程的情况下注入
驱动级别的,自动判断目标进程
位数
[TOP]
函数简介 :
安装HD插件(需要预先安装HD驱动) ,【注入方式2】
函数原型:
__int64 __stdcall
HCHD_NormalInstallPlugX86X64Ex(__int32 pid, __int32
dllBits, BOOL bWait = TRUE);
参数定义:
返回值:
备注:
不是无模块注入
可以在打开进程的情况下注入
驱动级别的,自动判断目标进程位数
[TOP]
函数简介
:
安装指定DLL(需要预先安装HD驱动) , 【注入方式2】
函数原型:
__int64 __stdcall
HCHD_NormalInjectX86X64ByFileEx(__int32 pid, char
*DLL绝对路径A,BOOL bWait = TRUE);
参数定义 :
返回值:
备注:
不是无模块注入
可以在打开进程的情况下注入
驱动级别的,自动判断目标进程
位数
[TOP]
保护盾
过反外挂引擎
先开启保护再开目标进程
[TOP]
函数简介
:
一键保护进程(隐藏等)
函数原型:
__int64 __stdcall HCHDPP_Protect (__int32
pid);
参数定义:
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数3来安装保护盾HDPP驱动
[TOP]
不支持AMD CPU
不支持I9 CPU
支持全系统版本和大部分CPU
[TOP]
函数简介 :
VT驱动申请内存
函数原型:
__int64 __stdcall HCHDVT_AllocateMemory(__int32 pid, __int32
size);
参数定义:
size:申请内存大小(字节)
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介 :
VT驱动释放内存
函数原型:
__int64 __stdcall HCHDVT_FreeMemory(__int32 pid, __int64 addr, __int32
size);
参数定义:
size:申请内存大小(字节)
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介 :
VT驱动读内存
函数原型:
__int64 __stdcall HCHDVT_Read(__int32 pid, __int64 addr, void* data, __int32
size);
参数定义:
data:存读数据的缓冲区地址
size:读的大小(字节),缓冲区的大小要大于等于读的大小
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介
:
VT驱动写内存
函数原型:
__int64 __stdcall HCHDVT_Write(__int32 pid, __int64 addr, void* data,
__int32 size);
参数定义:
data:写入数据的缓冲区地址(存要写的数据)
size:写的大小(字节),缓冲区的大小要大于等于写的大小
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介 :
VT驱动获取模块地址
函数原型
:
__int64 __stdcall HCHDVT_GetModule (__int32 pid,
char* moduleName);
参数定义:
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介
:
VT驱动获取模块函数地址
函数原型 :
__int64 __stdcall HCHDVT_GetModuleFun(__int32 pid, __int64 moduleAddr, char*
funName);
参数定义:
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介 :
VT驱动无痕HOOK ,过CRC
函数原型
:
__int64 __stdcall HCHDVT_Hook(__int32 pid, __int64 addr, void* data, __int32 size,
__int32 type);
参数定义:
data:写入数据缓冲区
size:写入数据缓冲区大小
type:
0:关闭VT HCHDVT_Hook(0,0,0,0,0)
1:开启VT HCHDVT_Hook(0,0,0,0,1)
2:VT写入 HCHDVT_Hook(pid,addr,data,size,2)
3:VT恢复之前HOOK的地址 HCHDVT_Hook(pid,addr,0,0,3)
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介 :
VT驱动远程插入执行
函数原型 :
__int64 __stdcall HCHDVT_RemoteCall(__int32 pid, void* data, __int32
size);
参数定义:
size:shellcode字节大小
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介 :
VT驱动无痕无模块注入X64DLL
函数原型
:
__int64 __stdcall HCHDVT_InjectX64(__int32 pid, void* data, __int32
size);
参数定义:
size:DLL二进制数据大小
返回值:
备注:
需要调用HCHD_LoadDrv2传递参数2来安装HDVT驱动
[TOP]
函数简介
:
VT驱动无痕无模块注入X86DLL
函数原型
:
__int64 __stdcall HCHDVT_InjectX86(__int32 pid, void* data, __int32
size);
参数定义
:
size:DLL二进制数据大小
返回值:
备注:
需要调用HCHD_LoadDrv2 传递参数2来安装HDVT驱动
[TOP]
函数简介 :
VT驱动无痕无模块安装X64插件到目标进程中
函数原型 :
__int64 __stdcall HCHDVT_InstallPlugX64 (__int32
pid);
参数定义 :
返回值:
备注:
需要调用HCHD_LoadDrv2 传递参数2来安装HDVT驱动
[TOP]
函数简介
:
VT驱动无痕无模块安装X86插件到目标进程中
函数原型 :
__int64 __stdcall HCHDVT_InstallPlugX86 (__int32
pid);
参数定义 :
返回值:
备注:
需要调用HCHD_LoadDrv2 传递参数2来安装HDVT驱动
[TOP]
支持ncnn模型
支持yolov版本 5 8 10 11
支持CPU GPU
[TOP]
函数简介
:
添加YOLOV(ncnn.bin 和 ncnn.param)模型文件(从内存中加载模型)
函数原型:
__int64 __stdcall HCYOLO_AddModel(__int32 ver, void* modeData, __int32
modeDataSize, void* modeLparam, __int32 modeLparamSize, __int32 size = 640, BOOL
bGpu = FALSE, char* password =
NULL);
参数定义:
modeData:ncnn.bin 模型文件的二进制数据
modeDataSize:ncnn.bin 模型文件的二进制数据大小
modeLparam:ncnn.param模型文件的二进制数据
modeLparamSize:ncnn.param模型文件的二进制数据大小
size :训练时候的图片大小 一般默认640
bGpu :是否GPU识别
password :没有就空,一般为默认空就行
返回值:
备注:
ncnn模型
bin =
“XXX.ncnn.bin”
param = “XXX.ncnn.param”
从内存中加载模型
备注:一个进程
仅同时支持一个版本的模型
需要调用HCHD_LoadDrv2 传递参数4来安装YOLOV组件模块
[TOP]
函数简介 :
添加YOLOV(ncnn.bin 和 ncnn.param)模型文件(从文件中加载模型)
函数原型:
__int64 __stdcall HCYOLO_AddModelFile
(__int32 ver, char* modeFileName, char* modeLparamName,
__int32 size = 640, BOOL bGpu = FALSE, char* password =
NULL);
参数定义:
modeFileName:ncnn.bin 模型文件名(支持绝对路径或相对路径) 相对路径需要调用HCRES_SetResPath 设置路径
modeLparamName:ncnn.param模型文件名(支持绝对路径或相对路径) 相对路径需要调用HCRES_SetResPath设置路径
size :训练时候的图片大小 一般默认640
bGpu :是否GPU识别
password :没有就空,一般为默认空就行
返回值:
备注:
ncnn模型
bin = “XXX.ncnn.bin”
param =
“XXX.ncnn.param”
从文件中加载模型
备注:一个进程
仅同时支持一个版本的模型
需要调用 HCHD_LoadDrv2 传递参数4来安装YOLOV组件模块
[TOP]
函数简介 :
添加YOLOV(ncnn.bin 和 ncnn.param)模型文件(从文件中加载模型) ,从后台截图缓存识别
函数原型:
__int64 __stdcall HCYOLO_Identify(__int32 窗口序号,float conf = 0.7f, float iou =
0.4f, BOOL bDebug = FALSE);
参数定义:
返回值:
备注:
识别信息调用HCEnv_GetRetJson获取字符串信息 以“|”分割,自行切割
%d,%f,%f,%f,%f,%f,%d| %d,%f,%f,%f,%f,%f,%d|
字段含义:
类别,X1,Y1,X2,Y2,置信度,耗时|类别,X1,Y1,X2,Y2,置信度,耗时|
需要调用HCHD_LoadDrv2 传递参数4来安装YOLOV组件模块
[TOP]
函数简介 :
添加YOLOV(ncnn.bin 和 ncnn.param)模型文件(从文件中加载模型) ,从指定图片文件识别
函数原型:
__int64 __stdcall HCYOLO_IdentifyByFile (__int32 窗口序号,
char* image, float conf =
0.7f, float iou = 0.4f, BOOL bDebug =
FALSE);
参数定义:
image:图片文件名(支持绝对路径或相对路径) 相对路径需要调用HCRES_SetResPath 设置路径 (图片格式支持多种格式:png jpg bmp等)
返回值:
备注:
识别信息调用HCEnv_GetRetJson获取字符串信息 以“|”分割,自行切割
%d,%f,%f,%f,%f,%f,%d| %d,%f,%f,%f,%f,%f,%d|
字段含义:
类别,X1,Y1,X2,Y2,置信度,耗时|类别,X1,Y1,X2,Y2,置信度,耗时|
需要调用HCHD_LoadDrv2 传递参数4来安装YOLOV组件模块
[TOP]
()函数简介
:
添加YOLOV(ncnn.bin 和 ncnn.param)模型文件(从文件中加载模型) ,从指定图片内存识别
函数原型:
__int64 __stdcall HCYOLO_IdentifyByMem(__int32 窗口序号, void* imgData,__int32
imgDataSize, float conf = 0.7f, float iou = 0.4f, BOOL bDebug =
FALSE);
参数定义:
imgData:图片文件二进制数据(图片格式支持多种格式:png jpg bmp等)
imgDataSize:图片文件二进制数据大小
返回值:
备注:
识别信息调用HCEnv_GetRetJson获取字符串信息 以“|”分割,自行切割
%d,%f,%f,%f,%f,%f,%d| %d,%f,%f,%f,%f,%f,%d|
字段含义:
类别,X1,Y1,X2,Y2,置信度,耗时|类别,X1,Y1,X2,Y2,置信度,耗时|
需要调用HCHD_LoadDrv2 传递参数4来安装YOLOV组件模块
[TOP]
支持全虚拟机版本
连接虚拟机端口控制虚拟机键鼠
[TOP]
函数简介
:
连接虚拟机
函数原型:
__int64 __stdcall
HCVnc_Connect(__int32 windowsIndex,__int32
port);
参数定义:
port:虚拟机开启VNC设置的端口
返回值:
备注:
对应的虚拟机请开启VNC并设置好端口
[TOP]
函数简介 :
关闭连接虚拟机
函数原型:
__int64 __stdcall
HCVnc_Close
(__int32 windowsIndex);
参数定义:
返回值:
备注:
对应的虚拟机请开启VNC并设置好端口
[TOP]
函数简介 :
VNC鼠标绝对移动 (自带移动轨迹 直线波动防检测)
函数原型:
__int64 __stdcall
HCVnc_MoveTo(__int32 windowsIndex, __int32 x, __int32 y);
参数定义:
x:虚拟机屏幕坐标X
y:虚拟机屏幕坐标Y
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标相对移动 (自带移动轨迹 直线波动防检测)
函数原型:
__int64 __stdcall
HCVnc_MoveToOffset(__int32
windowsIndex, __int32 x, __int32 y);
参数定义:
x:虚拟机屏幕相对坐标X
y:虚拟机屏幕相对坐标X
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标左键点击
函数原型:
__int64 __stdcall
HCVnc_LeftClick(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标左键按下
函数原型:
__int64 __stdcall
HCVnc_LeftDown(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标左键弹起
函数原型:
__int64 __stdcall
HCVnc_LeftUp(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标左键双击
函数原型:
__int64 __stdcall
HCVnc_LeftDoubleClick(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标右键点击
函数原型:
__int64 __stdcall
HCVnc_RightClick(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标右键按下
函数原型:
__int64 __stdcall
HCVnc_RightDown(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标右键弹起
函数原型:
__int64 __stdcall
HCVnc_RightUp(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC鼠标滚轮滚下
函数原型:
__int64 __stdcall
HCVnc_WheelDown(__int32
windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
VNC鼠标滚轮滚上
函数原型:
__int64 __stdcall
HCVnc_WheelUp (__int32 windowsIndex);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
VNC键盘按键敲击
函数原型:
__int64 __stdcall
HCVnc_KeyPress(__int32 windowsIndex, int keycode, BOOL
isKeypad = false);
参数定义:
keycode:VK键值
isKeypad :是否数字小键盘 一般假
返回值:
备注:
无
[TOP]
函数简介 :
VNC键盘按键按下
函数原型 :
__int64 __stdcall
HCVnc_KeyDown (__int32
windowsIndex, int keycode);
参数定义:
keycode:VK键值
返回值:
备注:
无
[TOP]
函数简介 :
VNC键盘按键弹起
函数原型 :
__int64 __stdcall
HCVnc_KeyUp (__int32 windowsIndex, int
keycode);
参数定义:
keycode:VK键值
返回值:
备注:
无
[TOP]
函数简介
:
VNC键盘连续按键字符串(数字+字母)
函数原型 :
__int64 __stdcall
HCVnc_KeyPressStr(__int32
windowsIndex, char* strText, BOOL isKeypad =
false);
参数定义:
strText:字符串(ascii编码) 如:"1234567890qwerty~!@#$%^&*()_+{}|:"<>?"
isKeypad :是否数字小键盘 一般假
返回值:
备注:
无
[TOP]
函数简介 :
VNC键盘输入字符串(中文+数字+符号+字母)
函数原型 :
__int64 __stdcall
HCVnc_SendString(__int32 windowsIndex, char*
strText);
参数定义:
strText:字符串(ascii编码) 如:"1234567890qwerty~!@#$%^&*()_+{}|:"<>?欢迎使用HD插件"
返回值:
备注:
无
[TOP]
//【偏移表达式格式】
相对偏移]+x]+y]+z 取地址
相对偏移]+x]+y]+z] 取地址值
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址 的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"
注意事项:
1.加了取地址里面值 不加是地址 对于读整数型/长整数型接口 有效
如:0X123]A]B]C C偏移不会被忽视 同时0X123]A]B]读到的地址 + C偏移 得到地址并返回
如:0X123]A]B]C] C偏移不会被忽视 同时0X123]A]B]读到的地址 + C偏移 取相加后得到的地址里面的值
2.对于读字节流 读浮点数 读双浮点 或写的全部接口 都必须在最后一个加上+] 否则最后一个偏移会被忽视
如:0X123]A]B]C C偏移会被忽视
如:0X123]A]B]C] C偏移不会会被忽视
[TOP]
函数简介 :
特征码查找
函数原型
:
__int64 __stdcall HCM_FindCode(__int32 窗口序号, char
*特征码字符串地址, __int32 偏移, __int32 次数, __int32 type = 1, char *模块名字 =
NULL);
参数定义 :
特征码字符串地址:特征码字符串地址(支持??)
偏移:正负偏移
次数:找到的第几次 从1开始
type:获取的是(基地址/CALL地址/直接地址/地址中的值) 1为地址 2为基地址 3为CALL 4为地址中的值
模块名字:在指定的模块中搜索,默认为主模块 NULL为默认
返回值 :
备注:
无
[TOP]
函数简介
:
特征码查找(通过指定地址)
函数原型 :
__int64 __stdcall HCM_FindCodeEx(__int32 窗口序号, __int64 开始地址, __int64 扫描范围大小,
char *特征码字符串地址, __int32 偏移, __int32 次数, __int32 type =
1);
参数定义 :
开始地址:指定开始扫描的地址
扫描范围大小:指定开始扫描的地址大小,结束地址等于开始地址+扫描范围大小
特征码字符串地址:特征码字符串地址(支持??)
偏移:正负偏移
次数:找到的第几次 从1开始
type:获取的是(基地址/CALL地址/直接地址/地址中的值) 1为地址 2为基地址 3为CALL 4为地址中的值
返回值 :
备注:
无
[TOP]
函数简介 :
读整数数据
函数原型 :
__int64 __stdcall HCM_Read (__int32
窗口序号, char *表达式字符串地址, __int32 读取大小, char *模块名字 = NULL, BOOL 是否主线程调用 =
FALSE);
参数定义:
表达式字符串地址:表达式字符串地址(格式)
读取大小:读取大小 支持 1 2 4 8大小
模块名字:在指定的模块中读写,默认为主模块
是否主线程调用:是否主线程调用
格式:
//【偏移表达式格式】
相对偏移]+x]+y]+z 取地址
相对偏移]+x]+y]+z]
取地址值
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]" 加了取地址里面值
不加是地址
返回值:
备注:
无
[TOP]
函数简介
:
读整数数据
函数原型 :
__int64 __stdcall HCM_ReadAddr(__int32 窗口序号, __int64
addr, __int32 读取大小, BOOL 是否主线程调用 =
FALSE);
参数定义:
addr:需要读的内存地址
读取大小:读取大小 支持 1 2 4 8大小
是否主线程调用:是否主线程调用
返回值:
备注:
无
[TOP]
函数简介 :
写整数数据
函数原型 :
__int64 __stdcall HCM_Write(__int32 窗口序号, char *表达式字符串地址, __int64 value,
__int32 写入大小, char *模块名字 = NULL, BOOL 是否主线程调用 =
FALSE);
参数定义:
表达式字符串地址:表达式字符串地址 最后一个必须+“]”才有意义 否则 会忽视最后一个偏移
value:写入值
写入大小:写入值的字节大小(最大就8字节)
模块名字:在指定的模块中读写,默认为主模块
是否主线程调用:是否主线程调用
格式:
//【偏移表达式格式】
//尽支持十六进制格式:XXX]XXX]XXX]XXX]
//如:0x123456]+0x56]-0x44]
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"不要忘了加
返回值:
备注:
无
[TOP]
函数简介
:
写整数数据
函数原型 :
__int64 __stdcall HCM_WriteAddr(__int32 窗口序号, __int64
addr, __int64 value, __int32 写入大小, BOOL 是否主线程调用 =
FALSE);
参数定义:
addr:需要写的内存地址
value:写入的值
写入大小:写入大小(最大8字节)
是否主线程调用:是否主线程调用
返回值:
备注:
无
[TOP]
函数简介 :
读字节流数据
函数原型
:
__int64 __stdcall HCM_ReadData(__int32 窗口序号, char *表达式字符串地址,
BYTE* byteBuffer, __int32 byBufferSize,
__int32 读取大小, char *模块名字 = NULL, BOOL 是否主线程调用 =
FALSE);
参数定义 :
表达式字符串地址:表达式字符串地址(格式) 读字节流 最后一个必须+“]”才有意义 否则 会忽视最后一个偏移
byteBuffer:存放读取字节集缓冲区
byBufferSize:存放读取字节集缓冲区的大小
读取大小:读取大小 1到100KB大小
模块名字:在指定的模块中读写,默认为主模块
是否主线程调用:是否主线程调用
格式:
//【偏移表达式格式】
//尽支持十六进制格式:XXX]XXX]XXX]XXX]
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"不要忘了加 读字节流 最后一个必须+“]”才有意义
否则 会忽视最后一个偏移
返回值:
高4字节是GetLastError()返回
低4字节是HD返回值
备注:
json返回字节流
利用
HCEnv_GetRetJson拿到返回地址,提取的字节数为读取大小数
最大读取100KB字节大小,注意这个限制,否则会报错
[TOP]
函数简介 :
读单/双浮点数
函数原型
:
__int64 __stdcall HCM_ReadFD(__int32 窗口序号, char *表达式字符串地址, __int32
读取大小, char *模块名字 =
NULL, BOOL 是否主线程调用 =
FALSE);
参数定义 :
表达式字符串地址:表达式字符串地址(格式) 最后一个必须+“]”才有意义 否则 会忽视最后一个偏移
读取大小:4 float单浮点 8 double 双浮点
模块名字:在指定的模块中读写,默认为主模块
是否主线程调用:是否主线程调用
格式:
//【偏移表达式格式】
//尽支持十六进制格式:XXX]XXX]XXX]XXX]
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"不要忘了加 最后一个必须+“]”才有意义 否则
会忽视最后一个偏移
返回值:
备注:
返回结果
以float举例:
json返回字符串
如:{\"error\":0,\"ret\":[{\"bRet\":1,\"iError\":0,\"value\":999.000}]}
[TOP]
函数简介 :
读字节流数据
函数原型
:
__int64 __stdcall HCM_ReadDataAddr(__int32 窗口序号,
__int64 addr, BYTE* byteBuffer,
__int32 byBufferSize, __int32 读取大小, BOOL 是否主线程调用 =
FALSE);
参数定义 :
addr:目标进程的地址
byteBuffer:存放读取字节集缓冲区
byBufferSize:存放读取字节集缓冲区的大小
读取大小:1到100KB大小
是否主线程调用:是否主线程调用
返回值:
高4字节是GetLastError()返回
低4字节是HD返回值
备注:
json返回字节流
利用 HCEnv_GetRetJson拿到返回地址,提取的字节数为读取大小数
最大读取100KB字节大小,注意这个限制,否则会报错
[TOP]
函数简介 :
读单/双浮点数
函数原型 :
__int64 __stdcall HCM_ReadFDAddr(__int32 窗口序号, __int64 addr, __int32 读取大小,
BOOL 是否主线程调用 = FALSE);
参数定义 :
addr:目标进程的地址
读取大小: 4 float单浮点 8 double 双浮点
是否主线程调用:是否主线程调用
返回值:
备注:
读取大小: 4
float单浮点 8 double
双浮点
以float举例:
json返回字符串
如:"999.0000"
[TOP]
函数简介
:
写字节流数据
函数原型
:
__int64 __stdcall
HCM_WriteData(__int32 窗口序号, char *表达式字符串地址, char* byteBuffer, __int32
写入大小, char *模块名字 = NULL, BOOL 是否主线程调用 =
FALSE);
参数定义 :
表达式字符串地址:表达式字符串地址(格式)
byteBuffer:字节流缓冲区地址
写入大小:写入大小 1到100KB大小
模块名字:在指定的模块中读写,默认为主模块
是否主线程调用:是否主线程调用
格式:
//【偏移表达式格式】
//尽支持十六进制格式:XXX]XXX]XXX]XXX]
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"不要忘了加
返回值:
高4字节是GetLastError()返回
低4字节是HD返回值
备注:
最大写入100KB字节大小,注意这个限制,否则会报错
json返回值
{\"error\":0,\"ret\":[{\"bRet\":1,\"iError\":0}]}
[TOP]
函数简介
:
写单浮点数 4字节
函数原型
:
__int64 __stdcall HCM_WriteF(__int32 窗口序号, char *表达式字符串地址, float value,
char *模块名字 = NULL, BOOL
是否主线程调用 = FALSE);
参数定义 :
表达式字符串地址:表达式字符串地址(格式) 最后一个必须+“]”才有意义 否则 会忽视最后一个偏移
value:需要写入的单浮点数
模块名字:在指定的模块中读写,默认为主模块
是否主线程调用:是否主线程调用
格式:
//【偏移表达式格式】
//尽支持十六进制格式:XXX]XXX]XXX]XXX]
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"不要忘了加
返回值:
备注:
json返回值
{\"error\":0,\"ret\":[{\"bRet\":1,\"iError\":0}]}
[TOP]
函数简介
:
写双浮点数 8字节
函数原型
:
__int64 __stdcall HCM_WriteD(__int32 窗口序号, char *表达式字符串地址, double value,
char *模块名字 = NULL, BOOL 是否主线程调用 =
FALSE);
参数定义 :
表达式字符串地址:表达式字符串地址(格式) 最后一个必须+“]”才有意义 否则 会忽视最后一个偏移
value:需要写入的双浮点数
模块名字:在指定的模块中读写,默认为主模块
是否主线程调用:是否主线程调用
格式:
//【偏移表达式格式】
//尽支持十六进制格式:XXX]XXX]XXX]XXX]
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"不要忘了加
返回值:
备注:
json返回值
{\"error\":0,\"ret\":[{\"bRet\":1,\"iError\":0}]}
[TOP]
函数简介
:
写字节流数据
函数原型
:
__int64 __stdcall HCM_WriteDataAddr(__int32 窗口序号, __int64 addr, char*
byteBuffer, __int32 写入大小, BOOL 是否主线程调用 =
FALSE);
参数定义 :
addr:目标进程的地址
byteBuffer:字节缓冲区,最大写入100KB
写入大小:1到100KB大小
是否主线程调用:是否主线程调用
返回值:
高4字节是GetLastError()返回
低4字节是HD返回值
备注:
json返回字节流
利用HCEnv_GetRetJson拿到返回地址,提取的字节数为读取大小数
最大读取100KB字节大小,注意这个限制,否则会报错
[TOP]
函数简介
:
写单浮点数 4字节
函数原型
:
__int64 __stdcall HCM_WriteAddrF(__int32 窗口序号, __int64 addr, float value,BOOL
是否主线程调用 = FALSE);
参数定义 :
addr:目标进程地址
value: float单浮点值
是否主线程调用:是否主线程调用
返回值:
备注:
无
[TOP]
函数简介
:
写双浮点数 8字节
函数原型
:
__int64 __stdcall HCM_WriteAddrD(__int32 窗口序号, __int64 addr, double
value,BOOL 是否主线程调用 = FALSE);
参数定义 :
addr:目标进程地址
value: double单浮点值
是否主线程调用:是否主线程调用
返回值:
备注:
无
[TOP]
函数简介
:
获取模块地址
函数原型
:
__int64 __stdcall HCM_GetModuleBase(__int32 窗口序号, char* 模块名字 = NULL, BOOL
是否主线程调用 = FALSE);
参数定义 :
模块名字:NULL默认获取主模块首地址
是否主线程调用:是否主线程调用
返回值:
备注:
无
[TOP]
函数简介 :
获取模块中的导出接口地址
函数原型
:
__int64 __stdcall HCM_GetModuleFunAddr(__int32 窗口序号,
char* 模块名字 = NULL, char* 函数名字 = NULL, BOOL 是否主线程调用 =
FALSE);
参数定义 :
模块名字:NULL默认获取主模块首地址
函数名字:导出接口名字
是否主线程调用:是否主线程调用
返回值:
成功:返回地址
备注:
无
[TOP]
函数简介
:
判断指定地址是否在目标进程中有效可读
函数原型
:
__int64 __stdcall HCM_IsBadReadAddr(__int32 窗口序号, __int64 addr, __int32 size,
BOOL 是否主线程调用 = FALSE);
参数定义 :
addr:目标进程地址
size:地址大小 一般32位是4字节 64位是8字节
是否主线程调用:是否主线程调用
返回值:
备注:
无
[TOP]
函数简介
:
浮点数转整数值的浮点数形式
函数原型 :
__int64 __stdcall
HCM_FloatTakeInt(float
value);
参数定义 :
返回值:
备注:
浮点数->内存中整数值的浮点数形式
1.0 -> 0x3F800000
[TOP]
函数简介
:
执行汇编CALLX86 传递汇编代码
函数原型 :
__int64 __stdcall
HCM_AsmCallX86(__int32 窗口序号, __int64 excuteCallAddr, char*
汇编文本A = NULL, BOOL bFreeAddr = FALSE, BOOL 是否主线程调用 =
FALSE);
参数定义 :
excuteCallAddr:目标进程地址
如果指定为0,那么会在目标进程中申请内存并执行 汇编,同时返回申请的内存地址(json获取,格式 XXXX|YYYYY === 执行内存地址|汇编执行返回值 )
如果指定执行内存地址,则会直接执行并不会申请新的内存(这个时候汇编文本可为0)
汇编文本A:汇编文本 汇编文本不宜过大 内部转换为汇编最大2048字节
如果汇编转换机器码错误,则json格式:"{\"error\":0,\"ret\":[{\"bRet\":%d,\"outSize\":%d,\"count\":%d,\"error\":%d}]}",
bFreeAddr: 是否释放地址 指定excuteCallAddr参数 仅仅只是释放内存 不会执行汇编
是否主线程调用:是否主线程调用
返回值:
返回执行汇编CALL的返回值或错误值
当执行汇编流程 会返回这个json格式: XXXX|YYYYY === 执行内存地址|汇编执行返回值
当汇编转换错误 会返回这个json格式: "{\"error\":0,\"ret\":[{\"bRet\":%d,\"outSize\":%d,\"count\":%d,\"error\":%d}]}"
备注:
无
[TOP]
函数简介
:
执行汇编CALLX64 传递汇编代码
函数原型
:
__int64 __stdcall
HCM_AsmCallX64(__int32 窗口序号, __int64 excuteCallAddr,
char* 汇编文本A = NULL, BOOL bFreeAddr = FALSE, BOOL 是否主线程调用 =
FALSE);
参数定义 :
excuteCallAddr:目标进程地址
如果指定为0,那么会在目标进程中申请内存并执行 汇编,同时返回申请的内存地址(json获取,格式 XXXX|YYYYY === 执行内存地址|汇编执行返回值 )
如果指定执行内存地址,则会直接执行并不会申请新的内存(这个时候汇编文本可为0)
汇编文本A:汇编文本 汇编文本不宜过大 内部转换为汇编最大2048字节
如果汇编转换机器码错误,则json格式:"{\"error\":0,\"ret\":[{\"bRet\":%d,\"outSize\":%d,\"count\":%d,\"error\":%d}]}",
bFreeAddr: 是否释放地址 指定 excuteCallAddr参数 仅仅只是释放内存 不会执行汇编
是否主线程调用:是否主线程调用
返回值 :
返回执行汇编CALL的返回值或错误值
当执行汇编流程 会返回这个json格式: XXXX|YYYYY === 执行内存地址|汇编执行返回值
当汇编转换错误 会返回这个json格式: "{\"error\":0,\"ret\":[{\"bRet\":%d,\"outSize\":%d,\"count\":%d,\"error\":%d}]}"
备注:
无
[TOP]
//【偏移表达式格式】
相对偏移]+x]+y]+z 取地址
相对偏移]+x]+y]+z]
取地址值
//如:0x123456]+0x56]-0x44] 第一个偏移表示的是基地址的偏移 不是基地址地址
//加号"+"可要可不要
//减号"-"负偏移需要
//最后一个"]"
注意事项:
1.加了取地址里面值 不加是地址 对于读整数型/长整数型接口 有效
如:0X123]A]B]C C偏移不会被忽视 同时0X123]A]B]读到的地址 + C偏移 得到地址并返回
如:0X123]A]B]C] C偏移不会被忽视 同时0X123]A]B]读到的地址 + C偏移后取相加后的地址里面的值
2.对于读字节流 读浮点数 读双浮点 或写的全部接口 都必须在最后一个加上+] 否则最后一个偏移会被忽视
如:0X123]A]B]C C偏移会被忽视
如:0X123]A]B]C] C偏移不会会被忽视
[TOP]
函数简介
:
截图并保存到文件(.bmp)
函数原型 :
__int64 __stdcall HCFP_Capture(__int32 窗口序号, __int32 x, __int32 y, __int32 w,
__int32 h, char* fileNamePath, BOOL 是否打开查看器 =
FALSE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
fileNamePath:保存到文件的路径+文件名(.bmp)
是否打开查看器:是否打开查看
返回值:
备注:
无
[TOP]
函数简介 :
单点找色
函数原型 :
__int64 __stdcall HCFP_FindColor(__int32 窗口序号, __int32 x, __int32 y,
__int32 w, __int32 h, char* deltaColor, double sim, __int32
dirType= 0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如:303030) RGB 十六进制 RGB-偏色|000000-000000|000000-000000
sim:整个像素矩阵的相似度
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
大于0表示:高4字节为 x 低4字节为y
json: "{"error":0,"ret":[{"bRet":ret,"info":"X1,Y1"}]}",
备注:
注意返回值含义和XY值的提取
[TOP]
函数简介
:
多点找色
函数原型 :
__int64 __stdcall HCFP_FindColors(__int32 窗口序号, __int32 x, __int32 y,
__int32 w, __int32 h, char* deltaColor, double sim, __int32
dirType= 0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如:303030) RGB 十六进制 RGB-偏色|000000-000000|000000-0000000
sim:整个像素矩阵的相似度
dirType :排序类型/ 方向类型 排序/方向类型
返回值:
返回找到匹配颜色的数量
备注:
json:
{error:0, ret :[{ bRet:1,info:结果}]}"
info格式->像素序号,x1,y1|像素序号,x2,y2
[TOP]
函数简介
:
多点偏移找色
函数原型 :
__int64 __stdcall
HCFP_FindColorsOffset(__int32
窗口序号, __int32 x, __int32 y, __int32 w, __int32 h, char* firstDeltaColor, char*
deltaColor, double sim, __int32 bALL =
0, __int32 dirType =
0);
参数定义:
y:矩形范围左上角y
w:宽度
h:高度
firstDeltaColor:首色 XXXXXX-YYYYYY 格式
deltaColor:偏移色 x1|y1|XXXXXX-YYYYYY| XXXXXX-YYYYYY| ...,x2|y3|XXXXXX-YYYYYY| XXXXXX-YYYYYY| ...,...格式
sim:相似度
bALL:是否全部找 0表示找到一个就返回
dirType :排序类型/ 方向类型排序/方向类型
返回值:
备注:
json:
"{\"error\":0,\"ret\":[{\"bRet\":%lld,\"info\":\"%s\"}]}",
info:x1,y1|x2,y2|
[TOP]
函数简介
:
比较颜色
函数原型 :
__int64 __stdcall HCFP_CmpColors(__int32 窗口序号, __int32
x, __int32 y,char* deltaColor);
参数定义:
y
deltaColor:XXXXXX-YYYYYY 格式
返回值:
1找到
0未找到
备注:
无
[TOP]
函数简介 :
多点找色确定某个图像块,指定多个具体点
函数原型 :
__int64 __stdcall HCFP_CmpColorExs (__int32 窗口序号, char*
deltaXYColor
);
参数定义:
返回值:
找到返回8字节长整数包含第一个坐标点x1,y1 低4字节x1 高4字节y1
未找到返回0或者小于0
json: "{"error":0,"ret":[{"bRet":ret,"info":”X1,Y1“}]}",
备注:
这个接口是给具体的坐标直接比较颜色
而这个HCFP_FindColorsOffset是是先搜索首色然后以首色开始拿到偏移的坐标去比较颜色
[TOP]
函数简介 :
获取某个点的颜色值 (从后台)
函数原型 :
__int64 __stdcall HCFP_GetColor(__int32 窗口序号, __int32 x, __int32
y);
参数定义:
y:客户区y
返回值:
大于0表示具体颜色值(ARGB) 4字节颜色
备注:
注意返回值含义和值的提取
#pragma
pack(1)
typedef struct MYA8R8G8B8
{
BYTE
m_a;//0x00
BYTE m_r;//低8位
BYTE m_g;//中8位
BYTE m_b;//高8位
MYA8R8G8B8()
{
m_a =
0; m_r = 0; m_g = 0; m_b = 0;
}
}MYA8R8G8B8;
#pragma pack()
json:
“{"error":0,"ret":[{"bRet":1,"info":"44,29,5B"}]}” A(0x00) r g b r红色:低8位 g绿色:中8位 b蓝色:高8位 RGB FFFFFF
[TOP]
函数简介 :
在客户区范围内找图
函数原型
:
__int64 __stdcall HCFP_FindPic (__int32 窗口序号,__int32 x, __int32 y,
__int32 w, __int32 h, char*图片名字, char* deltaColor, double
sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
图片名字:一张图片(bmp)文件名字(不包含路径,路径调用HCRES_SetResPath全局设置)
deltaColor:偏色(如:303030) RGB 十六进制
sim:整个像素矩阵的相似度
dirType :排序类型/ 方向类型 排序/方向类型
返回值:
大于0表示:低4字节为 x 高4字节为y
备注:
注意返回值含义和xy值的提取
[TOP]
函数简介 :
在客户区范围内找图 (返回找到其中一张信息)
函数原型
:
__int64 __stdcall HCFP_FindPicEx(__int32 窗口序号, __int32 x, __int32 y,
__int32 w, __int32 h,char*图片名字集合, char* deltaColor, double
sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
图片名字集合:多张张图片(bmp)文件名字(不包含路径,路径调用HCRES_SetResPath全局设置) ,以'|'分隔开
deltaColor:偏色(如:303030) RGB 十六进制
sim:整个像素矩阵的相似度
dirType :排序类型/ 方向类型 排序/方向类型
返回值:
大于0表示:低4字节为 x 高4字节为y
备注:
注意返回值含义和xy值的提取
返回json:
{error:0,ret:[{bRet:NN,info:MM}]}
NN:返回值
MM:索引,X,Y
[TOP]
函数简介 :
在客户区范围内检测再规定时间内是否卡图
函数原型 :
__int64 __stdcall HCFP_IsDisplayDead(__int32 窗口序号,__int32 x, __int32 y,
__int32 w, __int32 h,__int32 mstime);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
mstime:间隔时间(不变就说明卡屏了),不会卡主线程
返回值:
备注:
无
[TOP]
函数简介 :
在客户区范围内获取像素CRC值,用于卡屏校验
函数原型 :
__int64 __stdcall
HCFP_GetRangeCRC(__int32 窗口序号, __int32 x, __int32 y,
__int32 w, __int32 h);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
返回值:
备注:
json:
{\"error\":0,\"ret\":[{\"bRet\":%lld,\"info\":"%X“,\"time\":%d}]}
info字段是校验值 4字节整数
[TOP]
函数简介
:
单点找色(从文件)
函数原型 :
__int64 __stdcall HCFP_FindColorByFile(__int32 窗口序号,
char*orgImageName, __int32 x, __int32 y, __int32 w, __int32 h, char* deltaColor,
double sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如:303030) RGB 十六进制 RGB-偏色|00000000-00000000|00000000-00000000
sim:整个像素矩阵的相似度
dirType :排序类型/ 方向类型 排序/方向类型
返回值:
大于0表示:高4字节为 x 低4字节为y
json: "{"error":0,"ret":[{"bRet":ret,"info":"X1,Y1"}]}",
备注:
注意返回值含义和XY值的提取
[TOP]
函数简介 :
单点找色(从内存)
函数原型 :
__int64 __stdcall HCFP_FindColorByMem(__int32 窗口序号, BYTE* data,
__int32 dataSize, __int32 x, __int32 y, __int32 w, __int32 h, char* deltaColor,
double sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如:303030) RGB 十六进制 RGB-偏色|00000000-00000000|00000000-00000000
sim:整个像素矩阵的相似度
dirType :排序类型/ 方向类型 排序/方向类型
返回值:
大于0表示:高4字节为 x 低4字节为y
json: "{"error":0,"ret":[{"bRet":ret,"info":"X1,Y1"}]}",
备注:
注意返回值含义和XY值的提取
图片内存缓冲区自己维护
[TOP]
函数简介
:
多点找色(从文件)
函数原型 :
__int64 __stdcall HCFP_FindColorsByFile(__int32 窗口序号,
char*orgImageName, __int32 x, __int32 y, __int32 w, __int32 h, char* deltaColor,
double sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如:303030) RGB 十六进制 RGB-偏色|00000000-00000000|00000000-00000000
sim:整个像素矩阵的相似度
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
备注:
json:
{error:0, ret :[{ bRet:1,info:结果}]}"
info格式->像素序号,x1,y1|像素序号,x2,y2
[TOP]
函数简介 :
多点找色(从内存)
函数原型 :
__int64 __stdcall HCFP_FindColorsByMem(__int32 窗口序号, BYTE* data,
__int32 dataSize, __int32 x, __int32 y, __int32 w, __int32 h, char* deltaColor,
double sim, __int32 dirType=
0);
参数定义 :
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如:303030) RGB 十六进制 RGB-偏色|00000000-00000000|00000000-00000000
sim:整个像素矩阵的相似度
dirType :排序类型/ 方向类型 排序/方向类型
返回值:
备注:
json:
{error:0, ret :[{ bRet:1,info:结果}]}"
info格式->像素序号,x1,y1|像素序号,x2,y2
图片内存缓冲区自己维护
[TOP]
函数简介
:
多点偏移找色(从文件)
函数原型 :
__int64 __stdcall
HCFP_FindColorsOffsetByFile(__int32 窗口序号,
char*orgImageName, __int32 x, __int32 y, __int32 w, __int32 h, char*
firstDeltaColor, char* deltaColor, double sim, __int32 bALL =
0, __int32 dirType =
0);
参数定义:
y:矩形范围左上角y
w:宽度
h:高度
firstDeltaColor:首色 XXXXXX-YYYYYY 格式
deltaColor:偏移色 x1|y1|XXXXXX-YYYYYY| XXXXXX-YYYYYY| ...,x2|y3|XXXXXX-YYYYYY| XXXXXX-YYYYYY| ...,...格式
sim:相似度
bALL:是否全部找 0表示找到一个就返回
dirType :排序类型 / 方向类型排序/方向类型
返回值:
备注:
无
[TOP]
函数简介
:
多点偏移找色(从内存)
函数原型 :
__int64 __stdcall
HCFP_FindColorsOffsetByMem(__int32 窗口序号, BYTE* data,
__int32 dataSize, __int32 x, __int32 y, __int32 w, __int32 h, char*
firstDeltaColor, char* deltaColor, double sim, __int32 bALL =
0, __int32 dirType =
0);
参数定义:
y:矩形范围左上角y
w:宽度
h:高度
firstDeltaColor:首色 XXXXXX-YYYYYY 格式
deltaColor:偏移色 x1|y1|XXXXXX-YYYYYY| XXXXXX-YYYYYY| ...,x2|y3|XXXXXX-YYYYYY| XXXXXX-YYYYYY| ...,...格式
sim:相似度
bALL:是否全部找 0表示找到一个就返回
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
备注:
图片内存缓冲区自己维护
[TOP]
函数简介 :
在客户区范围内找图(从文件)
函数原型
:
__int64 __stdcall HCFP_FindPicByFile(__int32 窗口序号, char*orgImageName,
__int32 x, __int32 y, __int32 w, __int32 h, char*图片名字, char* deltaColor, double
sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
图片名字:一张图片(bmp)文件名字(路径调用HCRES_SetResPath全局设置) (支持绝对路径和相对路径)
deltaColor:偏色(如:303030) RGB 十六进制
sim:整个像素矩阵的相似度
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
大于0表示:高4字节为 x 低4字节为y
备注:
注意返回值含义和xy值的提取
[TOP]
函数简介
:
在客户区范围内找图(从内存)
函数原型 :
__int64 __stdcall HCFP_FindPicByMem(__int32 窗口序号, BYTE* data, __int32
dataSize, __int32 x, __int32 y, __int32 w, __int32 h, char*图片名字, char*
deltaColor, double sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
图片名字:一张图片(bmp)文件名字(路径调用HCRES_SetResPath全局设置) (支持绝对路径和相对路径)
deltaColor:偏色(如:303030) RGB 十六进制
sim:整个像素矩阵的相似度
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
大于0表示:高4字节为 x 低4字节为y
备注:
注意返回值含义和xy值的提取
图片内存缓冲区自己维护
[TOP]
函数简介
:
在客户区范围内找图(从文件)
函数原型 :
__int64 __stdcall HCFP_FindPicExByFile(__int32 窗口序号,
char*orgImageName, __int32 x, __int32 y, __int32 w, __int32 h, char*图片名字集合,
char* deltaColor, double sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
图片名字集合:多张张图片(bmp)文件名字(不包含路径,路径调用HCRES_SetResPath全局设置) ,以'|'分隔开(支持绝对路径和相对路径)
deltaColor:偏色(如:303030) RGB 十六进制
sim:整个像素矩阵的相似度
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
大于0表示:低4字节为 x 高4字节为y
备注:
注意返回值含义和xy值的提取
返回json:
{error:0,ret:[{bRet:NN,info:MM}]}
NN:返回值
MM:索引,X,Y
[TOP]
函数简介
:
在客户区范围内找图(从内存)
函数原型 :
__int64 __stdcall HCFP_FindPicExByMem(__int32 窗口序号, BYTE* data,
__int32 dataSize, __int32 x, __int32 y, __int32 w, __int32 h, char*图片名字集合, char*
deltaColor, double sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
图片名字集合:多张张图片(bmp)文件名字(不包含路径,路径调用HCRES_SetResPath全局设置) ,以'|'分隔开(支持绝对路径和相对路径)
deltaColor:偏色(如:303030) RGB 十六进制
sim:整个像素矩阵的相似度
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
大于0表示:低4字节为 x 高4字节为y
备注:
注意返回值含义和xy值的提取
图片内存缓冲区自己维护
返回json:
{error:0,ret:[{bRet:NN,info:MM}]}
NN:返回值
MM:索引,X,Y
[TOP]
函数简介 :
在客户区范围内找图(子图从内存)
函数原型 :
__int64 __stdcall HCFP_FindPicExFromMem(__int32 窗口序号, __int32 x,
__int32 y, __int32 w, __int32 h, char*子图内存地址集合字符串, char* deltaColor, double
sim, __int32 dirType=
0);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
图片名字集合:多张张图片(bmp)文件名字(不包含路径,路径调用HCRES_SetResPath全局设置) ,以'|'分隔开(支持绝对路径和相对路径)
deltaColor:偏色(如:303030) RGB 十六进制
sim:整个像素矩阵的相似度
dirType :排序类型 / 方向类型 排序/方向类型
返回值:
大于0表示:低4字节为 x 高4字节为y
备注:
注意返回值含义和xy值的提取
图片内存缓冲区自己维护
返回json:
{error:0,ret:[{bRet:NN,info:MM}]}
NN:返回值
MM:索引,X,Y
[TOP]
函数简介
:
比较颜色(从文件)
函数原型 :
__int64 __stdcall HCFP_CmpColorsByFile(__int32 窗口序号, char*orgImageName,
__int32 x, __int32 y, char*
deltaColor);
参数定义:
orgImageName:指定一张原图数据(支持绝对路径和相对路径)
y:矩形范围左上角y
deltaColor:XXXXXX-YYYYYY 格式
返回值:
1找到
0未找到
备注:
无
[TOP]
函数简介 :
比较颜色(从内存)
函数原型
:
__int64 __stdcall HCFP_CmpColorsByMem(__int32 窗口序号, BYTE* data, __int32 dataSize,
__int32 x, __int32 y, char*
deltaColor);
参数定义:
data:Bmp图片字节数据缓冲区地址
y:矩形范围左上角y
deltaColor:XXXXXX-YYYYYY 格式
返回值:
1找到
0未找到
备注:
图片内存缓冲区自己维护
[TOP]
函数简介 :
多点找色确定某个图像块,指定多个具体点,从文件
函数原型 :
__int64 __stdcall HCFP_CmpColorExsByFile (__int32 窗口序号,
char*orgImageName, char*
deltaXYColor
);
参数定义:
orgImageName:指定一张原图数据(支持绝对路径和相对路径)
deltaXYColor:x1|y1|e3e6eb-101010|e3e6eb-101010|e3e6eb-101010|...,x2|y2|e3e6eb-101010|e3e6eb-101010|e3e6eb-101010|...
返回值:
找到返回8字节长整数包含第一个坐标点x1,y1 低4字节x1 高4字节y1
未找到返回0或者小于0
json: "{"error":0,"ret":[{"bRet":ret,"info":”X1,Y1“}]}",
备注:
无
[TOP]
函数简介 :
多点找色确定某个图像块,指定多个具体点,从内存
函数原型
:
__int64 __stdcall
HCFP_CmpColorExsByMem(__int32 窗口序号, BYTE* data,
__int32 dataSize, char* deltaXYColor);
参数定义:
data:Bmp图片字节数据缓冲区地址
deltaXYColor:x1|y1|e3e6eb-101010|e3e6eb-101010|e3e6eb-101010|...,x2|y2|e3e6eb-101010|e3e6eb-101010|e3e6eb-101010|...
返回值:
找到返回8字节长整数包含第一个坐标点x1,y1 低4字节x1 高4字节y1
未找到返回0或者小于0
json: "{"error":0,"ret":[{"bRet":ret,"info":”X1,Y1“}]}",
备注:
无
[TOP]
函数简介
:
获取颜色(从文件)
函数原型 :
__int64 __stdcall HCFP_GetColorByFile(__int32 窗口序号, char*orgImageName,
__int32 x, __int32 y);
参数定义:
orgImageName:指定一张原图数据(支持绝对路径和相对路径)
y:矩形范围左上角y
返回值:
备注:
注意返回值含义和值的提取
#pragma
pack(1)
typedef struct MYA8R8G8B8
{
BYTE
m_a;//0x00
BYTE m_r;//低8位
BYTE m_g;//中8位
BYTE m_b;//高8位
MYA8R8G8B8()
{
m_a =
0; m_r = 0; m_g = 0; m_b = 0;
}
}MYA8R8G8B8;
#pragma pack()
json:
“{"error":0,"ret":[{"bRet":1,"info":"44,29,5B"}]}” A(0x00) r g b r红色:低8位 g绿色:中8位 b蓝色:高8位 RGB FFFFFF
[TOP]
函数简介 :
获取颜色(从内存)
函数原型 :
__int64 __stdcall HCFP_GetColorByMem(__int32 窗口序号, BYTE*
data, __int32 dataSize, __int32 x, __int32
y);
参数定义:
data:Bmp图片字节数据缓冲区地址
y:矩形范围左上角y
返回值:
备注:
图片内存缓冲区自己维护
注意返回值含义和值的提取
#pragma
pack(1)
typedef struct MYA8R8G8B8
{
BYTE
m_a;//0x00
BYTE m_r;//低8位
BYTE m_g;//中8位
BYTE m_b;//高8位
MYA8R8G8B8()
{
m_a =
0; m_r = 0; m_g = 0; m_b = 0;
}
}MYA8R8G8B8;
#pragma pack()
json:
“{"error":0,"ret":[{"bRet":1,"info":"44,29,5B"}]}” A(0x00) r g b r红色:低8位 g绿色:中8位 b蓝色:高8位 RGB FFFFFF
[TOP]
像素找字
[TOP]
函数简介 :
设置当前像素识字的字库文件(为了提高识别效率,不支持多线程)
建议在登录回调中 最开始初始化调用
其他线程需要那个序号就切换那个序号 HCFS_SwitchCurDictFile
调用一次会给所有窗口序号添加当前设置的字库文件
函数原型 :
__int64 __stdcall HCFS_SetDictFile(__int32 窗口序号, __int32
字库序号 ,char*
file);
参数定义:
窗口序号:窗口序号
字库序号:字库序号 自定义整数类型 枚举类型 宏定义 不要小于0 !! 小于0用于错误返回值
返回值:
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
这个不支持多线程,请在开启前首先设置好
类型提前添加字库,需要在当前线程使用字库必须调用 HCFS_SwitchCurDictFile 切换字库
字库文件 绑定 窗口序号
字库序号 绑定
线程
窗口序号 支持多线程多进程 来操作目标进程
可以在多线程中 通过窗口序号 拿到 所有绑定的 字库文件信息
至于在多线程中
要使用的是哪一个字库文件? 取决于 当前线程所绑定的字库序号
总结:
1.所有字库文件
只需要和窗口序号 关联一次就行
2.在多线程中 需要使用到那个字库序号 就切换就行 多线程有自己的字库序号副本 互不影响
各自切换
[TOP]
函数简介
:
设置当前像素识字的字库文件(为了提高识别效率,不支持多线程)
请在主线程中最开始初始化调用
其他线程需要那个序号就切换那个序号 HCFS_SwitchCurDictFile
调用一次会给所有窗口序号添加当前设置的字库文件
函数原型
:
__int64 __stdcall HCFS_SetDictFileEx(__int32 字库序号 ,char*
file);
参数定义:
窗口序号:窗口序号
字库序号:字库序号 自定义整数类型 枚举类型 宏定义 不要小于0 !! 小于0用于错误返回值
返回值:
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
这个不支持多线程,请在开启前首先设置好
类型提前添加字库,需要在当前线程使用字库必须调用 HCFS_SwitchCurDictFile 切换字库
[TOP]
函数简介
:
切换当前像素识字的字库文件(支持多线程)
函数原型 :
__int64 __stdcall HCFS_SwitchCurDictFile(__int32 窗口序号,
__int32 字库序号);
参数定义:
窗口序号:窗口序号
字库序号:字库序号 自定义整数类型 枚举类型 宏定义
返回值:
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好
运行起来了就不能设置 否则冲突
切换字库文件可以在运行的时候切换,而HCFS_SetDictFile设置字库文件必须在初始化阶段中进行!
对于多线程操作同一个窗口序号的时候,切换字库支持多线程操作,操作前请先在主执行线程中设置字库就行其他副线程(包含主线程)就只需要切换就行
[TOP]
函数简介
:
获取当前线程的加载后的字库文件信息 (支持多线程)
函数原型 :
__int64 __stdcall HCFS_GetCurDictInfo
(__int32 窗口序号);
参数定义:
窗口序号:窗口序号
返回值:
备注:
json:
"{"error":0,"ret":[{"bRet":ret,"info":info}]}"
info:窗口索引,当前字库索引,加载了字库文件数量,(加载的字库序号,对应的字条数目)|... 如: info: 0,1,3,(1,55)|(2,55)|(3,55)|
注意返回的是当前线程的字库信息
[TOP]
函数简介 :
获取当前线程绑定的字库索引 (支持多线程)
函数原型 :
__int64 __stdcall HCFS_GetCurDictIndex(__int32
窗口序号);
参数定义:
窗口序号:窗口序号
返回值 :
备注:
返回大于等于0的值是当前线程绑定的字库索引
[TOP]
函数简介 :
在客户区范围内找字(只支持单字符串并且是单字符字库)
函数原型 :
__int64 __stdcall HCFS_FindStr(__int32 窗口序号, long findX, long findY,
long findW, long findH, LPCSTR str, LPCSTR
deltaColor
, double sim, long bfx, __int32 dirType= 0, int spaceH = 11,
int spaceV = 11, double groundRate = 0.1, BOOL
bOne11= TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考: 水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考: one11解析和案例分析
返回值:
大于0表示:高4字节为 y 低4字节为x
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->0,x1,y1,w1,h1,sim
字库格式: (兼容大漠插件字库文件)
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
在客户区范围内找字(支持多字符串并且是单字符字库)
函数原型
:
__int64 __stdcall HCFS_FindStrEx(__int32 窗口序号, long findX, long findY,
long findW, long findH, LPCSTR str, LPCSTR
deltaColor,
double sim, long bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11, double
groundRate = 0.1, BOOL bOne11=
TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析< /FONT>
spaceV:字体垂直间距 默认11像素 参考: 水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考:周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
字符串用HCEnv_GetRetJson获取
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w1,h1,sim|字符串序号,x2,y2,w2,h2,sim
字库格式: (兼容大漠插件字库文件)
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
在客户区范围内找字(支持多字符串并且是单字符字库) 找到一个就返回
函数原型
:
__int64 __stdcall HCFS_FindStrExx(__int32 窗口序号, long findX, long findY,
long findW, long findH, LPCSTR str, LPCSTR
deltaColor
, double
sim, long bfx, __int32 dirType=
0, int spaceH = 11, int spaceV = 11, double groundRate = 0.1,
BOOL bOne11= TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考: 水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考:周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
字符串用HCEnv_GetRetJson获取
大于0表示:高4字节为 x 低4字节为y 同时字符串信息存在json中
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath 设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w1,h1,sim|字符串序号,x2,y2 ,w2,h2,sim
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
单字符串找
字库是字符串
例如:洛阳 多行 返回多个坐标 一行只找一列(一次)
函数原型 :
__int64 __stdcall HCFS_FindStrMutilVPoints(__int32 窗口序号, long findX,
long findY, long findW, long findH, LPCSTR str, LPCSTR color_format, double
sim,
long bfx, __int32 dirType=
0, int spaceH = 11, int spaceV = 11, double groundRate = 0.1,
BOOL bOne11= TRUE);
参数定义:
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考: 水平垂直间距解析和案例分析 < /SPAN>
groundRate: 一个字的周围占比 默认0.1 参考:周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
大于0表示:找到的数量
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->0,x1,y1,w,h,sim|0,x2,y2,w,h,sim |0,x3,y2,w,h,sim |...
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单字符串找 (原图从文件)
字库是字符串
例如:洛阳 多行 返回多个坐标 一行只找一列(一次)
函数原型
:
__int64 __stdcall HCFS_FindStrMutilVPointsByFile(__int32 窗口序号, long
findX, long findY, long findW, long findH, LPCSTR str, LPCSTR color_format,
double sim, LPCSTR iamgeName, __int32 bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11,
double groundRate = 0.1, BOOL bOne11=
TRUE);
参数定义:
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
iamgeName:bmp图片名字,支持加路径,不加路径则在全局路径找,图片后缀不要省略(支持绝对路径和相对路径)
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考: 水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考:周围占比解析和案例分析 < /SPAN>
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
大于0表示:找到的数量
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->0,x1,y1,w,h,sim| 0,x2,y2,w,h ,sim | 0,x3,y2,w,h ,sim |...
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单字符串找(原图从内存)
字库是字符串
例如:洛阳 多行 返回多个坐标 一行只找一列(一次)
函数原型
:
__int64 __stdcall HCFS_FindStrMutilVPointsByMem(__int32 窗口序号, long
findX, long findY, long findW, long findH, LPCSTR str, LPCSTR color_format,
double sim, BYTE* data, __int32 dataSize, __int32 bfx, __int32 dirType=
0, int spaceH = 11, int spaceV = 11, double groundRate = 0.1,
BOOL bOne11= TRUE);
参数定义:
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
data:bmp图片格式的二进制内存数据首地址
dataSize:图片数据大小
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考: 水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考: 周围占比解析和案例分析 < /SPAN>
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
大于0表示:找到的数量
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->0,x1,y1,w,h,sim| 0,x2,y2,w,h,sim|0,x3,y2,w,h ,sim |...
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单字符串找
字库是字符串
例如:洛阳 多行多列 返回多个坐标
一行找多列(多次) 找多行
函数原型
:
__int64 __stdcall HCFS_FindStrMutilHVPoints(__int32 窗口序号, long findX,
long findY, long findW, long findH, LPCSTR str, LPCSTR color_format, double
sim,
long bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11, double groundRate =
0.1, BOOL bOne11=
TRUE);
参数定义:
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析 < /SPAN>
返回值:
大于0表示:找到的数量
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->0,x1,y1,w,h,sim| 0,x2,y2,w,h,sim | 0,x3,y2,w,h ,sim |...
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单字符串找 (原图从文件)
字库是字符串
例如:洛阳 多行多列 返回多个坐标
一行找多列(多次) 找多行
函数原型 :
__int64 __stdcall HCFS_FindStrMutilHVPointsByFile(__int32 窗口序号, long
findX, long findY, long findW, long findH, LPCSTR str, LPCSTR color_format,
double sim, LPCSTR iamgeName, __int32 bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11,
double groundRate = 0.1, BOOL bOne11=
TRUE);
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
iamgeName:bmp图片名字,支持加路径,不加路径则在全局路径找,图片后缀不要省略 (支持绝对路径和相对路径)
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考: 水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考: one11解析和案例分析 < /FONT>
返回值:
大于0表示:找到的数量
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->0,x1,y1,w,h,sim| 0,x2,y2,w,h,sim|0,x3,y2,w,h,sim |...
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单字符串找 (原图从内存)
字库是字符串
例如:洛阳 多行多列 返回多个坐标
一行找多列(多次) 找多行
函数原型 :
__int64 __stdcall HCFS_FindStrMutilHVPointsByMem(__int32 窗口序号, long
findX, long findY, long findW, long findH, LPCSTR str, LPCSTR color_format,
double sim, BYTE* data, __int32 dataSize, __int32 bfx, __int32 dirType=
0, int spaceH = 11, int spaceV = 11, double groundRate = 0.1,
BOOL bOne11= TRUE);
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
data:bmp图片格式的二进制内存数据首地址
dataSize:图片数据大小
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
大于0表示:找到的数量
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->0,x1,y1,w,h,sim| 0,x2,y2,w,h,sim | 0,x3,y2,w,h ,sim |...
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单/多字符串找 都兼容 |分割
字库是字符串或单字
找到一个就返回
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsAuto(__int32 窗口序号, long findX,
long findY, long findW, long findH, LPCSTR strs, LPCSTR color_format, double
sim,
long bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11, double
groundRate = 0.1, BOOL bOne11=
TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考:周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考: one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
字符串用HCEnv_GetRetJson获取
备注:
单 多字符串找 都兼容 |分割 找到一个就返回
字库是字符串或单字
判断规则: 拼接+完整 1.有完整先识别完整 2.无完整按拼接处理
3.有分隔符|,统一按完整字符串处理
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号(0开始),x1,y1,w,h,sim
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单/多字符串找 都兼容 |分割
字库是字符串或单字
找到一个就返回
可以通过指定图片来获取截图数据 其他功能和HCFS_FindStrMutilsAuto一致
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsAutoByFile(__int32 窗口序号, long
findX, long findY, long findW, long findH, LPCSTR strs, LPCSTR color_format,
double sim, LPCSTR iamgeName, long bfx, __int32 dirType=
0, int spaceH = 11, int spaceV = 11, double groundRate = 0.1,
BOOL bOne11= TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
iamgeName:bmp图片名字,支持加路径,不加路径则在全局路径找,图片后缀不要省略 (支持绝对路径和相对路径)
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
字符串用HCEnv_GetRetJson获取
备注:
单 多字符串找 都兼容 |分割 找到一个就返回
字库是字符串或单字
判断规则: 拼接+完整 1.有完整先识别完整 2.无完整按拼接处理
3.有分隔符|,统一按完整字符串处理
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath 设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w,h,sim
字库格式:( 兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
单/多字符串找 都兼容 |分割
字库是字符串或单字
找到一个就返回
可以通过指定图片来获取截图数据 其他功能和HCFS_FindStrMutilsAuto一致
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsAutoByMem(__int32 窗口序号, long
findX, long findY, long findW, long findH, LPCSTR strs, LPCSTR color_format,
double sim, BYTE* data, __int32 dataSize, __int32 bfx, __int32 dirType=
0, int spaceH = 11, int spaceV = 11, double groundRate = 0.1,
BOOL bOne11= TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
data:bmp图片格式的二进制内存数据首地址
dataSize:图片数据大小
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
字符串用 HCEnv_GetRetJson 获取
备注:
单 多字符串找 都兼容 |分割
找到一个就返回 字库是字符串或单字
判断规则: 拼接+完整 1.有完整先识别完整
2.无完整按拼接处理 3.有分隔符|,统一按完整字符串处理
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath 设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w,h,sim
字库格式:( 兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
单/多字符串找 都兼容 |分割
字库是字符串或单字
找到全部或仅仅找一个
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsAutoEx(__int32 窗口序号,
long findX, long findY, long findW, long findH, LPCSTR strs, LPCSTR
color_format, double sim,
long bfx, __int32 dirType= 0, __int32 bFindOne= 0, int
spaceH = 11, int spaceV = 11, double groundRate = 0.1, BOOL bOne11=
TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
bFindOne:是否找到一个就返回
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1 参考:周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启 参考:one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
字符串用HCEnv_GetRetJson获取
备注:
单 多字符串找 都兼容 |分割 找到一个就返回 字库是字符串或单字
判断规则: 拼接+完整 1.有完整先识别完整 2.无完整按拼接处理
3.有分隔符|,统一按完整字符串处理
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号(0开始),x1,y1,w,h,sim
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
单/多字符串找 都兼容 |分割
字库是字符串或单字
找到全部或仅仅找一个
可以通过指定图片来获取截图数据 其他功能和HCFS_FindStrMutilsAuto一致
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsAutoByFileEx(__int32
窗口序号, long findX, long findY, long findW, long findH, LPCSTR strs, LPCSTR
color_format, double sim, LPCSTR iamgeName, long bfx, __int32 dirType= 0, __int32
bFindOne=0, int spaceH = 11, int spaceV = 11, double groundRate
= 0.1, BOOL bOne11=
TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
iamgeName:bmp图片名字,支持加路径,不加路径则在全局路径找,图片后缀不要省略 (支持绝对路径和相对路径)
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
bFindOne:是否找到一个就返回
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考:one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
字符串用HCEnv_GetRetJson获取
备注:
单 多字符串找 都兼容 |分割
找到一个就返回 字库是字符串或单字
判断规则: 拼接+完整 1.有完整先识别完整
2.无完整按拼接处理 3.有分隔符|,统一按完整字符串处理
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath 设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w,h,sim
字库格式:( 兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
单/多字符串找 都兼容 |分割
字库是字符串或单字
找到全部或仅仅找一个
可以通过指定图片来获取截图数据 其他功能和HCFS_FindStrMutilsAuto一致
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsAutoByMemEx(__int32 窗口序号, long
findX, long findY, long findW, long findH, LPCSTR strs, LPCSTR color_format,
double sim, BYTE* data, __int32 dataSize, __int32 bfx, __int32 dirType= 0,
__int32 bFindOne =0, int spaceH = 11, int spaceV = 11, double
groundRate = 0.1, BOOL bOne11= TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串 支持多字符串 例如: 大理|无量山|溶洞 "|" 分割
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
data:bmp图片格式的二进制内存数据首地址
dataSize:图片数据大小
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
bFindOne:是否找到一个就返回 默认0表示全部找
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考:水平垂直间距解析和案例分析
groundRate:一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考: one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
字符串用 HCEnv_GetRetJson获取
备注:
单 多字符串找 都兼容 |分割
找到一个就返回 字库是字符串或单字
判断规则: 拼接+完整 1.有完整先识别完整
2.无完整按拼接处理 3.有分隔符|,统一按完整字符串处理
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath 设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w,h,sim
字库格式:( 兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
单字符串找 字库是字符串 例如:洛阳
函数原型 :
__int64 __stdcall HCFS_FindStrMutil(__int32 窗口序号, long findX, long
findY, long findW, long findH, LPCSTR str, LPCSTR color_format, double sim, long
bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11,
double groundRate = 0.1, BOOL bOne11=
TRUE);
参数定义:
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考:one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
在客户区范围内找字符串(只支持单字符串) ,同时字库是字符串
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w1,h1,sim|字符串序号,x2,y2,w2,h2,sim
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
多字符串找 字库是字符串 例如:洛阳| 北京|广州
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsEx(__int32 窗口序号, long findX, long
findY, long findW, long findH, LPCSTR str, LPCSTR color_format, double sim, long
bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11,
double groundRate = 0.1, BOOL bOne11=
TRUE);
参数定义:
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考:one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
在客户区范围内找字符串(只支持单字符串) ,同时字库是字符串
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w1,h1,sim| 字符串序号,x2,y2,w2,h2,sim
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
多字符串找 字库是字符串 例如:洛阳| 北京|广州 找到一个就返回
函数原型 :
__int64 __stdcall HCFS_FindStrMutilsExx(__int32 窗口序号, long findX, long
findY, long findW, long findH, LPCSTR str, LPCSTR color_format, double sim, long
bfx, __int32 dirType= 0, int spaceH = 11, int spaceV = 11,
double groundRate = 0.1, BOOL bOne11=
TRUE);
参数定义:
窗口序号:窗口序号 (从1开始) 0表示全局全屏识别
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
str:需要找找的字符串
color_format:偏色(如:303030) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型 / 方向类型 排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素 参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考:one11解析和案例分析
返回值:
MAKEXYWHTO8(fx1, fy1, w, h);
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
在客户区范围内找字符串(只支持单字符串) ,同时字库是字符串
json:
{error:0, ret :[{ bRet:1,info:识字结果}]}"
info格式->字符串序号,x1,y1,w1,h1,sim| 字符串序号,x2,y2,w2,h2,sim
字库格式:(兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
在客户区范围内识别字
字库是字符串或单字
拼接+字符串都支持
函数原型
:
__int64 __stdcall HCFS_Ocr(__int32 窗口序号, long findX, long findY, long
findW, long findH, LPCSTR
deltaColor,
double
sim, long bfx, __int32 dirType = 0, int spaceH = 11, int spaceV = 11, double groundRate
= 0.1, BOOL bOne11= TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型/ 方向类型排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考: 水平垂直间距解析和案例分析
groundRate:一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考:one11解析和案例分析
返回值:
字符串用HCEnv_GetRetJson获取
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath 设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{"error":0,"ret":AAA,"info":BBB}
AAA:0未找到 1找到
BBB:json数组 如: [{"x":0,"y":0,"text":“NULL”}]表示未找到 类似这样 [{"x":123,"y":456,"text":"洛阳"},{"x":654,"y":987,"text":"洱海"}] 表示找到了
格式化字符串:
未找到: "{\"error\":0,\"ret\":%lld,\"info\":[{\"x\":0,\"y\":0,\"text\":\"NULL\"}]}"
找到:"{\"error\":0,\"ret\":%lld,\"info\":%s}"
字库格式:( 兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介
:
在客户区范围内识别字
字库是字符串或单字
拼接+字符串都支持
函数原型 :
__int64 __stdcall HCFS_OcrByFile(__int32 窗口序号, long findX, long findY,
long findW, long findH, LPCSTR color_format, double sim, LPCSTR iamgeName,
__int32 bfx, __int32 dirType= 0 , int
spaceH = 11, int spaceV = 11, double groundRate =
0.1, BOOL bOne11 = TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
iamgeName:指定一张识字的图片文件(.bmp),支持加路径,不加路径则在全局路径找,图片后缀不要省略(支持绝对路径和相对路径)
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型/ 方向类型排序/方向类型
spaceH:字体水平间距 默认11像素 参考: 水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考:水平垂直间距解析和案例分析
groundRate: 一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考:one11解析和案例分析
返回值:
字符串用HCEnv_GetRetJson获取
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{"error":0,"ret":AAA,"info":BBB}
AAA:0未找到 1找到
BBB:json数组 如: [{"x":0,"y":0,"text":“NULL”}]表示未找到 类似这样 [{"x":123,"y":456,"text":"洛阳"},{"x":654,"y":987,"text":"洱海"}] 表示找到了
格式化字符串:
未找到: "{\"error\":0,\"ret\":%lld,\"info\":[{\"x\":0,\"y\":0,\"text\":\"NULL\"}]}"
找到:"{\"error\":0,\"ret\":%lld,\"info\":%s}"
字库格式:( 兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
在客户区范围内识别字
字库是字符串或单字
拼接+字符串都支持
函数原型 :
__int64 __stdcall HCFS_OcrByMem(__int32 窗口序号, long findX, long findY,
long findW, long findH, LPCSTR color_format, double sim, BYTE* data, __int32
dataSize, __int32 bfx, __int32 dirType= 0 , int spaceH = 11, int spaceV = 11,
double groundRate = 0.1, BOOL bOne11= TRUE);
参数定义:
y:矩形范围左上角y
w:矩形范围宽度
h:矩形范围高度
deltaColor:偏色(如: ffffff-000000|1c1c1c-000000) RGB 十六进制 "|" 分割 多点找字
sim:整个像素矩阵的相似度
data:bmp图片格式的二进制内存数据首地址
dataSize:图片数据大小
bfx:是否开启反向相似度(开启更精准,但是对于一些小范围的可能会过滤掉,一般开启就行)
dirType :排序类型/ 方向类型排序/方向类型
spaceH:字体水平间距 默认11像素 参考:水平垂直间距解析和案例分析
spaceV:字体垂直间距 默认11像素参考:水平垂直间距解析和案例分析
groundRate:一个字的周围占比 默认0.1参考: 周围占比解析和案例分析
bOne11:一个字是否独占11像素 默认真/TREU/开启参考:one11解析和案例分析
返回值:
字符串用HCEnv_GetRetJson获取
备注:
字库文件会在资源路径下寻找,还需要调用HCRES_SetResPath设置路径
设置后会自动解析文件字库数据
设置字库文件 初始化要全部设置好 运行起来了就不能设置 否则冲突
json:
{"error":0,"ret":AAA,"info":BBB}
AAA:0未找到 1找到
BBB:json数组 如: [{"x":0,"y":0,"text":“NULL”}]表示未找到 类似这样 [{"x":123,"y":456,"text":"洛阳"},{"x":654,"y":987,"text":"洱海"}] 表示找到了
格式化字符串:
未找到: "{\"error\":0,\"ret\":%lld,\"info\":[{\"x\":0,\"y\":0,\"text\":\"NULL\"}]}"
找到:"{\"error\":0,\"ret\":%lld,\"info\":%s}"
字库格式:( 兼容大漠插件字库文件 )
3FE7FCD9FFFFFE7FCFFBFFFFF98FFFB1E0001C0FFFFFE707E1EC398FFFFFCCC198130$邮件$0.0.196$13 ----》字符串字库
009813FE7FC008$1$0.0.23$9 ----》单字符字库
[TOP]
函数简介 :
设置间距 (在识别拼接字和OCR中尤其重要) -丢弃 改为每个接口单独设置
函数原型
:
__int64 __stdcall HCFS_SetCharSpaceHV(int lenH = 11, int lenV =
11);
参数定义:
返回值:
备注:
1.当相邻的字/数字/字母/符号,在间距范围内,才被认为是一个整体(字符串)
2.不明白什么是水平垂直间距请前往查看水平垂直间距解析和案例分析
3.这种对于数字和符号,尤其重要
[TOP]
函数简介 :
设置11行中(同宽)矩形内,是否只有一个字 -丢弃 改为每个接口单独设置
函数原型 :
__int64 __stdcall HCFS_IsOne11(BOOL b =
TRUE);
参数定义:
b:是否打开 默认打开
返回值:
返回当前开关状态 0/1
备注:
1.如果打开识别速度快,关闭速度慢一点(不影响多少)
2.如果这个i这个字,由2个字符组成 '.' 和'|'
3.如果打开表示i是一个整体识别,不能拆开识别
4.如果关闭表示i可以拆分成2个字符分别识别
[TOP]
函数简介 :
设置字周围一个像素 上下左右的像素占比 -丢弃 改为每个接口单独设置
函数原型
:
double __stdcall HCFS_GroundRate(double rate =
0.1);
参数定义:
rate:占比 分别是4个方向的上下左右
返回值:
备注:
1.对于那种连体字的情况下占比越高,可能识别的不准确
2.这个相当于一个容错率占比
3.返回当前设置后的占比
4.默认0.1
5.这种对于数字和符号,尤其重要,可以准确的提高识别率,越小的字效果越好
[TOP]
1
[TOP]
[TOP]
[TOP]
PS:最好复制到浏览器打开
[TOP]
函数简介
:
识图(返回的是圆型的圆点)
函数原型:
__int64 __stdcall HCFI_FindImageA(__int32 窗口序号, char*图片名字集合, double
sim = 0.8, BOOL 是否灰度图 =
FALSE,
BOOL 是否打开查看器 = FALSE);
__int64 __stdcall HCFI_FindImageW(__int32 窗口序号, wchar_t*图片名字集合, double
sim = 0.8, BOOL 是否灰度图 =
FALSE, BOOL 是否打开查看器 = FALSE);
参数定义 :
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|
sim:相似度0-1
是否灰度图:是否灰度图 一般开启就行
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"data":[{"x":XX,"y":YY},{"x":XX,"y":YY},{"x":XX,"y":YY}],"time":ZZZ}
每张图会有1个坐标点(圆点)
AAA:表示找到几个
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点
-3匹配点小于0
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介 :
识图(返回的是矩形左上角和右下角)
函数原型:
__int64 __stdcall HCFI_FindImageExA(__int32 窗口序号, char*图片名字集合, double sim =
0.8, BOOL 是否灰度图 = FALSE, BOOL 是否打开查看器 =
FALSE);
__int64 __stdcall HCFI_FindImageExW(__int32 窗口序号, wchar_t*图片名字集合,
double sim = 0.8, BOOL 是否灰度图 = FALSE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|
sim:相似度0-1
是否灰度图:是否灰度图 一般开启就行
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"data":[{"x1":XX,"y1":YY,"x2":XX,"y2":YY},{"x1":XX,"y1":YY,"x2":XX,"y2":YY}],"time":ZZZ}
每张图会有2个坐标点(左上角+右下角)
AAA:表示找到几个
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点
-3匹配点小于0
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介 :
范围内识图
函数原型 :
__int64 __stdcall HCFI_FindRangeImageA (__int32 窗口序号, __int32 x,
__int32 y, __int32 w, __int32 h, char*图片名字集合, __int32 type =
0, double sim =
0.8, BOOL 是否灰度图 = FALSE, BOOL
是否打开查看器 = FALSE);
__int64
__stdcall HCFI_FindRangeImageW (__int32 窗口序号, __int32 x,
__int32 y, __int32 w, __int32 h, wchar_t*图片名字集合, __int32 type = 0, double sim =
0.8
, BOOL 是否灰度图 =
FALSE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
x,y,w,h:左上角+高度+宽度
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|
type:0表示返回圆点 1表示返回矩形左上角和右下角
sim:相似度0-1
是否灰度图:是否灰度图 一般开启就行
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"data":[{"x":XX,"y":YY},{"x":XX,"y":YY},{"x":XX,"y":YY}]} type==0< /STRONG>
每张图会有1个坐标点(圆点)
{"error":0,"ret":AAA,"data":[{"x1":XX,"y1":YY,"x2":XX,"y2":YY},{"x1":XX,"y1":YY,"x2":XX,"y2":YY}]}
type==1<
/STRONG>
每张图会有2个坐标点(左上角+右下角)
AAA:表示找到几个
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点
-3匹配点小于0
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介
:
识图
函数原型:
__int64 __stdcall HCFI_FindImageTemA(__int32 窗口序号, char*图片名字集合, double
sim = 0.9, __int32 type =
5, BOOL 是否灰度图 = FALSE, BOOL 是否全部 = FALSE,BOOL 是否打开查看器 =
FALSE);
__int64 __stdcall HCFI_FindImageTemW(__int32 窗口序号,
wchar_t*图片名字集合, double sim = 0.9,
__int32 type = 5,
BOOL 是否灰度图 = FALSE,
BOOL 是否全部 =
FALSE,BOOL 是否打开查看器 =
FALSE);
参数定义 :
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有子图) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始)
如:"洛阳.bmp|洱海.bmp|"
(洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY:
-1图片打不开 -2未找到匹配点
-3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介 :
范围识图
函数原型:
__int64 __stdcall HCFI_FindRangeImageTemA(__int32 窗口序号, __int32 x,
__int32 y, __int32 w, __int32 h, char*图片名字集合, double sim =
0.9, __int32 type =
5, BOOL 是否灰度图 =
FALSE, BOOL
是否全部 = FALSE, BOOL 是否打开查看器 = FALSE);
__int64 __stdcall HCFI_FindRangeImageTemW(__int32 窗口序号, __int32 x,
__int32 y, __int32 w, __int32 h, wchar_t*图片名字集合, double sim =
0.9, __int32 type = 5, BOOL 是否灰度图
=
FALSE, BOOL 是否全部 = FALSE, BOOL 是否打开查看器
=
FALSE);
参数定义 :
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有当前遍历的子图,找完就继续下一张,否则就找到一张子图就开始下一张) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点 -3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介 :
从文件中加载截图数据并识图(返回的是矩形左上角和右下角)
函数原型:
__int64 __stdcall HCFI_FindImageByFile(__int32 窗口序号, char*原图名字,
char*子图片名字集合, double sim = 0.9,BOOL 是否灰度图 =
FALSE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp| (支持绝对路径和相对路径)
sim:相似度0-1
是否灰度图:是否灰度图 一般开启就行
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"data":[{"x1":XX,"y1":YY,"x2":XX,"y2":YY},{"x1":XX,"y1":YY,"x2":XX,"y2":YY}],"time":ZZZ}
每张图会有2个坐标点(左上角+右下角)
AAA:表示找到几个
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点
-3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介
:
从文件中加载截图数据并识图(返回的是矩形左上角和右下角)
函数原型:
__int64 __stdcall HCFI_FindImageTemByFile
(__int32 窗口序号, char*原图名字,
char*子图片名字集合, double sim = 0.9, __int32 type = 5, BOOL 是否灰度图 =
FALSE, BOOL 是否全部 =
FALSE, BOOL 是否打开查看器 = FALSE);
参数定义 :
子图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|(支持绝对路径和相对路径)
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有子图) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点 -3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介
:
范围识图(原图从文件)
函数原型:
__int64 __stdcall HCFI_FindRangeImageTemByFile(__int32
窗口序号, __int32 x, __int32 y, __int32 w, __int32 h, char*原图名字, char*图片名字集合, double
sim = 0.9, __int32 type =
5, BOOL 是否灰度图 =
FALSE,BOOL 是否全部 =
FALSE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有子图) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点 -3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介 :
从内存中加载截图数据并识图(返回的是矩形左上角和右下角)
函数原型:
__int64 __stdcall HCFI_FindImageByMem(__int32
窗口序号, BYTE*data, __int32 dataSize, char*子图片名字集合, double sim = 0.8, BOOL 是否灰度图 =
FALSE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp| (支持绝对路径和相对路径)
sim:相似度0-1
是否灰度图:是否灰度图 一般开启就行
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY
"max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量)
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点
-3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介 :
识图(原图从内存)
函数原型:
__int64 __stdcall
HCFI_FindImageTemByMem(__int32 窗口序号, BYTE*data,
__int32 dataSize, char*子图片名字集合, double sim = 0.9, __int32 type = 5, BOOL 是否灰度图 =
FALSE, BOOL
是否全部 =
FALSE, BOOL
是否打开查看器 =
FALSE);
参数定义 :
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有子图) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点 -3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介
:
从内存中加载截图数据并识图(返回的是矩形左上角和右下角)
函数原型:
__int64 __stdcall HCFI_FindRangeImageTemByMem(__int32 窗口序号, __int32 x,
__int32 y, __int32 w, __int32 h, BYTE*data, __int32 dataSize, char*图片名字集合,
double sim = 0.9, __int32 type = 5, BOOL 是否灰度图 =
FALSE, BOOL
是否全部 =
FALSE, BOOL
是否打开查看器 =
FALSE);
参数定义 :
x,y,w,h:左上角+高度+宽度
子图片名字集合:如:hd1.bmp|hd2.bmp|hd3.bmp|hd4.bmp|(支持绝对路径和相对路径)
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有子图) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点 -3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介
:
识图(子图从内存)
函数原型:
__int64 __stdcall HCFI_FindImageTemFromMem(__int32
窗口序号,char*子图内存地址集合字符串, double sim = 0.9, __int32 type = 5, BOOL 是否灰度图 =
FALSE,
BOOL 是否全部 =
FALSE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有子图) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点 -3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
函数简介 :
范围识图 (子图从内存)
函数原型 :
__int64 __stdcall
HCFI_FindRangeImageTemFromMem(__int32
窗口序号, __int32 x, __int32 y, __int32 w, __int32 h,char*子图内存地址集合字符串, double sim =
0.9, __int32 type = 5, BOOL 是否灰度图 = FALSE,BOOL
是否全部 = FALSE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
sim:相似度0-1
type:0 1 2 3 4 5 一共6种算法 一般用3或5就行 其他效率不高,不精准,一般默认5就行,特别的情况根据实际情况而定
是否灰度图:是否灰度图 一般开启就行
是否全部:找出全部结果(在原图中找出所有子图) 仅仅支持type(第四个参数) :3 4 5的情况下 内部会自动过滤去重矩形
是否打开查看器:是否打开
返回值 :
备注:
图片越多耗时多长
json:
{"error":0,"ret":AAA,"size":BBB,"data":[{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f},{"i":index,"x1":XX,"y1":YY,"x2":XX,"y2":YY "max":0.0f}]}
解析字段含义:
error:错误值
0表示没有错误
每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)
index:图片集合指定的索引(0开始) 如:"洛阳.bmp|洱海.bmp|" (洛阳.bmp)索引就是0
AAA:表示找到几个(真正的找到数量),这个值和index值作为最终是否找到的依据
BBB:表示去重矩形数据前的大小,作为一个参考值,如果参数(是否全部==假),AAA和BBB值一样,否则不一样
XX:X坐标
YY:Y坐标
XX或YY: -1图片打不开 -2未找到匹配点 -3匹配点小于0
max:置信度
time:毫秒耗时
data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
[TOP]
智能识别-丢弃
视频演示链接:https://www.bilibili.com/video/BV1LH4y1f7Bx/?spm_id_from=333.999.0.0
PS:最好复制到浏览器打开
自助标注
自助训练
自助测试
[TOP]
函数简介
:
初始化识别服务器
函数原型
:
__int64 __stdcall HCRC_InitRCServer(__int32 窗口序号, char
*语言库名字);
参数定义:
语言库名字:在全局语言路径中找指定的语言库名字
返回值:
备注:
无
[TOP]
函数简介 :
打开识别服务器
函数原型 :
__int64 __stdcall HCRC_OpenRCServer(__int32
窗口序号);
参数定义:
返回值 :
备注:
无
[TOP]
函数简介:
停止识别服务器
函数原型:
__int64 __stdcall HCRC_StopRCServer(__int32
窗口序号);
参数定义:
返回值 :
备注:
无
[TOP]
函数简介
:
切换识字服务:主要针对语言字体文件的切换
函数原型 :
__int64 __stdcall
HCRC_SwitchRCServer(__int32 窗口序号, char
*语言库名字);
参数定义:
语言库名字:在全局语言路径中找指定的语言库名字
返回值:
备注:
内部实现原理:先停止之前的服务(HCRC_StopRCServer)重新初始化(HCRC_InitRCServer)然后重新开启(HCRC_OpenRCServer)
[TOP]
函数简介:
智能识字
函数原型:
__int64 __stdcall
HCRC_RecognitionCharA(__int32 窗口序号, char*图片名字, int
二值化阈值 = 127, int 置信度 = 80, BOOL 开启灰度图 = TRUE, BOOL 是否打开查看器 =
FALSE);
__int64 __stdcall HCRC_RecognitionCharW(__int32 窗口序号, wchar_t*图片名字, int 二值化阈值
= 127, int 置信度 = 80, BOOL 开启灰度图 = TRUE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
二值化阈值:0-255范围内指定,一般中间就合适,默认127,工具的裁剪功能上可以实时编辑查看,确定阈值后填写
置信度:0-100值越高越精准
开启灰度图:再原有二值化上先灰度图再二值化,如果为假表示不灰度图直接再原图的基础上二值化
返回值 :
备注:
json:
{"error":0,"ret":AAA,"data":[{"image":XXX},{"image":YYY}],"time":ZZZ}
XXX->图片识别后的结果(字符串)
每一个{"image":XXX}是一个识别的字符串,对应<参数:图片名字集合>索引
XXX:格式
"%s,%0.2f,%d,%d,%d,%d|"
字符串1,置信度1,x1,y1,x2,y2|字符串2,置信度2,x1,y1,x2,y2|...|
[TOP]
函数简介:
指定范围内智能识字
函数原型:
__int64 __stdcall HCRC_RecognitionCharExA(__int32 窗口序号, char*图片名字,
__int32 x1 = -1,
__int32 y1 = -1,
__int32 x2 = -1,
__int32 y2 = -1,
int 二值化阈值 =
127, int
置信度 = 80, BOOL 开启灰度图 = TRUE, BOOL 是否打开查看器 = FALSE);
__int64
__stdcall HCRC_RecognitionCharExW(__int32 窗口序号, wchar_t*图片名字,
__int32 x1 =
-1, __int32 y1 = -1, __int32 x2 = -1, __int32 y2 = -1, int 二值化阈值 =
127, int 置信度 = 80, BOOL 开启灰度图 = TRUE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
x1,y1,x2,y2:左上角-右下角组成一个矩形范围
二值化阈值:0-255范围内指定,一般中间就合适,默认127,工具的裁剪功能上可以实时编辑查看,确定阈值后填写
置信度:0-100值越高越精准
开启灰度图:再原有二值化上先灰度图再二值化,如果为假表示不灰度图直接再原图的基础上二值化
返回值 :
备注:
json:
{"error":0,"ret":AAA,"data":[{"image":XXX},{"image":YYY}],"time":ZZZ}
XXX->图片识别后的结果(字符串)
每一个{"image":XXX}是一个识别的字符串,对应<参数:图片名字集合>索引
XXX:格式
"%s,%0.2f,%d,%d,%d,%d|"
字符串1,置信度1,x1,y1,x2,y2|字符串2,置信度2,x1,y1,x2,y2|...|
[TOP]
函数简介
:
从内存图片数据中范围内智能识字
函数原型
:
__int64
__stdcall HCRC_RecognitionCharByMemoryA(__int32
窗口序号, __int64 pData, __int32 宽度, __int32 高度, __int32 x1 = -1, __int32 y1 = -1,
__int32 x2 = -1, __int32 y2 = -1, int 二值化阈值 = 127, int 置信度 = 80, BOOL 开启灰度图 =
TRUE, BOOL 是否打开查看器 = FALSE);
__int64 __stdcall HCRC_RecognitionCharByMemoryW(__int32 窗口序号, __int64
pData, __int32 宽度, __int32 高度, __int32 x1 = -1, __int32 y1 = -1, __int32 x2 =
-1, __int32 y2 = -1, int 二值化阈值 = 127,
int 置信度 = 80, BOOL 开启灰度图 = TRUE, BOOL 是否打开查看器 =
FALSE);
参数定义 :
宽度:图片内存数据宽度
高度:图片内存数据高度
x1,y1,x2,y2:左上角-右下角组成一个矩形范围 默认-1表示全部
二值化阈值:0-255范围内指定,一般中间就合适,默认127,工具的裁剪功能上可以实时编辑查看,确定阈值后填写
置信度:0-100值越高越精准
开启灰度图:再原有二值化上先灰度图再二值化,如果为假表示不灰度图直接再原图的基础上二值化
#pragma pack(1)
typedef
struct MYA8R8G8B8
{
BYTE m_a;
BYTE m_r;
BYTE m_g;
BYTE m_b;
MYA8R8G8B8()
{
m_a =
0; m_r = 0; m_g = 0; m_b = 0;
}
}MYA8R8G8B8;
#pragma pack()
返回值:
备注:
json:
{"error":0,"ret":AAA,"data":[{"image":XXX},{"image":YYY}],"time":ZZZ}
XXX:格式
"%s,%0.2f,%d,%d,%d,%d|" 字符串1,置信度1,x1,y1,x2,y2|字符串2,置信度2,x1,y1,x2,y2|...|
XXX->图片识别后的结果(字符串)
每一个{"image":XXX}是一个识别的字符串,对应<参数:图片名字集合>索引.
[TOP]
前台(*标记)+后台
[TOP]
函数简介:
绑定窗口
函数原型 :
__int64 __stdcall HCMKB_Bind(__int32 窗口序号, __int64 hwnd, char *绑定属性 =
NULL);
参数定义:
例如:
"1|1|1|1|1|1|1|0|1|1|1|1|1|0|1|0|0|0|0|0|" 取消raw输入
如下:属性表
返回值:
备注:
如果绑定属性 "normal"或者"Normal" 表示窗口前台模式!!!! 直接用的是sendmessage发消息 对于一些普通窗口有效 大概率会被拦截 这个时候请直接使用全局前台模式,具体看下面解析说明
如果之前后台了,当切换到窗口前台会自动解绑后台
绑定属性表: 注意顺序!!
属性值 索引
//dx.mouse.position.lock.api|dx.mouse.position.lock.message
1
//dx.mouse.focus.input.api|dx.mouse.focus.input.message
2
//dx.mouse.clip.lock.api
3
//dx.mouse.input.lock.api
4
//dx.mouse.state.api
5
//dx.mouse.api 6
//dx.mouse.cursor
7
//dx.mouse.raw.input 8
//dx.mouse.input.lock.api2 9
//dx.mouse.input.lock.api3
10
//dx.keypad.input.lock.api 11
//dx.keypad.state.api
12
//dx.keypad.api
13
//dx.keypad.raw.input 14
//dx.public.active.api
15
//dx.public.active.api2
16
//dx.public.input.ime
17
//dx.public.disable.window.show
18
//dx.public.down.cpu 19
//dx.public.focus.api
20
解析说明: 绑定模式 窗口序号 拦截概率 是否调用绑定接口
1.窗口后台模式 如:"1|1|1|1|1|1|1|0|1|1|1|1|1|0|1|0|0|0|0|0|" 窗口序号1-61 极低 需要
1.1.模拟后台键鼠和输入(高级模拟) 坐标是窗口客户区坐标
2.窗口前台模式 如:"normal"或者"Normal" 窗口序号1-61 对于一些保护窗口很大概率 需要
2.1.通过发window消息模拟(普通模拟) 坐标是窗口客户区坐标
3.全局前台模式 如 : 无 窗口序号为-1 极低 不需要
3.1会影响鼠标位置 坐标是屏幕坐标
[TOP]
函数简介
:
绑定窗口
函数原型 :
__int64 __stdcall
HCMKB_BindEx(__int32 窗口序号, __int64 hwnd, char *绑定属性 =
NULL, __int32 bRetMove =
1);
参数定义:
例如:"1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0|1|"
bRetMove:是否刷新窗口 有些窗口需要刷新后台键鼠才正常
如下:属性表
返回值:
备注:
如果绑定属性 "normal"或者"Normal" 表示窗口前台模式!!!! 直接用的是sendmessage发消息 对于一些普通窗口有效 大概率会被拦截 这个时候请直接使用全局前台模式,具体看下面解析说明
如果之前后台了,当切换到窗口前台会自动解绑后台
绑定属性表: 注意顺序!!
属性值 索引
//dx.mouse.position.lock.api|dx.mouse.position.lock.message
1
//dx.mouse.focus.input.api|dx.mouse.focus.input.message
2
//dx.mouse.clip.lock.api
3
//dx.mouse.input.lock.api
4
//dx.mouse.state.api
5
//dx.mouse.api
6
//dx.mouse.cursor
7
//dx.mouse.raw.input 8
//dx.mouse.input.lock.api2 9
//dx.mouse.input.lock.api3
10
//dx.keypad.input.lock.api 11
//dx.keypad.state.api
12
//dx.keypad.api
13
//dx.keypad.raw.input 14
//dx.public.active.api
15
//dx.public.active.api2
16
//dx.public.input.ime
17
//dx.public.disable.window.show
18
//dx.public.down.cpu 19
//dx.public.focus.api
20
解析说明: 绑定模式 窗口序号 拦截概率 是否调用绑定接口
1.窗口后台模式 如:"1|1|1|1|1|1|1|0|1|1|1|1|1|0|1|0|0|0|0|0|" 窗口序号1-61 极低 需要
1.1.模拟后台键鼠和输入(高级模拟) 坐标是窗口客户区坐标
2.窗口前台模式 如:"normal"或者"Normal" 窗口序号1-61 对于一些保护窗口很大概率 需要
2.1.通过发window消息模拟(普通模拟) 坐标是窗口客户区坐标
3.全局前台模式 如 : 无 窗口序号为-1 极低 不需要
3.1会影响鼠标位置 坐标是屏幕坐标
[TOP]
函数简介 :
绑定窗口(扩展接口)
函数原型 :
__int64 __stdcall
HCMKB_BindModeEx(__int32 窗口序号, __int64 hwnd, char
*绑定属性 = NULL, __int32 mode = 0, __int32 bRetMove =
1);
参数定义:
例如:"1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0|1|"
mode: 0通用模式效果最好 1(0模式不行可以试一试这个1) 2 3 后续会进一步测试更多的模式
bRetMove:是否刷新窗口 有些窗口需要刷新后台键鼠才正常
=============================================================================================
解决方案:
1.遇到键鼠有时候挂着挂着就失效 请换成------------------------- 绑定属性:"1|0|0|1|1|1|1|0|0|0|1|1|1|0|0|0|0|0|0|0|" + mode:3 比如一些UE引擎的游戏或者其他
=============================================================================================
如下:属性表
返回值:
备注:
如果绑定属性 "normal"或者"Normal" 表示窗口前台模式!!!! 直接用的是sendmessage发消息 对于一些普通窗口有效 大概率会被拦截 这个时候请直接使用全局前台模式,具体看下面解析说明
如果之前后台了,当切换到窗口前台会自动解绑后台
绑定属性表: 注意顺序!!
属性值 索引
//dx.mouse.position.lock.api|dx.mouse.position.lock.message
1
//dx.mouse.focus.input.api|dx.mouse.focus.input.message
2
//dx.mouse.clip.lock.api
3
//dx.mouse.input.lock.api
4
//dx.mouse.state.api
5
//dx.mouse.api
6
//dx.mouse.cursor
7
//dx.mouse.raw.input 8
//dx.mouse.input.lock.api2 9
//dx.mouse.input.lock.api3
10
//dx.keypad.input.lock.api 11
//dx.keypad.state.api
12
//dx.keypad.api
13
//dx.keypad.raw.input 14
//dx.public.active.api
15
//dx.public.active.api2
16
//dx.public.input.ime
17
//dx.public.disable.window.show
18
//dx.public.down.cpu 19
//dx.public.focus.api
20
解析说明: 绑定模式 窗口序号 拦截概率 是否调用绑定接口
1.窗口后台模式 如:"1|1|1|1|1|1|1|0|1|1|1|1|1|0|1|0|0|0|0|0|" 窗口序号1-61 极低 需要
1.1.模拟后台键鼠和输入(高级模拟) 坐标是窗口客户区坐标
2.窗口前台模式 如:"normal"或者"Normal" 窗口序号1-61 对于一些保护窗口很大概率 需要
2.1.通过发window消息模拟(普通模拟) 坐标是窗口客户区坐标
3.全局前台模式 如 : 无 窗口序号为-1 极低 不需要
3.1会影响鼠标位置 坐标是屏幕坐标
[TOP]
函数简介:
切换绑定到所属子窗口的句柄上
函数原型 :
__int64 __stdcall
HCMKB_SwitchBind(__int32 窗口序号, __int64 hwnd, char
*绑定属性 = NULL);
参数定义:
例如:"1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0|1|"
如下:属性表
返回值:
备注:
如果绑定属性 "normal"或者"Normal" 表示窗口前台模式!!!! 直接用的是sendmessage发消息 对于一些普通窗口有效 大概率会被拦截 这个时候请直接使用全局前台模式,具体看下面解析说明
如果之前后台了,当切换到窗口前台会自动解绑后台
绑定属性表: 注意顺序!!
属性值 索引
//dx.mouse.position.lock.api|dx.mouse.position.lock.message
1
//dx.mouse.focus.input.api|dx.mouse.focus.input.message
2
//dx.mouse.clip.lock.api
3
//dx.mouse.input.lock.api
4
//dx.mouse.state.api
5
//dx.mouse.api
6
//dx.mouse.cursor
7
//dx.mouse.raw.input 8
//dx.mouse.input.lock.api2 9
//dx.mouse.input.lock.api3
10
//dx.keypad.input.lock.api 11
//dx.keypad.state.api
12
//dx.keypad.api
13
//dx.keypad.raw.input 14
//dx.public.active.api
15
//dx.public.active.api2
16
//dx.public.input.ime
17
//dx.public.disable.window.show
18
//dx.public.down.cpu 19
//dx.public.focus.api
20
解析说明: 绑定模式 窗口序号 拦截概率 是否调用绑定接口
1.窗口后台模式 如:"1|1|1|1|1|1|1|0|1|1|1|1|1|0|1|0|0|0|0|0|" 窗口序号1-61 极低 需要
1.1.模拟后台键鼠和输入(高级模拟) 坐标是窗口客户区坐标
2.窗口前台模式 如:"normal"或者"Normal" 窗口序号1-61 对于一些保护窗口很大概率 需要
2.1.通过发window消息模拟(普通模拟) 坐标是窗口客户区坐标
3.全局前台模式 如 : 无 窗口序号为-1 极低 不需要
3.1会影响鼠标位置 坐标是屏幕坐标
[TOP]
函数简介:
切换绑定到所属子窗口的句柄上
函数原型 :
__int64 __stdcall
HCMKB_SwitchBindEx(__int32 窗口序号,
__int64 hwnd, char *绑定属性 =
NULL, __int32 bRetMove =
1);
参数定义:
例如:"1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0|1|"
bRetMove:是否刷新窗口 有些窗口需要刷新后台键鼠才正常
如下:属性表
返回值:
备注:
如果绑定属性 "normal"或者"Normal" 表示窗口前台模式!!!! 直接用的是sendmessage发消息 对于一些普通窗口有效 大概率会被拦截 这个时候请直接使用全局前台模式,具体看下面解析说明
如果之前后台了,当切换到窗口前台会自动解绑后台
绑定属性表: 注意顺序!!
属性值 索引
//dx.mouse.position.lock.api|dx.mouse.position.lock.message
1
//dx.mouse.focus.input.api|dx.mouse.focus.input.message
2
//dx.mouse.clip.lock.api
3
//dx.mouse.input.lock.api
4
//dx.mouse.state.api
5
//dx.mouse.api
6
//dx.mouse.cursor
7
//dx.mouse.raw.input 8
//dx.mouse.input.lock.api2 9
//dx.mouse.input.lock.api3
10
//dx.keypad.input.lock.api 11
//dx.keypad.state.api
12
//dx.keypad.api
13
//dx.keypad.raw.input 14
//dx.public.active.api
15
//dx.public.active.api2
16
//dx.public.input.ime
17
//dx.public.disable.window.show
18
//dx.public.down.cpu 19
//dx.public.focus.api
20
解析说明: 绑定模式 窗口序号 拦截概率 是否调用绑定接口
1.窗口后台模式 如:"1|1|1|1|1|1|1|0|1|1|1|1|1|0|1|0|0|0|0|0|" 窗口序号1-61 极低 需要
1.1.模拟后台键鼠和输入(高级模拟) 坐标是窗口客户区坐标
2.窗口前台模式 如:"normal"或者"Normal" 窗口序号1-61 对于一些保护窗口很大概率 需要
2.1.通过发window消息模拟(普通模拟) 坐标是窗口客户区坐标
3.全局前台模式 如 : 无 窗口序号为-1 极低 不需要
3.1会影响鼠标位置 坐标是屏幕坐标
[TOP]
函数简介
:
切换绑定窗口(扩展接口)
函数原型 :
__int64 __stdcall
HCMKB_SwitchBindModeEx(__int32 窗口序号, __int64 hwnd, char
*绑定属性 = NULL, __int32 mode = 0, __int32 bRetMove =
1);
参数定义:
例如:"1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0|1|"
mode: 0通用模式效果最好 1(0模式不行可以试一试这个1) 2 3 后续会进一步测试更多的模式
bRetMove:是否刷新窗口 有些窗口需要刷新后台键鼠才正常
=============================================================================================
解决方案:
1.遇到键鼠有时候挂着挂着就失效 请换成------------------------- 绑定属性: "1|0|0|1|1|1|1|0|0|0|1|1|1|0|0|0|0|0|0|0|" + mode: 3 比如一些UE引擎的游戏或者其他
=============================================================================================
如下:属性表
返回值:
备注:
如果绑定属性 "normal"或者"Normal" 表示窗口前台模式!!!! 直接用的是sendmessage发消息 对于一些普通窗口有效 大概率会被拦截 这个时候请直接使用全局前台模式,具体看下面解析说明
如果之前后台了,当切换到窗口前台会自动解绑后台
绑定属性表: 注意顺序!!
属性值 索引
//dx.mouse.position.lock.api|dx.mouse.position.lock.message
1
//dx.mouse.focus.input.api|dx.mouse.focus.input.message
2
//dx.mouse.clip.lock.api
3
//dx.mouse.input.lock.api
4
//dx.mouse.state.api
5
//dx.mouse.api
6
//dx.mouse.cursor
7
//dx.mouse.raw.input 8
//dx.mouse.input.lock.api2 9
//dx.mouse.input.lock.api3
10
//dx.keypad.input.lock.api 11
//dx.keypad.state.api
12
//dx.keypad.api
13
//dx.keypad.raw.input 14
//dx.public.active.api
15
//dx.public.active.api2
16
//dx.public.input.ime
17
//dx.public.disable.window.show
18
//dx.public.down.cpu 19
//dx.public.focus.api
20
解析说明: 绑定模式 窗口序号 拦截概率 是否调用绑定接口
1.窗口后台模式 如:"1|1|1|1|1|1|1|0|1|1|1|1|1|0|1|0|0|0|0|0|" 窗口序号1-61 极低 需要
1.1.模拟后台键鼠和输入(高级模拟) 坐标是窗口客户区坐标
2.窗口前台模式 如:"normal"或者"Normal" 窗口序号1-61 对于一些保护窗口很大概率 需要
2.1.通过发window消息模拟(普通模拟) 坐标是窗口客户区坐标
3.全局前台模式 如 : 无 窗口序号为-1 极低 不需要
3.1会影响鼠标位置 坐标是屏幕坐标
[TOP]
函数简介
:
暂停/恢复后台绑定
函数原型 :
__int64 __stdcall
HCMKB_PauseBind(__int32 窗口序号,
__int32 bPause = TRUE, __int32 bRetMove =
1);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
[TOP]
函数简介
:
鼠标移动
函数原型 :
__int64 __stdcall HCMKB_MoveTo(__int32 窗口序号, __int32 x,
__int32 y, BOOL 是否模拟鼠标轨迹 = TRUE, __int32 轨迹类型 = -1, __int32
窗口状态 =
-1);
参数定义:
轨迹类型:默认-1 或者1 表示随机轨迹 2表示直线轨迹 3表示直线波动轨迹(过检测强) 可以使用HCMKB_SetRealMouse 设置相关轨迹参数
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
弹起某个键
函数原型
:
__int64 __stdcall HCMKB_KeyUp(__int32 窗口序号, __int32
虚拟键码, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
按下某个键
函数原型 :
__int64 __stdcall HCMKB_KeyDwon(__int32 窗口序号,__int32
虚拟键码, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标左键弹起
函数原型 :
__int64 __stdcall HCMKB_LeftUp(__int32 窗口序号, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标左键按下
函数原型 :
__int64 __stdcall HCMKB_LeftDown(__int32 窗口序号, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标左键点击
函数原型 :
__int64 __stdcall HCMKB_LeftClick(__int32 窗口序号, __int32 延时毫秒 = 50, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标左键双击
函数原型 :
__int64 __stdcall
HCMKB_LeftDoubleClick(__int32 窗口序号,
__int32 延时毫秒 = 50, __int32 窗口状态 = -1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标中键弹起
函数原型
:
__int64 __stdcall HCMKB_MiddleUp(__int32 窗口序号, __int32
窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
鼠标中键按下
函数原型 :
__int64 __stdcall HCMKB_MiddleDown(__int32 窗口序号, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标中键点击
函数原型 :
__int64 __stdcall HCMKB_MiddleClick(__int32 窗口序号, __int32
延时毫秒 = 50, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置
其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
鼠标中键双击
函数原型 :
__int64 __stdcall HCMKB_MiddleDoubleClick(__int32 窗口序号,
__int32 延时毫秒 = 50, __int32 窗口状态 = -1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标右键弹起
函数原型 :
__int64 __stdcall HCMKB_RightUp(__int32 窗口序号, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
鼠标右键按下
函数原型 :
__int64 __stdcall HCMKB_RightDown(__int32 窗口序号, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
鼠标右键点击
函数原型 :
__int64 __stdcall HCMKB_RightClick(__int32 窗口序号, __int32 延时毫秒 = 50, __int32 窗口状态 =
-1);
参数定义 :
延时毫秒:延时毫秒(默认50毫秒)
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
鼠标右键双击
函数原型
:
__int64 __stdcall HCMKB_RightDoubleClick(__int32 窗口序号,
__int32 延时毫秒 = 50, __int32 窗口状态 = -1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
鼠标滚轮向上滚动
函数原型 :
__int64 __stdcall HCMKB_WheelUp(__int32 窗口序号, __int32
窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
调用一次滚轮向上滚动一个单位120
[TOP]
函数简介 :
鼠标滚轮向下滚动
函数原型 :
__int64 __stdcall HCMKB_WheelDown(__int32 窗口序号, __int32
窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
调用一次滚轮向下滚动一个单位120
[TOP]
函数简介 :
按某个键
函数原型 :
__int64 __stdcall HCMKB_KeyPress(__int32 窗口序号, __int32
虚拟键码, __int32 延时毫秒 = 20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介 :
连续按键输入字符串(连续单个按键)
函数原型
:
__int64 __stdcall HCMKB_KeyPressA(__int32 窗口序号, char *
文本, __int32 延时毫秒 = 20, __int32 窗口状态 =
-1);
__int64 __stdcall HCMKB_KeyPressW(__int32 窗口序号, wchar_t * 文本, __int32
延时毫秒 = 20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
/函数简介
:
发送Ascii/unicode字符串 (不同于连续单个按键)
函数原型 :
__int64
__stdcall HCMKB_SendStringA(__int32 窗口序号, char * 文本A, __int32
延时毫秒 = 20, __int32 窗口状态 = -1);
__int64 __stdcall
HCMKB_SendStringW(__int32 窗口序号,
wchar * 文本A, __int32 延时毫秒 = 20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
发送Ascii字符串
函数原型 :
__int64
__stdcall HCMKB_SendString(__int32 窗口序号, char *
文本A, __int32 延时毫秒 =
20, __int32 窗口状态 = -1);
__int64 __stdcall HCMKB_SendString2(__int32 窗口序号, char * 文本A, __int32
延时毫秒 = 20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
发送剪切板字符串内容到窗口
函数原型 :
__int64
__stdcall HCMKB_SendPaste(__int32 窗口序号, void*
发送字节缓冲区, __int32 发送字节大小, __int32 文本类型, __int32 mis =
20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
发送剪切板字符串内容到窗口
函数原型 :
__int64 __stdcall HCMKB_SendPasteEx(__int32 窗口序号,
void* 发送字节缓冲区, __int32 发送字节大小, __int32 文本类型, __int32 bSend =
0, __int32 mis = 20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
无
[TOP]
函数简介
:
发送随机名字,从2个文本(hf.txt 和 he.txt )中各获取一个字
函数原型 :
__int64 __stdcall HCMKB_SendRoundNamePaste(__int32 窗口序号,__int32 bSend
= 0, __int32 mis
= 20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
hf.txt 和
he.txt 放在程序(.exe)同目录下,文件编码为utf-8
随机获取一个姓和一个名组成一个词
[TOP]
函数简介
:
设置剪切板字符串
函数原型 :
__int64
__stdcall HCMKB_SetClipboard(void* 发送字节缓冲区,
__int32 发送字节大小, __int32 文本类型);
参数定义 :
发送字节缓冲区:发送字节缓冲区(字节数据/字符串数据)
返回值:
备注:
该接口无序窗口序号
[TOP]
函数简介 :
获取剪切板字符串
函数原型 :
__int64
__stdcall HCMKB_GetClipboard
(__int32 文本类型);
参数定义 :
返回值:
备注:
无
[TOP]
函数简介
:
发送Ascii字符串,部分游戏需要激活窗口!(可以不用通讯调用)
函数原型 :
__int64
__stdcall HCMKB_SendStringF(__int64 hwnd, char *
文本A, __int32 延时毫秒 =
20, __int32 窗口状态 =
-1);
参数定义 :
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考:HCWIN_SetWindowState的参数值
返回值:
备注:
注意这个属于类似前台但不是存前台,有些游戏需要激活游戏才能输入成功!!!!
[TOP]
函数简介
:
按下发送键码到指定窗口(可以不用通讯调用)
函数原型 :
__int64 __stdcall
HCMKB_SendKeyDownF(__int32 窗口序号,
__int64 hwnd, __int32 虚拟键码, __int32
窗口状态=
0);
参数定义 :
窗口序号:窗口序号 (不需要通讯也可以调用,指定一个大于0的序号就行或者任意一个)
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考: HCWIN_SetWindowState的参数值
返回值:
备注:
注意这个属于类似前台但不是存前台,有些游戏需要激活游戏才能输入成功!!!!
[TOP]
函数简介 :
弹起发送键码到指定窗口(可以不用通讯调用)
函数原型 :
__int64 __stdcall
HCMKB_SendKeyUpF(__int32 窗口序号,
__int64 hwnd, __int32 虚拟键码, __int32
窗口状态=
0);
参数定义 :
窗口序号:窗口序号 (不需要通讯也可以调用,指定一个大于0的序号就行或者任意一个)
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考: HCWIN_SetWindowState的参数值
返回值:
备注:
注意这个属于类似前台但不是存前台,有些游戏需要激活游戏才能输入成功!!!!
[TOP]
函数简介
:
按下并弹起发送键码到指定窗口(可以不用通讯调用)
函数原型 :
__int64 __stdcall
HCMKB_SendKeyPressF(__int32 窗口序号,
__int64 hwnd, __int32 虚拟键码, __int32 延时毫秒 =
20, __int32
窗口状态 = 0);
参数定义 :
窗口序号:窗口序号 (不需要通讯也可以调用,指定一个大于0的序号就行或者任意一个)
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考: HCWIN_SetWindowState的参数值
返回值:
备注:
注意这个属于类似前台但不是存前台,有些游戏需要激活游戏才能输入成功!!!!
[TOP]
函数简介
:
可以清空子窗口的内容(可以不用通讯调用)
函数原型 :
__int64 __stdcall
HCMKB_SendDeleteTextF(__int32
窗口序号__int64 hwnd, __int32
窗口状态=
0);
参数定义 :
窗口序号:窗口序号 (不需要通讯也可以调用,指定一个大于0的序号就行或者任意一个)
窗口状态:-1/0不设置 其他值为操作前窗口设置(值)参考: HCWIN_SetWindowState的参数值
返回值:
备注:
注意这个属于类似前台但不是存前台,有些游戏需要激活游戏才能输入成功!!!!
[TOP]
函数简介
:
设置鼠标轨迹参数(当移动鼠标开启轨迹生效)
函数原型 :
__int64 __stdcall HCMKB_SetRealMouse(__int32 步长 = 30, __int32 步数 = 100,
__int32 每步延迟 = 20, BOOL 开启调试 =
FALSE);
参数定义 :
返回值:
备注:
无
[TOP]
函数简介 :
获取后台/前台鼠标位置
函数原型 :
__int64 __stdcall HCMKB_GetMousePos (__int32
窗口序号);
参数定义 :
窗口序号:窗口序号 特别说明:1.序号为-1表示全局前台 2.如果后台绑定normal,序号不为-1表示窗口前台 3.什么是全局和窗口前台??请看 HCMKB_Bind 下面说明
返回值:
返回值大于等于0:表示XY组成的8字节 低4字节为X 高4字节为Y
备注:
无
[TOP]
以国际服剑灵2M为例
视频演示链接:https://www.bilibili.com/video/BV1BF411r7UW/?spm_id_from=333.999.0.0
PS:最好复制到浏览器打开
效果展示
[TOP]
函数简介 :
打开截图
函数原型:
__int64 __stdcall HCCS_OpenCS(__int32
窗口序号);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介 :
打开截图(和HCCS_CloseCSEx是一组接口)
函数原型:
__int64 __stdcall HCCS_OpenCSEx(__int32 窗口序号, BOOL bNormal, __int32 capType =
0, __int64 hwnd = 0);
参数定义 :
bNormal:是否是通常模式 一般为真(TRUE)就行
hwnd:窗口句柄
返回值 :
备注:
1.前台和后台模式,可以随意切换 不用调用关闭HCCS_CloseCSEx 再开启!!!!!内置处理了
截图模式:
typedef enum
CAPTURETYPE
{
//无
CAPTURETYPE_NONE =
0,//这个不操作
//GDI
CAPTURETYPE_GDI = 1,//这个直接客户端操作 对于浏览器(谷歌等)记得把图像加速关掉
//32
CAPTURETYPE_D3D9_1_x86 =
2,//UE
CAPTURETYPE_D3D9_2_x86 =
3,//U3D
CAPTURETYPE_D3D9_3_x86 =
4,//RGBX
//D3D11
CAPTURETYPE_D3D11_1_x86 =
5,//UE
CAPTURETYPE_D3D11_2_x86 =
6,//U3D
CAPTURETYPE_D3D11_3_x86 = 7,//RGBX D3D11游戏通用
//D3D12
CAPTURETYPE_D3D12_1_x86 =
70,//UE
CAPTURETYPE_D3D12_2_x86 =
71,//U3D
CAPTURETYPE_D3D12_3_x86 = 72,//RGBX D3D12游戏通用
//64
//D3D9
CAPTURETYPE_D3D9_1_x64
= 8,//UE
CAPTURETYPE_D3D9_2_x64 =
9,//U3D
CAPTURETYPE_D3D9_3_x64 = 10,//RGBX D3D9游戏通用
//D3D11
CAPTURETYPE_D3D11_1_x64 =
11,//UE
CAPTURETYPE_D3D11_2_x64 =
12,//U3D
CAPTURETYPE_D3D11_3_x64 = 13,//RGBX D3D11游戏通用
//D3D12
CAPTURETYPE_D3D12_1_x64 =
14,//UE D3D12
CAPTURETYPE_D3D12_2_x64 = 15,//U3D
D3D12
CAPTURETYPE_D3D12_3_x64 = 16,//RGBX D3D12 D3D12游戏通用
//32
CAPTURETYPE_OPENGL_1_x86 =
20,//占位
CAPTURETYPE_OPENGL_2_x86 = 21,// GL_BGRA
模拟器
CAPTURETYPE_OPENGL_3_x86 = 22,// GL_BGRA
模拟器
//64
CAPTURETYPE_OPENGL_1_x64 =
30,//占位
CAPTURETYPE_OPENGL_2_x64 = 31,// GL_BGRA
模拟器
CAPTURETYPE_OPENGL_3_x64 = 32,// GL_BGRA
模拟器
//定制
CAPTURETYPE_D3D9_Steam_x86 = 40,//steam游戏专用
steam游戏专用后台截图x64模式 D3D9 也可以是其他游戏不一定只有steam才能用
CAPTURETYPE_D3D11_Steam_x86 = 41,//steam游戏专用
steam游戏专用后台截图x64模式 D3D9 也可以是其他游戏不一定只有steam才能用
CAPTURETYPE_D3D9_Steam_x64 = 42,//steam游戏专用
steam游戏专用后台截图x64模式 D3D9 也可以是其他游戏不一定只有steam才能用
CAPTURETYPE_D3D11_Steam_x64 = 43,//steam游戏专用
steam游戏专用后台截图x64模式 D3D9 也可以是其他游戏不一定只有steam才能用
//NC模式
CAPTURETYPE_D3D9_NC_x86 =
44,//NC游戏
CAPTURETYPE_D3D11_NC_x86 =
45,//NC游戏
CAPTURETYPE_D3D9_NC_x64 =
46,//NC游戏
CAPTURETYPE_D3D11_NC_x64 =
47,//NC游戏
//
CAPTURETYPE_NORMAL =
50, //这个前台模式
//
CAPTURETYPE_D3D12_Steam_x86 = 60,//steam游戏专用
steam游戏专用后台截图x64模式 D3D9 也可以是其他游戏 不一定只有steam才能用
CAPTURETYPE_D3D12_Steam_x64 = 61,//steam游戏专用
steam游戏专用后台截图x64模式 D3D9 也可以是其他游戏 不一定只有steam才能用
//
CAPTURETYPE_D3D12_NC_x86 = 62,//NC游戏
D3D12
CAPTURETYPE_D3D12_NC_x64 = 63,//NC游戏 D3D12
}CAPTURETYPE;
额外说明:
[TOP]
函数简介 :
关闭截图
函数原型
:
__int64
__stdcall HCCS_CloseCS(__int32
窗口序号);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
关闭截图(和HCCS_OpenCSEx是一组接口)
函数原型 :
__int64 __stdcall HCCS_CloseCSEx(__int32 窗口序号);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
获取截图数据
函数原型:
__int64 __stdcall HCCS_GetCSData(__int32 窗口序号);
参数定义 :
//1字节对齐
//单个数据
#pragma pack(1)
typedef struct
MYA8R8G8B8
{
BYTE m_a;//透明值
BYTE m_r;//红色
BYTE
m_g;//绿色
BYTE
m_b;//蓝色
MYA8R8G8B8()
{
m_a = 0; m_r = 0; m_g =
0; m_b = 0;
}
}MYA8R8G8B8;
#pragma
pack()
返回值 :
备注:
json:{"error":0,"ret":[{"bRet":AAA,"addr":XXX,"eleSize":YYY,"len":ZZZ,"w":1222,"h":699}]}
AAA:调用接口返回值 XXX:图片二进制数据首地址 YYY:MYA8R8G8B8结构体数量 ZZZ:字节大小(图片数据) w:宽度
h:高度
注意:拿到图片地址数据XXX使用后
记得释放(HCCS_FreeArray)
[TOP]
函数简介 :
打开查看器
函数原型
:
__int64 __stdcall HCCS_OpenCSFinder(__int32 窗口序号, __int32 X, __int32 Y,
__int32 宽度, __int32 高度);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介 :
关闭查看器
函数原型:
__int64 __stdcall HCCS_CloseCSFinder(__int32 窗口序号, __int32 pid);
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介 :
截图数据并保存为BMP图片文件
函数原型:
__int64 __stdcall HCCS_CaptureBmp(__int32 窗口序号, char*BMP文件路径, BOOL 是否打开 =
FALSE);
参数定义:
返回值 :
备注:
json:
{"error":0,"ret":[{"bRet":AAA,"w":1222,"h":699}]}
[TOP]
函数简介
:
获取当前截图后的BMP数据
函数原型:
__int64
__stdcall HCCS_GetCaptureBmpData(__int32
窗口序号);
参数定义 :
返回值 :
备注:
json:
{"error":0,"ret":[{"bRet":1,"addr":XXX,"eleSize":YYY,"allLen":ZZZ,"w":1222,"h":699}]}
XXX是图片二进制数据首地址
YYY是MYA8R8G8B8结构体数量
ZZZ:BMP图片数据大小 (真实的BMP图片数据:54+像素数据)
[TOP]
函数简介 :
获取当前截图后的BMP数据(指定范围)
函数原型:
__int64 __stdcall HCCS_GetCaptureBmpRangeData(__int32 窗口序号, __int32 X,
__int32 Y, __int32 宽度, __int32 高度);
参数定义 :
X矩形范围左上角x
Y:矩形范围左上角y
宽度:矩形范围宽度
高度:矩形范围高度
返回值 :
备注:
json:
{"error":0,"ret":[{"bRet":1,"addr":XXX,"eleSize":YYY,"allLen":ZZZ,"w":1222,"h":699}]}
XXX是图片二进制数据首地址
YYY是MYA8R8G8B8结构体数量
ZZZ:BMP图片数据大小 (真实的BMP图片数据:54+像素数据)
[TOP]
函数简介:
释放内存
函数原型:
__int64
__stdcall HCCS_FreeArray(void*
addr);
参数定义 :
返回值 :
备注:
释放内存 该内存是使用 new[] 申请的内存
[TOP]
函数简介
:
释放内存,内存池操作释放内存
函数原型:
__int64 __stdcall HCCS_FreeMemPool(__int32 窗口序号,void* addr);
参数定义 :
窗口序号 :index
返回值 :
备注:
我们获取了截图数据不需要了都需要调用这个接口来释放掉,防止内存泄露
注意:该接口是释放【使用内存池申请的内存地址】的地址,与HCCS_FreeArray不一样
那个窗口序号返回申请的地址 就用那个窗口序号释放
[TOP]
函数简介 :
后台截图缓存获取失败判断接口
函数原型:
__int64
__stdcall HCCS_IsCaptureValid(__int64
ret);
参数定义 :
返回值 :
返回1表示:后台截图数据获取失败,进一步表示不是识别找不到,需要开发者再次调用相关识别接口
返回0表示:识别没有找到
备注:
可以自行加一个容错次数,再这个次数内多次识别,直到找到
从而避免由于后台截图数据获取失败的原因而导致误认为识别接口找不到相关图或者字
[TOP]
启动参数打开案例:
进程名:hdfinder.exe
类名:HDFinder382856600
C:\\Debug\\csfinder.exe" -index -x -y -w -h
1字节对齐
#pragma pack(1)
typedef struct MYA8R8G8B8
{
BYTE m_a;//透明值
BYTE
m_r;//红色
BYTE m_g;//绿色
BYTE m_b;//蓝色
MYA8R8G8B8()
{
m_a = 0; m_r = 0; m_g = 0; m_b = 0;
}
}MYA8R8G8B8;
#pragma pack()
[TOP]
[TOP]
函数简介:
打开黑屏
函数原型
:
__int64 __stdcall HC_OpenBS(__int32 窗口序号, __int32 minIndex = 0, __int32
maxIndex = 0, BOOL 是否主线程调用 =
FALSE);
参数定义:
maxIndex:最大模型序号
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
无
[TOP]
函数简介
:
设置模型序号的过滤范围
函数原型
:
__int64 __stdcall HC_SetBs(__int32 窗口序号, __int32 minIndex = 0, __int32
maxIndex = 0);
参数定义:
maxIndex:最大模型序号
返回值:
备注:
可以适当调整最小或者最大的序号来过滤模型,来实现黑屏,同时还支持图色识别
[TOP]
函数简介:
关闭黑屏
函数原型
:
__int64 __stdcall HC_CloseBS(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义:
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
无
[TOP]
[TOP]
函数简介
:
打开CPU优化
函数原型 :
__int64 __stdcall HC_OpenCPU(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义:
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
无
[TOP]
函数简介 :
设置帧数(绑定dx.public.down.cpu 后台属性有效)
函数原型 :
__int64 __stdcall HC_SetFPS(__int32 窗口序号, __int32 iFPS =
0);
参数定义:
iFPS:帧数 (大于120表示关闭优化,可以用来在绑定后台的情况下关闭优化)
返回值:
备注:
并非实际的帧数,这里只是一个参考值,内置默认为30
动态优化调试帧数的(自动计算帧率)
[TOP]
函数简介
:
关闭CPU优化
函数原型
:
__int64 __stdcall HC_CloseCPU(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义:
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
无
[TOP]
函数简介
:
排序安装过插件的进程
函数原型 :
__int64 __stdcall
HCWIN_SortWindows(__int32 offsetW, __int32 offsetH,
__int32 width, __int32 height);
参数定义:
offsertY:垂直偏移距离(2个相邻窗口的左上角的垂直距离)
width:窗口宽度
height:窗口高度
返回值:
备注:
安装过插件的经常意思表示:
1.通讯过的窗口序号的对应的进程PID(未被第二次初始化序号HCInject_Init)
2.卸载进程环境不会影响绑定过的进程排序(不能调用始化序号HCInject_Init的前提下,也就是可以重连的情况下)
3.HCInject_Init这个接口一旦调用,就会取消所有关联(意味着不能重连了),从而影响当前绑定的窗口PID,意味着新窗口即将打开
[TOP]
函数简介
:
伪装进程(防止检查到实际的进程存在)
函数原型 :
__int64 __stdcall
HCWIN_CamouflageProcess(char* runName, char*
targetPath, __int32 type);
参数定义:
返回值:
备注:
无
案例:
把注入器伪装成了hd.exe
[TOP]
函数简介
:
设置或者操作窗口状态
函数原型 :
__int64 __stdcall HCWIN_SetWindowState(__int64 hwnd, __int32
type);
参数定义:
type:窗口状态类型(1-16)
激活指定窗口 (1) 显示最小化窗口,并不激活 (2) 显示最小化窗口,同时激活窗口 (3) 显示最大化窗口,同时激活窗口 (4)
显示窗口,但是不激活 (5) 隐藏窗口 (6) 显示窗口,并激活 (7) 置顶窗口 (8) 取消置顶窗口 (9) 禁止窗口 (10) 取消禁止窗口
(11)
恢复并激活窗口 (12) 强制结束窗口所在的进程 (13) 闪烁窗口 (14) 窗口获取输入焦点
(15)发消息关闭指定窗口,不是强制关闭 (16)强制刷新指定窗口(17)
强制刷新桌面窗口(18)
强制刷新桌面窗口+任务栏(19)
返回值:
备注:
无
[TOP]
函数简介 :
设置窗口大小
函数原型 :
__int64 __stdcall HCWIN_SetWindowSize(__int64
hwnd,__int32
width, __int32 hight, BOOL bCenter =
FALSE);
参数定义:
返回值:
备注:
窗口居中会改变窗口位置
[TOP]
函数简介 :
移动窗口
函数原型 :
__int64 __stdcall HCWIN_MoveWindow(__int64
hwnd
, __int32 x, __int32
y);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
目标窗口句柄/目标进程是否64位
函数原型 :
__int64 __stdcall
HCWIN_IsWow64Process(__int64
hwnd, __int32 pid = 0);
参数定义:
返回值:
备注:
窗口句柄或者PID任意指定一个就行
如果2个都指定则PID用于检测
[TOP]
函数简介
:
获取目标窗口标题
函数原型 :
__int64 __stdcall HCWIN_GetWindowTitle(__int64
hwnd);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
获取目标窗口句柄的线程ID
函数原型 :
__int64 __stdcall HCWIN_GetWindowThreadProcessId(__int64
hwnd);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
获取目标窗口句柄的进程ID
函数原型 :
__int64 __stdcall HCWIN_GetWindowProcessId(__int64
hwnd);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
获取目标窗口句柄的路径
函数原型 :
__int64 __stdcall HCWIN_GetWindowProcessPath(__int64
hwnd);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
获取窗口在屏幕上的位置
函数原型 :
__int64 __stdcall HCWIN_GetWindowRect(__int64
hwnd, void *pRect = NULL);
参数定义:
pRect:指向RECT结构体地址(供C/C++调用)这个参数可以直接获取值,如果是其他语言可以HCEnv_GetRetJson获取字符串
返回值:
备注:
返回字符串:
left|top|rifght|bottom|
RECT结构体:
typedef struct
tagRECT
{
LONG
left;
LONG top;
LONG right;
LONG
bottom;
} RECT,
*PRECT;
[TOP]
函数简介
:
获取目标窗口句柄的窗口类名
函数原型 :
__int64 __stdcall HCWIN_GetWindowClass(__int64
hwnd);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
获取目标窗口句柄的窗口状态
函数原型
:
__int64 __stdcall
HCWIN_GetWindowState(__int64
hwnd, __int32 flag);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
获取特殊窗口 桌面 Shell_TrayWnd
函数原型 :
__int64 __stdcall HCWIN_GetSpecialWindow(__int32
flag);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
获取目标窗口句柄的关联窗口句柄
函数原型 :
__int64 __stdcall HCWIN_GetWindow(__int64 hwnd, __int32
flag)
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
获取当前鼠标下指向的窗口句柄
函数原型 :
__int64 __stdcall HCWIN_GetMousePointWindow()
参数定义 :
返回值:
备注:
无
[TOP]
函数简介
:
获取指定坐标指向的窗口句柄
函数原型 :
__int64 __stdcall HCWIN_GetPointWindow(__int32 x, __int32 y);
参数定义 :
y:屏幕坐标y
返回值:
备注:
无
[TOP]
函数简介
:
获取顶层活动窗口,可以获取到按键自带插件无法获取到的句柄
函数原型 :
__int64
__stdcall HCWIN_GetForegroundWindow();
参数定义 :
返回值:
备注:
无
[TOP]
函数简介 :
获取顶层活动窗口中具有输入焦点的窗口句柄
函数原型 :
__int64
__stdcall HCWIN_GetForegroundFocus();
参数定义 :
返回值 :
备注:
无
[TOP]
函数简介
:
设置输入焦点到窗口
函数原型 :
__int64
__stdcall HCWIN_SetForegroundFocus(__int64
hwnd);
参数定义 :
hwnd:窗口句柄
返回值 :
备注:
无
[TOP]
函数简介
:
获取窗口客户区域的宽度和高度
函数原型 :
__int64
__stdcall HCWIN_GetClientSize(__int64
hwnd, void *pW = NULL, void
*pH = NULL);
参数定义 :
hwnd:窗口句柄
pW:指向4字节宽度整数int地址(供C/C++使用),其他语言调用HCEnv_GetRetJson获取字符串并自行解析
pH:指向4字节高度整数int地址(供C/C++使用),其他语言调用HCEnv_GetRetJson获取字符串并自行解析
返回值 :
备注:
返回字符串:
w|h|
[TOP]
函数简介 :
获取窗口客户区域在屏幕上的位置
函数原型 :
__int64
__stdcall HCWIN_GetClientRectInWindow(__int64
hwnd, void
*pRect = NULL);
参数定义 :
pRect:指向RECT结构体地址(供C/C++调用)这个参数可以直接获取值,如果是其他语言可以
HCEnv_GetRetJson获取字符串
返回值 :
备注:
返回字符串:
left|top|rifght|bottom|
RECT结构体:
typedef struct
tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT,
*PRECT;
[TOP]
函数简介 :
查找符合类名或者标题名的顶层可见窗口,如果指定了parent,则在parent的第一层子窗口中查找
函数原型 :
__int64
__stdcall HCWIN_FindWindowEx(__int64
parentHwnd, char* className, char* title, BOOL
bType);
参数定义 :
title:窗口标题(不指定为NULL/0)
bType:真/1 为模糊匹配 假/0 为完全匹配
返回值:
备注:
无
[TOP]
函数简介 :
查找顶层窗口句柄,父窗口句柄为NULL
函数原型 :
__int64
__stdcall HCWIN_FindTopWindow(char* className,
char* title, BOOL bType);
参数定义 :
title:窗口标题(不指定为NULL/0/“”)
bType:真/1 为模糊匹配 假/0 为完全匹配
返回值:
备注:
无
[TOP]
函数简介
:
根据指定进程以及其它条件,枚举系统中符合条件的窗口
函数原型 :
__int64
__stdcall HCWIN_EnumWindowByProcess(char*
processName, char* className, char* title, __int32 filter, BOOL
bType);
参数定义 :
processName:进程名(如果是完全匹配要加.exe,如果是模糊匹配自行判断)
title:窗口标题(不指定为NULL/0)
filter: 1标题 2类名 4第一个PID 8检测是否无父窗口 16检查窗口句柄是否有效 32检索多PID 多个标识可以用| 累加
bType:真/1 为模糊匹配 假/0 为完全匹配
返回值:
0表示未找到
备注:
单PID返回字符串:
hwnd
多PID返回字符串: 根据创建时间排序过的
hwnd1|hwnd2|hwnd3|
[TOP]
函数简介 :
根据指定进程pid以及其它条件,枚举系统中符合条件的窗口,可以枚举到按键自带的无法枚举到的窗口
函数原型 :
__int64
__stdcall HCWIN_EnumWindowByProcessId(__int32
pid, char* className, char* title, __int32 filter, BOOL bType);
参数定义 :
title:窗口标题(不指定为NULL/0)
filter: 1标题 2类名 8检测是否无父窗口 16检查窗口句柄是否有效 多个标识可以用| 累加
bType:真/1 为模糊匹配 假/0 为完全匹配
返回值:
0表示未找到
1表示找到 结果存在返回json字符串
备注:
单PID返回字符串:
hwnd
[TOP]
函数简介
:
根据指定进程名,枚举系统中符合条件的进程PID
函数原型 :
__int64
__stdcall HCWIN_EnumProcess(char* processName,
BOOL bType);
参数定义 :
bType:真/1 为模糊匹配 假/0 为完全匹配
返回值:
0表示未找到
备注:
返回字符串:
pid1|pid2|pid3|
[TOP]
函数简介
:
根据指定条件,枚举系统中符合条件的窗口,可以枚举到按键自带的无法枚举到的窗口
函数原型 :
__int64 __stdcall HCWIN_EnumWindow(__int64
parentHwnd, char* className, char* title, __int32 filter, BOOL
bType);
参数定义 :
parentHwnd:窗口的父窗口句柄(可以不指定为NULL)
title:窗口标题(不指定为NULL/0)
filter: 1标题 2类名 4检测父窗口是否是指定 8检测是否无父窗口 16检查窗口句柄是否有效 多个标识可以用| 累加
bType:真/1 为模糊匹配 假/0 为完全匹配
返回值:
0表示未找到
备注:
多句柄返回字符串:
hwnd1|hwnd2|hwnd3|
[TOP]
函数简介
:
[TOP]
函数简介
:
[TOP]
函数简介
:
[TOP]
函数简介 :
[TOP]
函数简介 :
设置当前系统的UAC(用户控制)开关
函数原型 :
__int64 __stdcall
HCSYS_SetUAC(__int32
bEnable);
参数定义:
返回值:
备注:
无
[TOP]
函数简介
:
[TOP]
函数简介
:
在随机范围内延迟
函数原型 :
__int64 __stdcall HCSYS_DelayEx(__int32 最小毫秒, __int32
最大毫秒);
参数定义:
返回值:
备注:
不会堵塞主线程
[TOP]
函数简介 :
关闭系统
函数原型 :
__int64 __stdcall
HCSYS_ExitSys
(__int32 type);
参数定义:
返回值:
备注:
无
[TOP]
函数简介 :
[TOP]
函数简介
:
[TOP]
函数简介 :
恢复系统上次的修改
函数原型 :
__int64 __stdcall
HCSYS_ResumeSystemModify();
参数定义:
无
返回值:
备注:
如果中控软件运行的时候修改了系统设置
那么这个最好在中控程序退出的时候调用
[TOP]
函数简介
:
设置当前的电源设置(禁止关闭显示器,禁止关闭硬盘,禁止睡眠和待机)
函数原型 :
__int64 __stdcall HCSYS_DisableCloseDisplayAndSleep();
参数定义:
无
返回值:
备注:
无
[TOP]
函数简介
:
获取路径
函数原型 :
__int64 __stdcall HCSYS_GetDir (__int32
type);
参数定义:
type:当前路径(0) system32路径(1) windows所在路径(2) 临时目录路径(3) 当前进程(exe)所在的路径(4)
返回值:
备注:
无
[TOP]
函数简介 :
[TOP]
函数简介
:
[TOP]
函数简介 :
获取指定进程的CPU使用率
函数原型 :
__int64 __stdcall
HCSYS_GetCpuUsageByPid(__int32
pid);
参数定义 :
pid:进程PID
返回值:
大于0表示:使用率百分比
备注:
返回值是整数百分比
返回字符串字符串是(含小数百分比)
[TOP]
函数简介
:
获取指定进程的内存使用率
函数原型 :
__int64 __stdcall HCSYS_GetMemoryUsageByPid(__int32 pid);
参数定义 :
无
返回值:
大于0表示:使用率百分比
备注:
无
[TOP]
函数简介 :
获取磁盘序列号
函数原型
:
__int64 __stdcall HCSYS_GetDiskSerial (__int32
index);
参数定义:
index:磁盘序号
返回值:
备注:
进程要有管理员权限才能获取成功
[TOP]
函数简介
:
[TOP]
函数简介 :
[TOP]
函数简介 :
运行指定路径下的exe
函数原型 :
__int64 __stdcall HCSYS_RunApp(char* path, long
type);
参数定义:
path:exe路径
type:返回值类型 进程ID(0) 线程ID(1) 进程句柄(2) 线程句柄(3)
返回值:
备注:
这个不支持启动参数
[TOP]
函数简介 :
获取CMD命令形式的打开进程并获取返回输出
函数原型 :
__int64 __stdcall HCSYS_RunAppGetRet(char* cmdApp, BOOL bShowCrol, BOOL
bWait);
参数定义:
cmdApp: 带exe+启动参数 如:"\"J:\\HMADG\\HMad\\x64\\Release\\GoogleAuthy.exe\" DN7BNCWGVYBJHC677AYLLC3EFZEU2VIP"
bShowCrol: 是否显示进程窗口
Bwait:是否等待进程结束返回 1. 真 会堵塞直到进程关闭(为了获取输出字符串) 2.假 不会堵塞同时获取不到输出字符串
返回值:
成功返回:PID 和 返回json
失败返回:查看返回值表HD返回值表
备注:
[TOP]
函数简介
:
运行指定路径下的exe 这个支持启动参数
函数原型 :
__int64 __stdcall
HCSYS_RunAppEx(char* path, char* appName, char*
lparam, __int32 flag, long type);
参数定义:
path:exe路径
appName:exe名字
lparam:启动参数
flag:挂起状态打开(4),直接打开运行(0)
type:返回值类型 进程ID(0) 线程ID(1) 进程句柄(2) 线程句柄(3)
返回值:
备注:
这个支持启动参数
[TOP]
函数简介
:
运行指定路径下的exe (HCSYS_RunAppEx的扩展版本) 这个支持启动参数同时指定了当前进程的路径
函数原型 :
__int64 __stdcall HCSYS_RunAppExxxx(char* path, char* appName, char*
lparam, __int32 flag, long type);
参数定义:
path:exe路径
appName:exe名字
lparam:启动参数
flag:挂起状态打开(4),直接打开运行(0)
type:返回值类型 进程ID(0) 线程ID(1) 进程句柄(2) 线程句柄(3)
返回值:
备注:
这个支持启动参数
[TOP]
函数简介
:
[TOP]
函数简介 :
[TOP]
函数简介 :
[TOP]
函数简介
:
获取机器码(包含网卡)
函数原型 :
__int64 __stdcall HCSYS_GetMachineCode
();
参数定义:
无
返回值:
返回成功 信息存json中
备注:
无
[TOP]
函数简介
:
[TOP]
函数简介 :
[TOP]
函数简介 :
获取网络时间(指定服务器IP获取)
函数原型 :
__int64 __stdcall HCSYS_GetNetTimeByIp (char*
ip);
参数定义 :
ip:ip字符串(如:127.0.0.1)
返回值:
备注:
北京时间
[TOP]
函数简介 :
获取系统版本
函数原型
:
__int64 __stdcall HCSYS_GetSystemBuildNumber();
参数定义 :
无
返回值:
大于0表示具体版本号
备注:
无
[TOP]
函数简介
:
获取系统类型
函数原型 :
__int64 __stdcall HCSYS_GetSystemType();
参数定义 :
无
返回值:
大于0表示具体版本:
win95/98/me/nt4.0 (1)
xp/2000 (2)
2003/2003 R2/xp-64 (3)
win7/2008 R2 (4)
vista/2008 (5)
win8/2012 (6)
win8.1/2012 R2 (7)
win10/2016 TP/win11 (8)
win11 (9)
备注:
无
[TOP]
函数简介 :
[TOP]
函数简介 :
[TOP]
函数简介 :
是否支持vt
函数原型 :
__int64 __stdcall HCSYS_IsSurrpotVt();
参数定义 :
无
返回值:
备注:
可以在Bios中开启vt,如果不支持就没办法了
[TOP]
函数简介 :
获取屏幕的色深(24/32之类的)
函数原型 :
__int64 __stdcall HCSYS_GetScreenPixelDepth();
参数定义 :
无
返回值:
备注:
无
[TOP]
函数简介
:
设置屏幕的色深
函数原型 :
__int64 __stdcall HCSYS_SetScreenPixelDepth(__int32
dmBitsPerPel);
参数定义 :
dmBitsPerPel:像素深度值 (24/32之类的)
返回值:
备注:
无
[TOP]
函数简介 :
[TOP]
函数简介
:
[TOP]
函数简介 :
设置屏幕分辨率
函数原型 :
__int64 __stdcall HCSYS_SetScreen(__int32 width, __int32
height);
参数定义 :
width:宽度
heght:高度
返回值:
备注:
无
[TOP]
函数简介 :
获取CMD命令返回值(字符串)
函数原型
:
__int64 __stdcall HCSYS_GetCmdRet(char*
cmd);
参数定义 :
cmd:cmd命令字符串
返回值:
备注:
无
[TOP]
[TOP]
函数简介
:
添加自定义组件
函数原型
:
__int64 __stdcall HCModule_AddComponent(__int32 窗口序号,
char*账号, char*密码, char * 组件绝对路径, __int64 rcx, __int64 rdx, __int64 r8, __int64
r9, __int64 l5, __int64 l6, __int64 addType =
-1, BOOL 是否自动初始化 = TRUE, BOOL 是否主线程调用 =
FALSE);
__int64 __stdcall HCModule_AddComponent(__int32 窗口序号, char*账号, char*密码, char * 组件绝对路径, __int64 l1, __int64 l2, __int64 l3, __int64 l4, __int64 l5, __int64 l6, __int64 addType = -1, BOOL 是否自动初始化 = TRUE, BOOL 是否主线程调用 = FALSE);
参数定义:
rcx-l1:CALL参数 第一个参数
rdx-l2:CALL参数 第二个参数
r8-l3:CALL参数 第三个参数
r9-l4:CALL参数 第四个参数
l5:CALL参数 第五个参数
l6:CALL参数 第六个参数
addType:添加方式 -1默认或者1无痕(不可卸载) 2普通加载(可卸载)
是否自动初始化:是否自动调用初始化接口(HDDataInit)并传递rcx-l6等6个参数
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程HC_HookMainThread
返回值:
备注:
自定义模块需要导入包并来实现接口绑定
[TOP]
函数简介
:
卸载指定插件
函数原型 :
__int64 __stdcall
HCModule_DeleteComponent(__int32
窗口序号, char * 组件名, BOOL 是否主线程调用 =
FALSE);
参数定义:
组件名:dll的文件名(不包含后缀.dll)
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
自定义模块需要导入包并来实现接口绑定
[TOP]
函数简介
:
调用自定义组件中的接口
函数原型
:
__int64 __stdcall HCModule_CALL(__int32 窗口序号, char * 组件名, char *函数名字, __int64
rcx, __int64 rdx, __int64 r8, __int64 r9, __int64 l5, __int64 l6, BOOL
是否主线程调用=FALSE);
__int64 __stdcall HCModule_CALL(__int32 窗口序号, char * 组件名, char *函数名字, __int64 l1, __int64 l2, __int64 l3, __int64 l4, __int64 l5, __int64 l6, BOOL 是否主线程调用=FALSE);
参数定义:
rcx-l1:CALL参数 第一个参数
rdx-l2:CALL参数 第二个参数
r8-l3:CALL参数 第三个参数
r9-l4:CALL参数 第四个参数
l5:CALL参数 第五个参数
l6:CALL参数 第六个参数
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
自定义模块需要导入包并来实现接口绑定
[TOP]
函数简介 :
调用自定义组件中的接口(可传递任意参数类型)
函数原型 :
__int64 __stdcall HCModule_CALLEx (__int32 窗口序号, char * 组件名,
char *函数名字, __int64 rcx, __int64 rdx, __int64 r8, __int64 r9, __int64 l5, __int64
l6, char* buffer, int bufferSize, BOOL
是否主线程调用=
FALSE);
__int64 __stdcall HCModule_CALLEx(__int32 窗口序号, char * 组件名, char *函数名字, __int64 l1 , __int64 l2, __int64 l3, __int64 l4, __int64 l5, __int64 l6, char* buffer, int bufferSize, BOOL 是否主线程调用 = FALSE);
参数定义:
rcx-l1:CALL参数 第一个参数
rdx-l2:CALL参数 第二个参数
r8-l3:CALL参数 第三个参数
r9-l4:CALL参数 第四个参数
l5:CALL参数 第五个参数
l6:CALL参数 第六个参数
buffer:缓冲区地址
是否主线程调用:是否主线程调用这个CALL,需要挂接主线程
返回值:
备注:
自定义模块需要导入包并来实现接口绑定
注意:传递的buffer字符串在自定义插件接口
typedef HDComRet(__stdcall *HDComFunType)(__int64 retStrAddr, __int64 rcx, __int64 rdx, __int64 r8, __int64 r9, __int64 l5, __int64 l6);
第一个参数retStrAddr作为字符串首地址(char*)能拿到
如:
C++代码演示:
char* info = (char*)retStrAddr;
[TOP]
#pragma pack(8)//设置默认对齐数为8
//HD返回值类型
typedef enum HDComRetType
{
HDComRetType_整数 = 0,
HDComRetType_长整数 =
0,
HDComRetType_双浮点数,
HDComRetType_Json
}HDComRetType;
//HD组件接口返回值
typedef struct HDComRet
{
HDComRetType
m_type;
HDValue m_iValue;
char
*ToJson();
HDComRet(HDComRetType type, HDValue
value);
HDComRet(HDComRetType type, __int32
value);
HDComRet(HDComRetType type, __int64
value);
HDComRet(HDComRetType type, double
value);
HDComRet(HDComRetType type, char*
value);
}HDComRet;
#ifdef _WIN64
//接口类型 X64
typedef HDComRet(__stdcall *HDComFunType)(__int64
retStrAddr, __int64 rcx, __int64 rdx, __int64 r8, __int64 r9, __int64 l5,
__int64 l6);//接口函数
typedef HDComRet(__stdcall *HDDataInitType)(const
char* pAccount, const char* pPassword, __int64 rcx, __int64 rdx, __int64 r8,
__int64 r9, __int64 l5, __int64 l6);
#else
//接口类型
X86
typedef HDComRetType(__stdcall *HDComFunType)(__int32
retStrAddr, __int32 lparam1, __int32 lparam2, __int32 lparam3, __int32 lparam4,
__int32 lparam5, __int32 lparam6);//接口函数
typedef HDComRetType(__stdcall
*HDDataInitType)(const char* pAccount, const char* pPassword, __int32
retStrAddr, __int32 lparam1, __int32 lparam2, __int32 lparam3, __int32 lparam4,
__int32 lparam5, __int32 lparam6);
#endif //
__int64
#pragma
pack()
[TOP]
头文件:
HDLoader.h
静态库:
HDPacker.lib release版本
HDPackerd.lib debug版本
[TOP]
函数简介 :
加载组件
函数原型 :
__int64 __stdcall HCCOM_Load(char * 组件名, __int32 组件索引,
__int32 timeOutMs =
300000);
参数定义:
组件索引:1开始 最多添加2个组件
timeOutMs:当通知接口为堵塞模式下 有效 默认5分钟超时
返回值:
备注:
组件名为当前组件文件的名字(不包含后缀!,如果组件文件无后缀可忽视)
如: hdmad.dll 所对应的 组件名必须是 hdmad
头文件:
HDLoader.h
静态库:
HDPacker.lib release版本
HDPackerd.lib debug版本
[TOP]
函数简介
:
注册自定义组件中的接口
函数原型 :
__int64 __stdcall HCCOM_Register(char * 函数名, __int64
函数地址);
参数定义:
函数地址:函数地址
返回值:
备注:
内置数据初始化函数接口名字:HDDataInit(接口类型是HDComFunType)
HDDataInit初始化函数会在加载组件的时候首次调用以便于完成对相关组件数据的初始化(比如:基地址相关表达式的获取)
如果需要初始化就自己写一个名字叫做HDDataInit的函数,类型为HDComFunType,并调用HCCOM_Register
头文件:
HDLoader.h
静态库:
HDPacker.lib release版本
HDPackerd.lib debug版本
[TOP]
函数简介
:
自定义模块通知目标进程接口
函数原型 :
__int64 __stdcall HCCOM_NotifyToTarget(__int32
插件序号,__int32
callType, BOOL 堵塞 =
FALSE, __int32 超时毫秒 = 10000,
char* 字符串信息1 = NULL, char* 字符串信息2 = NULL, __int64 CALL地址 = 0, __int64 rcx = 0,
__int64 rdx = 0, __int64 r8 = 0, __int64 r9 = 0, __int64 lparam5 = 0, __int64 lparam6
= 0, __int64 lparam7 = 0, __int64
lparam8 = 0, BOOL 是否主线程调用 =
FALSE);
__int64 __stdcall HCCOM_NotifyToTarget(__int32 插件序号,__int32 callType, BOOL 堵塞 = FALSE, __int32 超时毫秒 = 10000, char* 字符串信息1 = NULL, char* 字符串信息2 = NULL, __int32 CALL地址 = 0, __int32 lparam1 = 0, __int32 lparam2 = 0, __int32 lparam3 = 0, __int32 lparam4 = 0, __int32 lparam5 = 0, __int32 lparam6 = 0, __int32 lparam7 = 0, __int32 lparam8 = 0, BOOL 是否主线程调用 = FALSE);
参数定义:
插件序号:自定义插件支持2个 这里分别是1或者2
堵塞:调用接口是否堵塞,等待返回 注意:(这里堵塞如果为真 表示的也不是无限时间,这个时间基于HCCOM_Load的第三个参数{timeOutMs },反之基于本接口的第三个参数{超时毫秒})
超时毫秒:如果堵塞参数为假 这个参数有效
字符串信息1-字符串信息2-CALL地址- rcx-rdx-r8-r9- lparam5- lparam6- lparam7- lparam8 : 用户自定义传递参数 注意参数类型
字符串信息1-字符串信息2-CALL地址- lparam1-lparam2-lparam3-lparam4- lparam5- lparam6- lparam7- lparam8 : 用户自定义传递参数 注意参数类型
是否主线程调用: 真为主线程调用,前期在绑定了主程序,请先使用 HC_HookMainThread
返回值:
备注:
内置数据初始化函数接口名字:HDDataInit(接口类型是HDComFunType)
HDDataInit初始化函数会在加载组件的时候首次调用以便于完成对相关组件数据的初始化(比如:基地址相关表达式的获取)
如果需要初始化就自己写一个名字叫做HDDataInit的函数,类型为HDComFunType,并调用HCCOM_Register
头文件:
HDLoader.h
静态库:
HDPacker.lib release版本
HDPackerd.lib debug版本
[TOP]
函数简介
:
自定义模块通知中控进程接口
函数原型 :
__int64 __stdcall HCCOM_NotifyToController(__int32
插件序号,__int32
callType, BOOL 堵塞 =
FALSE, __int32 超时毫秒 = 10000, char* 字符串信息1 = NULL, char* 字符串信息2 =
NULL, __int64 CALL地址 = 0, __int64 rcx = 0, __int64 rdx = 0, __int64 r8
= 0, __int64 r9 = 0, __int64 lparam5 = 0, __int64 lparam6 = 0, __int64 lparam7 =
0, __int64 lparam8 = 0, BOOL 是否主线程调用 =
FALSE);
__int64 __stdcall HCCOM_NotifyToController(__int32 插件序号,__int32 callType, BOOL 堵塞 = FALSE, __int32 超时毫秒 = 10000, char* 字符串信息1 = NULL, char* 字符串信息2 = NULL, __int32 CALL地址 = 0, __int32 lparam1 = 0, __int32 lparam2 = 0, __int32 lparam3 = 0, __int32 lparam4 = 0, __int32 lparam5 = 0, __int32 lparam6 = 0, __int32 lparam7 = 0, __int32 lparam8 = 0, BOOL 是否主线程调用 = FALSE);
参数定义:
插件序号: 自定义插件支持2个 这里分别是1或者2
堵塞:调用接口是否堵塞,等待返回 注意:(这里堵塞如果为真 表示的也不是无限时间,这个时间基于HCCOM_Load的第三个参数{timeOutMs },反之基于本接口的第三个参数{超时毫秒})
超时毫秒:如果堵塞参数为假 这个参数有效
字符串信息1-字符串信息2-CALL地址- rcx-rdx-r8-r9- lparam5- lparam6- lparam7- lparam8 : 用户自定义传递参数 注意参数类型
字符串信息1-字符串信息2-CALL地址- lparam1-lparam2-lparam3-lparam4- lparam5- lparam6- lparam7- lparam8 : 用户自定义传递参数 注意参数类型
是否主线程调用: 真为主线程调用,前期在绑定了主程序,请先使用 HC_HookMainThread
返回值:
{
__int32
m_callType;//自定义
HDValue m_call;
HDValue
m_rcx;
HDValue m_rdx;
HDValue
m_r8;
HDValue m_r9;
HDValue
m_lparam5;
HDValue m_lparam6;
HDValue
m_lparam7;
HDValue m_lparam8;
HDValue
m_value;
HDValue m_size;
char
m_buffer[MAX_PATH];
char m_buffer2[MAX_PATH];
HDValue*
m_pRetValue;//值 单独
char* m_pRetJson;//字符串
返回
}HDHandleEventInfo;
备注:
内置数据初始化函数接口名字:HDDataInit(接口类型是HDComFunType)
HDDataInit初始化函数会在加载组件的时候首次调用以便于完成对相关组件数据的初始化(比如:基地址相关表达式的获取)
如果需要初始化就自己写一个名字叫做HDDataInit的函数,类型为HDComFunType,并调用HCCOM_Register
头文件:
HDLoader.h
静态库:
HDPacker.lib release版本
HDPackerd.lib debug版本
[TOP]
函数简介
:
获取自定义模块通知中控进程返回的字符串结果
函数原型 :
char* __stdcall HCCOM_GetRetJson(__int32
插件序号);
参数定义:
返回值:
备注:
返回的字符串是自定义的
在中控中自己设置的事件处理回调函数中设置返回
头文件:
HDLoader.h
静态库:
HDPacker.lib release版本
HDPackerd.lib debug版本
[TOP]
函数简介 :
特征码查找
函数原型 :
__int64 __stdcall HCCOM_FindCode(char *特征码字符串地址, __int32
偏移, __int32 次数, __int32 type = 1, char *模块名字 =
NULL);
参数定义
:
特征码字符串地址:特征码字符串地址(支持??)
偏移:正负偏移
次数:找到的第几次 从1开始
type:获取的是(基地址/CALL地址/直接地址/地址中的值) 1为地址 2为基地址 3为CALL 4为地址中的值
模块名字:在指定的模块中搜索,默认为主模块 NULL为默认
返回值 :
备注:
无
[TOP]
状态机模块包含3个子文件:
状态模块 HDStatus.h
状态任务模块 HDStatusTask.h
状态机控制器模块 HDStatusControler.h
https://www.bilibili.com/video/BV1mK411e7Ze/?spm_id_from=333.999.0.0
[TOP]
函数简介
:
获取控制器有且只有一个
函数原型 :
HDStatusControler* _stdcall HCHD_GetHDStatusControler();
参数定义
:
返回值 :
备注:
拿到控制器对象可以获取或者操作其他组件对象
[TOP]
HDStatusTask.h
#pragma
once
#include"windows.h"
#include"winDNS.h"
class
HDStatusTask
{
public:
//提供接口
virtual BOOL
PauseListener() = 0;//暂停就循环等待
virtual BOOL IsStop() =
0;//状态不一致就停止
};
[TOP]
HDStatus.h
#pragma
once
#include"windows.h"
#include"winDNS.h"
//接口
class
HDStatusTask;
class HDStatus
{
public:
//回调接口类型
using
HDSTATUSTASK_FUN_TYPE = void(*)(HDStatus *pHCStatus, HDStatusTask
*pHCStatusTask);
using HDSTATUS_FUN_TYPE = void(*)(HDStatus
*pHCStatus);
public:
//提供
virtual __int64 Start() =
0;//开启
virtual __int64 End() = 0;//会堵塞等待结束
virtual __int64
SwitchStatus(__int32 type) = 0;//切换状态
virtual __int32 IsStart() =
0;//是否开启状态机
virtual __int32 IsEnd() = 0;//是否结束状态机
virtual
__int32 IsRunning() = 0;//是否运行 状态轮询+状态机
virtual __int32 IsPause() =
0;//是否暂停状态机
virtual __int32 GetCurType() = 0;//获取当前状态
virtual __int32 GetIndex() =
0;//获取当前窗口序号
public:
//提供
virtual
__int64 AddStatusTask(__int32 type, HDSTATUSTASK_FUN_TYPE call, LPVOID lparam) =
0;//添加状态任务
virtual __int64 AddStatus(__int32 type, HDSTATUS_FUN_TYPE
call) = 0;//添加状态任务 覆盖
};
[TOP]
HDStatusControler.h
#pragma
once
#include"windows.h"
#include"winDNS.h"
#define
HEARTDLL_EXPORT_HDSTATUS
#ifdef HEARTDLL_EXPORT_HDSTATUS
#define
HEARTDLL_API_HDSTATUS __declspec(dllexport) //导出
#else
#define
HEARTDLL_API_HDSTATUS __declspec(dllimport) //导入
#endif
//接口
class
HDStatus;
class
HDStatusControler
{
public:
//提供
virtual LPVOID
BuilderLparam(__int32 bSize) = 0;//申请内存
构建参数
public:
//提供
virtual HDStatus* AddStatus(__int32
index) = 0;//添加状态机
virtual HDStatus* GetStatus(__int32 index) =
0;//获取状态机
virtual __int64 StartStatus(__int32 index) = 0;//知道窗口序号
开启会检查后不会再开启
virtual __int64 StartStatus(__int32 beginIndex, __int32
endIndex) = 0;//多少开 开启会检查后不会再开启
virtual __int64
AttachStatusCopy(__int32 index, HDStatus*pHCStatus) = 0;//附加状态机到某个窗口 会拷贝一份
参数不会拷贝 如果是同窗口序号直接返回
virtual __int64
AttachStatusCopyAll(HDStatus*pHCStatus) = 0;//附加状态机到所有窗口 会拷贝一份
参数不会拷贝
virtual __int64 PauseStatus(__int32 index) =
0;//暂停
virtual __int64 RecoverStatus(__int32 index) =
0;//恢复
virtual __int64 EndStatus(__int32 index) =
0;//会堵塞
};
//获取状态机控制器有且只有一个
extern "C" HEARTDLL_API_HDSTATUS
HDStatusControler* _stdcall
HCHD_GetHDStatusControler();
[TOP]
[TOP]
函数简介 :
获取控制器有且只有一个
函数原型 :
HDController* _stdcall HCHD_GetHDController();
参数定义 :
返回值 :
备注:
拿到控制器对象可以获取或者操作其他组件对象
[TOP]
[TOP]
==========================================
头文件 ==========================================
#pragma once
#include"windows.h"
#include"winDNS.h"
#include
"string"
using namespace std;
class HDActuator;
//导出类
class
HDTask
{
public:
//回调接口类型
using ACTION_FUN_TYPE =
BOOL(*)(HDActuator * pAttachActuator, HDTask
*pAttachTask);
public:
//检查判断
virtual BOOL IsRunning()=
0;
public:
//参数构建
virtual LPARAM GetLparam() =
0;
virtual LPARAM LparamBuilder(DWORD sizeByte) =
0;
public:
//设置或获取
virtual TCHAR *GetName() =
0;
};
[TOP]
[TOP]
==========================================
头文件
========================================== #pragma
once
#include"windows.h"
#include"winDNS.h"
#include "string"
using
namespace std;
//导出类
class HDTask;
class HLoopController;
class
HDActuator
{
public:
//回调接口类型
using
ACTUATOR_END_FUN_TYPE = void(*)(HDActuator *pHActuator);
using
ACTUATOR_BEGIN_FUN_TYPE = void(*)(HDActuator *pHActuator);
using ACTION_FUN_TYPE =
BOOL(*)(HDActuator * pAttachActuator, HDTask
*pAttachTask);
public:
//添加任务
virtual HDTask* AddTask(TCHAR
*taskName, ACTION_FUN_TYPE fun, LPARAM lparam) =
0;
public:
//开关
virtual BOOL Start() =
0;
virtual DWORD Quit() = 0;
public:
//权限
virtual
BOOL NotifyManualQuit() = 0;
virtual INT
InsertPauseListener() = 0;
virtual BOOL RequestPermission() =
0;
virtual BOOL RequestPermissionTime(DWORD milliSecond) =
0;
virtual BOOL OutPermission() =
0;
public:
//设置或获取
virtual TCHAR *GetName() =
0;
virtual void SetPriorityLevel(DWORD priorityLevel) =
0;
virtual DWORD GetPriorityLevel() = 0;
virtual HDTask*
GetCurrentTask() = 0;
public:
//检查
virtual BOOL IsRunning()
= 0;
virtual BOOL IsPause() = 0;
virtual INT
InsertPauseActuatorsSystemListener() =
0;
public:
//休眠
virtual int LoopSleep(int milSeconed,
HDActuator * pActuator = NULL) = 0;
};
[TOP]
[TOP]
==========================================
头文件
==========================================
#pragma
once
#include"windows.h"
#include"winDNS.h"
#include "string"
using
namespace std;
//导出类
class HDController;
class
HDBurster
{
public:
//接口类型
using BURSTER_END_FUN_TYPE =
void(*)(HDBurster *pHBurster);
using BURSTER_BEGIN_FUN_TYPE =
void(*)(HDBurster *pHBurster);
using BURSTER_FUN_TYPE =
BOOL(*)(HDBurster *pHBurster);
public:
//休眠
virtual int
LoopSleep(int milSeconed, HDBurster * pHBurster = NULL) =
0;
public:
//开关
virtual BOOL Attach(HDController
*pHController, BURSTER_FUN_TYPE fun, BURSTER_BEGIN_FUN_TYPE beginFun = NULL,
BURSTER_END_FUN_TYPE endFun = NULL) = 0;//附加突发器
virtual BOOL Detach() =
0;//卸载 关闭 突发器 堵塞
public:
//暂停或恢复
virtual void Pause() =
0;
virtual void Revert() = 0;
public:
//判断
virtual
BOOL IsPause() = 0;//是否暂停
virtual BOOL IsRunning() = 0
;//是否在运行
virtual BOOL IsRunningSystem() = 0 ;//是否在运行
整个系统
virtual INT InsertPauseListener()=0;////监控的是突发器自己是否暂停 0正常
1被暂停过 2被暂停的时候发现自己循环器结束
virtual INT InsertPauseSystemListener() =
0 ;//监控的是整个系统是否暂停 0正常 1被暂停过 2被暂停的时候发现自己控制器结束
3被暂停的时候发现系统控制器结束
};
[TOP]
[TOP]
==========================================
头文件
==========================================
#pragma
once
#include"windows.h"
#include"winDNS.h"
#include "string"
using
namespace std;
#define HEARTDLL_EXPORT_HDCN
#ifdef
HEARTDLL_EXPORT_HDCN
#define HEARTDLL_API_HDCN __declspec(dllexport)
//导出
#else
#define HEARTDLL_API_HDCN __declspec(dllimport)
//导入
#endif
//导出类
class HDBurster;
class HDActuator;
class
HDController
{
public:
//回调接口类型
using
ACTUATOR_END_FUN_TYPE = void(*)(HDActuator *pHActuator);
using ACTUATOR_BEGIN_FUN_TYPE =
void(*)(HDActuator
*pHActuator);
public:
//添加执行器
virtual HDActuator
*AddActuator(TCHAR *actuatorName, DWORD priorityLevel, ACTUATOR_BEGIN_FUN_TYPE
beginCallBack, ACTUATOR_END_FUN_TYPE endCallBack) =
0;//创建普通执行器
public:
//获取突发器 有且只有一个
virtual HDBurster *
GetBurster() = 0;
virtual HDActuator* GetCurrentActuator() =
0;//获取当前执行器
public:
//检查判断
virtual BOOL IsStart() =
0;//整个系统
virtual BOOL IsPause() = 0;//整个系统
virtual BOOL
IsRunning() = 0;//整个系统
virtual BOOL IsActuatorsSystemPause() =
0;//整个执行器
virtual INT InsertPauseActuatorsSystemListener() = 0;//循环堵塞
整个执行器 0未被暂停 1所有执行器暂停过
2所有执行器暂停的时候发现控制器系统结束了
public:
//开关
virtual BOOL Start() =
0;//1.开始创建线程
virtual void Pause() = 0;//暂停整个 包含了突发器
virtual
void PauseActuators() = 0;//暂停所有执行器 不会修改整个系统的暂停
virtual void Revert() =
0;//恢复整个 包含了突发器
virtual void RevertActuators() = 0;//恢复所有执行器
不会修改整个系统的暂停
virtual BOOL End() = 0; //1.所有执行器关闭 2.关闭自己 线程退出
堵塞
};
[TOP]
[TOP]
[TOP]
函数简介
:
设置HDScrcpy投屏软件根目录,并重启adb相当于重置一下adb环境
函数原型 :
__int64 __stdcall
HCSC_SetPath(char* rootPath);
参数定义:
返回值:
备注:
如:J:\\hdscrcpy2.7\\
默认C:\\hdscrcpy2.7\\
[TOP]
函数简介
:
重置adb服务
函数原型 :
__int64 __stdcall HCSC_ResetAdb(char*
ipInfo);
参数定义:
返回值:
1.当传递NULL空 表示重启ABD 此时接口返回的是是否重启成功 具体看json返回
2.当传递有效IP字符串信息 表示重启ADB的同时会连接对应的IP端口 此时接口返回的是成功连接数量
如果是0表示连接数为0或者重启失败 具体看json返回
备注:
无
[TOP]
函数简介
:
查询当前所有可用的设备
函数原型 :
__int64 __stdcall HCSC_QueryDevices();
参数定义:
返回值:
如:01aa8320032fe731|127.0.0.1:16384|emulator-5556|emulator-5558|
失败json字符串信息:连接失败信息
备注:
无
设备号类型:
1.emulator-5554/127.0.0.1:5009
模拟器Device(-s)
[TOP]
函数简介 :
连接设备并通讯窗口序号(需要先初始化中控和登录!!HCHD_Login HCEnv_Init/HCEnv_InitEx)
函数原型 :
__int64 __stdcall HCSC_ConnectDevices(__int32 winIndex,
char* devicesName, char* cmdLparam, __int32 type, __int32 w, __int32 h,__int32
timeOut);
参数定义:
winIndex:窗口序号
devicesName:设备号
cmdLparam:命令额外参数 注意:一般如果需要另外改变窗口属性,可以参考投屏器命令行指令hdscrcpy命令行解析
,选择添加 如:"--max-fps 15"
设置帧率为15
type:设备号类型 1 -s 模拟器描述 2 -d USB设备号 3 -e Ip:port
w h :宽度
高度
timeOut:超时连接毫秒(一般10秒也就是10000毫秒)
返回值:
成功返回打开的窗口PID
失败返回:查看返回值表HD返回值表
备注:
1.该接口会自动连接指定的设备号
2.同时会进行通讯和重连判断(需要加载HD驱动)
3.无需再通讯
设备号类型:
1.emulator-5554/127.0.0.1:5009
模拟器Device(-s)
[TOP]
使用案例:
E:\e_wokerspace1\scrcpy2.9\hdscrcpy.exe -H -s emulator-5554 --window-width=500 --window-title="hd(1)"
E:\e_wokerspace1\scrcpy2.9\scrcpy.exe -H -s emulator-5554 --auto-bit-rate 2M --max-fps 15
常用命令:
-H
must use hd plugin!
-w,
--stay-awake
Keep the device on
while scrcpy is running, when the device is plugged in.
--window-borderless
Disable
window decorations (display borderless window).
--window-title=text
Set a
custom window title.
--window-x=value
Set the
initial window horizontal
position.
Default is
"auto".
--window-y=value
Set the
initial window vertical position.
Default is "auto".
--window-width=value
Set
the initial window width.
Default
is 0 (automatic).
--window-height=value
Set
the initial window height.
Default
is 0 (automatic).
-n,
--no-control
Disable device
control (mirror the device in read-only).
-N,
--no-playback
Disable video
and audio playback on the computer (equivalent to --no-video-playback
--no-audio-playback).
--no-audio
Disable audio
forwarding.
--no-audio-playback
Disable
audio playback on the computer.
--no-cleanup
By default,
scrcpy removes the server binary from the device and restores the device state
(show touches, stay
awake and
power mode) on exit.
This option
disables this cleanup.
--no-clipboard-autosync
By
default, scrcpy automatically synchronizes the computer clipboard to the device
clipboard before injecting
Ctrl+v,
and the device clipboard to the computer clipboard whenever it
changes.
This option disables this
automatic synchronization.
--no-downsize-on-error
By
default, on MediaCodec error, scrcpy automatically tries again with a lower
definition.
This option disables
this behavior.
--no-key-repeat
Do not
forward repeated key events when a key is held down.
--no-mipmaps
If the renderer is OpenGL 3.0+ or OpenGL ES 2.0+, then mipmaps are automatically
generated to improve
downscaling
quality. This option disables the generation of mipmaps.
--no-mouse-hover
Do not
forward mouse hover (mouse motion without any clicks) events.
--no-power-on
Do not power
on the device on start.
--no-video
Disable video
forwarding.
--no-video-playback
Disable
video playback on the computer.
--no-window
Disable scrcpy
window. Implies --no-video-playback and --no-control.
--orientation=value
Same as --display-orientation=value --record-orientation=value.
[TOP]
scrcpy命令
版本信息
scrcpy -v
**裁剪投屏屏幕(长:宽:偏移x:偏移y)**将某一区域放大
scrcpy -c 800:800:0:0
设置端口
scrcpy -p 27184
帮助
scrcpy --help
缩小尺寸
有时,以较低的清晰度镜像 Android
设备以提高性能很有用。
将宽度和高度限制为某个值(例如 1024):
scrcpy --max-size 1024
scrcpy -m
1024 # short version
更改比特率
默认比特率为 8 Mbps。 要更改视频比特率(例如,更改为 2 Mbps):
scrcpy --bit-rate 2M
scrcpy -b
2M # short version
限制帧率
可以限制捕获帧速率
scrcpy --max-fps 15
自 Android 10 起正式支持此功能,但可能适用于较早版本。
Crop
设备屏幕可能会被裁剪以仅镜像屏幕的一部分。
例如,这对于仅镜像 Oculus Go 的一只眼睛很有用:
scrcpy --crop 1224:1440:0:0 # 1224x1440 at
offset (0,0)
如果还指定了 --max-size,则在裁剪后应用调整大小
锁定视频方向
要锁定镜像的方向:
scrcpy --lock-video-orientation # initial (current)
orientation
scrcpy --lock-video-orientation=0 # natural
orientation
scrcpy --lock-video-orientation=1 # 90°
counterclockwise
scrcpy --lock-video-orientation=2 #
180°
scrcpy
--lock-video-orientation=3 # 90° clockwise
这会影响录屏方向。窗口也可以独立旋转
编码器
有些设备有多个编码器,其中一些可能会导致问题或崩溃。 可以选择不同的编码器:
scrcpy --encoder OMX.qcom.video.encoder.avc
要列出可用的编码器,您可以传递一个无效的编码器名称,错误将给出可用的编码器:
scrcpy --encoder _
录屏
可以在镜像时录制屏幕:
scrcpy --record file.mp4
scrcpy
-r file.mkv
在录音时禁用镜像
scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# interrupt
recording with
Ctrl+C
“跳过的帧”会被记录下来,即使它们不是实时显示的(出于性能原因)。 帧在设备上带有时间戳,因此数据包延迟变化不会影响录制的文件。
v4l2loopback
在 Linux 上,可以将视频流发送到 v4l2 环回设备,以便任何支持 v4l2 的工具都可以像网络摄像头一样打开
Android 设备。
必须安装模块 v4l2loopback:
sudo apt install v4l2loopback-dkms
创建v4l2设备:
sudo modprobe v4l2loopback
这将在/dev/videoN中创建一个新的视频设备,其中N是一个整数(创建多个设备或具有特定id的设备有更多选项)。
列出已启用的设备。
# requires v4l-utils package
v4l2-ctl --list-devices
# simple but might be sufficient
ls /dev/video*
要使用 v4l2 接收器启动 scrcpy:
scrcpy --v4l2-sink=/dev/videoN
scrcpy --v4l2-sink=/dev/videoN
--no-display # disable mirroring window
scrcpy --v4l2-sink=/dev/videoN
-N # short
version
(用设备 ID 替换 N,检查 ls /dev/video*)
启用后,您可以使用支持 v4l2 的工具打开视频流:
ffplay -i /dev/videoN
vlc
v4l2:///dev/videoN # VLC might add some buffering delay
例如,您可以在 OBS 中捕获视频。
缓冲
可以添加缓冲。 这会增加延迟但会减少抖动(请参阅 #2464)。
该选项可用于显示缓冲:
scrcpy --display-buffer=50 # add 50 ms buffering
for display
和
V4L2 接收器:
scrcpy --v4l2-buffer=500 # add 500 ms
buffering for v4l2 sink
无线连接
sccpy通过adb与设备通信,adb可以通过TCP/IP与设备连接:
将设备连接到与电脑相同的Wi-Fi。
在“设置”→“关于话机”→“状态”或执行以下命令获取设备IP地址:
adb shell ip route | awk '{print $9}'
在您的设备上通过 TCP/IP 启用 adb:adb tcpip
5555。
拔下您的设备。
连接到您的设备:adb connect DEVICE_IP:5555(替换 DEVICE_IP)。
像往常一样运行
scrcpy。
降低比特率和定义可能很有用:
scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # short version
多设备
如果 adb devices 中列出了多个设备,则必须指定串行:
scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # short version
如果设备通过 TCP/IP 连接:
scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # short version
您可以为多个设备启动多个sccpy实例。
设备连接时自动启动
您可以使用 AutoAdb:
autoadb scrcpy -s '{}'
SSH隧道
要连接到远程设备,可以将本地 adb 客户端连接到远程 adb
服务器(前提是它们使用相同版本的 adb 协议):
adb kill-server # kill the local adb server on 5037
ssh
-CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# keep this
open
从另一个终端:
scrcpy
为了避免启用远程端口转发,可以强制使用正向连接(请注意-L而不是-R):
adb kill-server # kill the local adb server on 5037
ssh
-CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# keep this
open
从另一个终端:
scrcpy --force-adb-forward
就像无线连接一样,它可能有助于降低质量:
scrcpy -b2M -m800 --max-fps 15
窗口配置标题
默认情况下,窗口标题是设备型号。 它可以改变:
scrcpy --window-title
192.168.10.202:5555
窗口位置和大小
初始窗口的位置和大小可以指定:
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height
600
窗口无边界
要禁用窗口装饰:
scrcpy --window-borderless
窗口总在最前面
要使 scrcpy 窗口始终在最上面:
scrcpy --always-on-top
窗口全屏
该应用程序可以直接全屏启动:
scrcpy --fullscreen
scrcpy
-f # short version
然后可以使用
MOD+f 动态切换全屏。
窗口回转
窗口可以旋转:
scrcpy --rotation 1
#可能的值是:
#
0:不旋转
# 1:逆时针90度
#
2:180度
# 3:顺时针90度
旋转也可以通过
MOD+←(左)和 MOD+→(右)动态改变。
请注意, scrcpy 管理 3 种不同的旋转:
MOD+r
请求设备在纵向和横向之间切换(当前运行的应用程序可能会拒绝,如果它不支持请求的方向)。
–lock-video-orientation
更改镜像方向(从设备发送到计算机的视频的方向)。 这会影响录制。
–rotation(或 MOD+←/MOD+→)仅旋转窗口内容。
这仅影响显示,不影响录音。
其他镜像选项
只读
要禁用控件(可以与设备交互的所有内容:输入键、鼠标事件、拖放文件):
scrcpy --no-control
scrcpy -n
显示
如果有几种显示,可以选择镜像的显示:
scrcpy --display 1
可以通过以下方式检索显示 ID 列表:
adb shell dumpsys display # search "mDisplayId=" in the
output
只有在设备至少运行 Android 10 时才能控制辅助显示器(否则它会以只读方式镜像)。
保持清醒
为了防止设备在插入设备时延迟一段时间后进入睡眠状态:
scrcpy --stay-awake
scrcpy -w
当sccpy关闭时,恢复初始状态。
屏幕关闭
可以使用命令行选项在启动镜像时关闭设备屏幕:
scrcpy --turn-screen-off
scrcpy -S
或者随时按 MOD+o。
要重新打开它,请按
MOD+Shift+o。
在 Android 上,电源按钮始终打开屏幕。 为方便起见,如果通过 scrcpy(通过右键单击或 MOD+p)发送
POWER,它将在一小段延迟后强制关闭屏幕(尽最大努力)。 物理电源按钮仍会导致屏幕打开。
防止设备休眠也很有用:
scrcpy --turn-screen-off --stay-awake
scrcpy
-Sw
显示触摸
对于演示,显示物理接触(在物理设备上)可能很有用。
Android 在开发人员选项中提供了此功能。
Scrcpy
提供了一个选项,可以在启动时启用此功能并在退出时恢复初始值:
scrcpy --show-touches
scrcpy -t
请注意,它仅显示物理触摸(手指在设备上)。
关闭屏幕保护程序
默认情况下,sccpy不会阻止屏幕保护程序在计算机上运行。
禁用:
scrcpy
--disable-screensaver
输入控件
旋转设备的屏幕
按MOD+r切换纵向和横向模式。
注意,只有当前台的应用程序支持请求的方向时,它才会旋转。
复制粘贴
每当 Android 剪贴板发生变化时,它都会自动同步到计算机剪贴板。
任何 Ctrl 快捷键都会转发到设备。 特别是:
Ctrl+c 通常复制
Ctrl+x 通常是剪切
Ctrl+v 通常粘贴(在计算机到设备剪贴板同步之后)
这通常按您的预期工作。
但实际行为取决于活动应用程序。 例如,Termux 在 Ctrl+c 上发送 SIGINT,而 K-9 Mail 会撰写新消息。
在这种情况下复制、剪切和粘贴(但仅在 Android >= 7 上支持):
MOD+c 注入 COPY
MOD+x 注入 CUT
MOD+v 注入
PASTE(在计算机到设备剪贴板同步之后)
此外,MOD+Shift+v 允许将计算机剪贴板文本作为关键事件序列注入。
当组件不接受文本粘贴(例如在 Termux 中)时,这很有用,但它可以破坏非 ASCII 内容。
警告:将计算机剪贴板粘贴到设备(通过 Ctrl+v 或
MOD+v)会将内容复制到设备剪贴板中。 因此,任何 Android 应用程序都可以读取其内容。
您应该避免以这种方式粘贴敏感内容(如密码)。
以编程方式设置设备剪贴板时,某些设备的行为不符合预期。 提供了一个选项 --legacy-paste 来更改
Ctrl+v 和 MOD+v 的行为,以便它们也将计算机剪贴板文本作为关键事件序列注入(与 MOD+Shift+v 的方式相同)。
双指缩放
模拟“双指缩放”:Ctrl+单击并移动。
更准确地说,按住 Ctrl 的同时按下左键单击按钮。 在释放左键单击按钮之前,所有鼠标移动都会相对于屏幕中心缩放和旋转内容(如果应用程序支持)。
具体来说,scrcpy 在屏幕中心反转的位置从“虚拟手指”生成额外的触摸事件。
文本注入首选项
键入文本时会生成两种事件:
按键事件,表示按键被按下或释放;
文本事件,表示已输入文本。
默认情况下,使用按键事件注入字母,以便键盘在游戏中按预期运行(通常用于 WASD 键)。
但这可能会导致问题。 如果遇到此类问题,可以通过以下方式避免:
scrcpy --prefer-text
(但这会破坏游戏中的键盘行为)
键重复
默认情况下,按住某个键会生成重复的键事件。 这可能会在某些游戏中导致性能问题,而这些事件无论如何都是无用的。
为避免转发重复的关键事件:
scrcpy --no-key-repeat
文件拖放
安装 APK
要安装 APK,请将 APK 文件(以 .apk
结尾)拖放到 scrcpy 窗口。
没有视觉反馈,日志打印到控制台。
推送文件到设备
要将文件推送到设备上的 /sdcard/Download/,请将(非 APK)文件拖放到 scrcpy 窗口。
没有视觉反馈,日志打印到控制台。
目标目录可以在启动时更改:
scrcpy --push-target=/sdcard/Movies/
音频转发
scrcpy 不转发音频。 使用
sdcpy。
快捷方式
在下面的列表中,MOD 是快捷方式修饰符。 默认情况下,它是(左)Alt 或(左)Super。
可以使用
--shortcut-mod 更改它。 可能的键有 lctrl、rctrl、lalt、ralt、lsuper 和 rsuper。 例如:
# use RCtrl for shortcuts
scrcpy --shortcut-mod=rctrl
# use either LCtrl+LAlt or LSuper for shortcuts
scrcpy
--shortcut-mod=lctrl+lalt,lsuper
Super 通常是 Windows 或 Cmd 键。
操作 快捷键
切换全屏模式
MOD+f
向左旋转显示 MOD+←(向左)
向右旋转显示
MOD+→(右)
将窗口大小调整为 1:1(像素完美)
MOD+g
调整窗口大小以去除黑边 MOD+w | 双击左键¹
点击
HOME MOD+h | 中键单击
点击返回 MOD+b |
右键单击²
点击APP_SWITCH MOD+s |
第四次点击³
点击MENU(解锁屏幕) MOD+m
点击VOLUME_UP
MOD+↑(向上)
点击VOLUME_DOWN MOD+↓(向下)
点击
POWER MOD+p
开机
右击²
关闭设备屏幕(保持镜像) MOD+o
打开设备屏幕
MOD+Shift+o
旋转设备屏幕 MOD+r
展开通知面板 MOD+n
| 第 5 次点击³
展开设置面板 MOD+n+n | 双击 5
次点击³
折叠面板 MOD+Shift+n
复制到剪贴板⁴
MOD+c
剪切到剪贴板⁴ MOD+x
同步剪贴板和粘贴⁴
MOD+v
注入电脑剪贴板文本 MOD+Shift+v
启用/禁用 FPS
计数器(在标准输出上) MOD+i
双指缩放
Ctrl+单击并移动
¹双击黑色边框将其删除。
²如果屏幕已关闭,则右键单击可打开屏幕,否则按 BACK。
³第 4 和第 5
个鼠标按钮(如果您的鼠标有这些按钮)。
⁴仅适用于 Android >=
7。
重复按键的快捷键是通过释放并再次按下按键来执行的。例如,要执行“展开设置面板”
1.按住 MOD。
2.然后双击 n。
3.最后,释放MOD。
所有 Ctrl+key
快捷键都转发到设备,因此它们由活动应用程序处理
自定义路径
要使用特定的 adb 二进制文件,请在环境变量 ADB 中配置其路径:
ADB=/path/to/adb scrcpy
要覆盖 scrcpy-server 文件的路径,请在 SCCCPY_SERVER_PATH
中配置其路径。
[TOP]
案例:
adb.exe kill-server 关闭adb 服务
adb.exe start-server 开启adb 服务
adb.exe devices 命令可以查看已经连接的设备号
设备类型:1 模拟器设备号 -s
雷电模拟器:
emulator-5556
emulator-5558
emulator 本机器雷电模拟器
5556 端口
MUMU模拟器:
127.0.0.1:16384
127.0.0.1 本机模拟器
16384 端口
其他模拟器同理
[TOP]
案例:
adb.exe kill-server 关闭adb 服务
adb.exe start-server 开启adb 服务
adb.exe devices 命令可以查看已经连接的设备号
设备类型:2 USB设备号 -d
真机/主板机
01aa8320032fe731 设备号
[TOP]
案例:
adb.exe kill-server 关闭adb 服务
adb.exe start-server 开启adb 服务
adb.exe devices 命令可以查看已经连接的设备号
设备类型:3 网络设备号 -e
真机/主板机
192.168.1.1:3828 设备号
192.168.1.1 局域网IP
3828 端口
[TOP]
执行环境句柄解析:
[TOP]
函数简介
:
获取DMA服务器版本号
函数原型 :
__int64 __stdcall
HCVMDMA_GetVersion(__int32
windowsIndex);
参数定义 :
返回值:
备注:
[TOP]
函数简介
:
判断HD插件的DMA接口和DMA服务器接口版本是否一致
函数原型 :
__int64 __stdcall
HCVMDMA_IsVersion(__int32
windowsIndex);
参数定义 :
返回值:
真假版本是否一致
备注:
[TOP]
函数简介
:
开启DMA服务器
函数原型 :
__int64 __stdcall
HCVMDMA_StartServer(char* ip =
"0.0.0.0", int port = 6532, char* serverRootPath =
"");
参数定义 :
如果指定了全路径+进程名 就使用自定义的进程名 如果只指定了路径或者不指定路径
则使用默认值
返回值:
备注:
兼容指定自定义进程名(全路径\\XXXX.exe) XXXX.exe为自定义进程名
不指定进程名表示使用内置进程名(全路径\\HDVMDma.exe
)
不指定路径(当前中控exe根目录\\HDVMDma.exe )
[TOP]
函数简介 :
[TOP]
函数简介
:
服务器是否已经开启
函数原型 :
__int64
__stdcall HCVMDMA_ServerIsStart();
参数定义 :
返回值:
备注:
[TOP]
函数简介
:
初始化并关联虚拟机
函数原型 :
__int64
__stdcall HCVMDMA_Init(__int32 windowsIndex, __int32 vmPid, __int32
timeOut = 10000);
参数定义 :
vmPid:虚拟机PID 进程名是: vmware-vmx.exe
timeOut:超时等待时间
返回值:
备注:
内部会自动调用HCEnv_Load接口,使窗口序号和虚拟机进程关联绑定然后初始化虚拟机相关资源
后续就可以使用该窗口虚拟机去操作对应的虚拟机中的进程
[TOP]
函数简介 :
通过进程名获取PID
函数原型
:
__int64
__stdcall HCVMDMA_GetPid(__int32
windowsIndex, char*
processName);
processName:进程名 指的是虚拟机中的进程
返回值:
备注:
[TOP]
函数简介 :
读地址,仅支持 1 2 4 8 地址大小
函数原型 :
__int64
__stdcall HCVMDMA_Read(__int32 windowsIndex, __int32 targetPid,
__int64 addr, __int32
addrSzie);
targetPid:虚拟机中的目标进程PID
addr:读的地址
addrSize:读的大小,仅支持 1 2 4 8 地址大小
返回值:
备注:
[TOP]
函数简介 :
读单浮点数
函数原型
:
__int64
__stdcall HCVMDMA_ReadFloat(__int32 windowsIndex, __int32 targetPid,
__int64
addr);
targetPid:虚拟机中的目标进程PID
addr:读的地址
返回值:
备注:
[TOP]
函数简介 :
读双浮点数
函数原型
:
__int64
__stdcall HCVMDMA_ReadDouble(__int32
windowsIndex, __int32 targetPid, __int64
addr);
targetPid:虚拟机中的目标进程PID
addr:读的地址
返回值:
备注:
[TOP]
函数简介 :
读字节集
函数原型
:
__int64
__stdcall HCVMDMA_ReadBytes(__int32 windowsIndex,
__int32 targetPid, __int64 addr, BYTE* buffAddr, __int32
readSzie);
targetPid:虚拟机中的目标进程PID
addr:读的地址
buffAddr:传递一个用于存字节集的缓冲区,一定要大于等于readSzie
readSize:读的大小,内部限制最大1024字节,不能超过1024
返回值:
备注:
[TOP]
函数简介 :
写地址,仅支持 1 2 4 8 地址大小
函数原型
:
__int64
__stdcall HCVMDMA_Write(__int32 windowsIndex, __int32 targetPid, __int64 value, __int64
addr, __int32
addrSzie);
targetPid:虚拟机中的目标进程PID
value:待写入的值
addr:写的地址
addrSize:写的大小,仅支持 1 2 4 8 地址大小
返回值:
备注:
[TOP]
函数简介
:
写单浮点数
函数原型 :
__int64
__stdcall HCVMDMA_WriteFloat(__int32
windowsIndex, __int32 targetPid, float value, __int64
addr);
targetPid:虚拟机中的目标进程PID
value:写入的单浮点数值
addr:写的地址
返回值:
备注:
[TOP]
函数简介 :
写双浮点数
函数原型 :
__int64
__stdcall
HCVMDMA_WriteDouble(__int32 windowsIndex, __int32 targetPid, double value, __int64
addr);
targetPid:虚拟机中的目标进程PID
value:写入的双浮点数值
addr:写的地址
返回值:
备注:
[TOP]
函数简介
:
写字节集
函数原型 :
__int64
__stdcall HCVMDMA_WriteBytes(__int32
windowsIndex, __int32 targetPid, __int64 addr, BYTE* buffAddr, __int32
writeSzie);
targetPid:虚拟机中的目标进程PID
addr:写的地址
buffAddr:传递一个用于存字节集的缓冲区,一定要大于等于writeSzie
writeSzie:写的大小,内部限制最大1024字节,不能超过1024
返回值:
备注:
[TOP]
函数简介 :
获取函数地址
函数原型 :
__int64
__stdcall
HCVMDMA_GetProcAddr(__int32
windowsIndex, __int32 targetPid, char* moduleName, char* procName);
targetPid:虚拟机中的目标进程PID
moduleName:模块名字
procName:函数名字
返回值:
备注:
[TOP]
函数简介
:
获取主模块地址
函数原型 :
__int64 __stdcall
HCVMDMA_GetBaseModule(__int32 windowsIndex, __int32
targetPid);
targetPid:虚拟机中的目标进程PID
返回值:
备注:
[TOP]
函数简介
:
获取模块地址
函数原型 :
__int64 __stdcall
HCVMDMA_GetModule(__int32
windowsIndex, __int32 targetPid, char*
moduleName);
targetPid:虚拟机中的目标进程PID
moduleName:模块名字 如:ntdll.dll
返回值:
备注:
[TOP]
函数简介 :
初始化获取一个某个进程(x64)的执行环境句柄
函数原型
:
__int64 __stdcall
HCVMDMA_ShellCodeInitX64(__int32 windowsIndex, __int32 targetPid,__int64 hookAddr, __int32
hookAddrSzie);
targetPid:虚拟机中的目标进程PID
hookAddr:HOOK地址 如:一些进程频繁用到的函数 sleep closehandle deletedc 等等
hookAddrSize:破坏的汇编字节数,必须是完整的汇编,不能被打断,因为还需要还原并跳转比如:x64进程 NtDelayExecution 是8字节
返回值:
成功返回:执行环境句柄,是一个8字节
备注:
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.每次调用都会获取一个全新的执行环境句柄(实现物理机中控多线程调用)
3.物理机中控在一个执行环境句柄只能同时一个线程执行,如果要多线程执行请获取多个执行环境句柄
4.此接口不适合多线程获取,请在初始化最开始把所需要的执行环境句柄的数量初始化好,方便物理机中控多线程中单独分别使用
[TOP]
函数简介 :
通过指定一个初进程(x64)的执行环境句柄来执行CALL
函数原型 :
__int64 __stdcall HCVMDMA_RunShellCodeX64(__int32 windowsIndex, __int32 targetPid, __int64 excuteEnvAddr,
char*shellCodeStr);
targetPid:虚拟机中的目标进程PID
excuteEnvAddr:执行环境句柄 通过HCVMDMA_ShellCodeInitX64 获取
shellCodeStr:自己写的汇编shellcode机器码,最大限制不超过1024字节
返回值:
备注:
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.如果需要参数传递,请自行往excuteEnvAddr+ 0x8 写参数(参数最大缓冲区为0x200字节),同时自己的汇编机器码要引入自己参数的地址
[TOP]
函数简介
:
初始化获取一个某个进程(x86)的执行环境句柄
函数原型 :
__int64 __stdcall
HCVMDMA_ShellCodeInitX86(__int32 windowsIndex, __int32 targetPid, __int32 hookAddr,
__int32
hookAddrSzie);
targetPid:虚拟机中的目标进程PID
hookAddr:HOOK地址 如:一些进程频繁用到的函数 sleep closehandle deletedc 等等
hookAddrSize:破坏的汇编字节数,必须是完整的汇编,不能被打断,因为还需要还原并跳转 比如: x86进程 NtDelayExecution 是10字节
返回值:
成功返回:执行环境句柄,是一个8字节
备注:
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.每次调用都会获取一个全新的执行环境句柄(实现物理机中控多线程调用)
3.物理机中控在一个执行环境句柄只能同时一个线程执行,如果要多线程执行请获取多个执行环境句柄
4.此接口不适合多线程获取,请在初始化最开始把所需要的执行环境句柄的数量初始化好,方便物理机中控多线程中单独分别使用
[TOP]
函数简介
:
通过指定一个初进程(x86)的执行环境句柄来执行CALL
函数原型 :
__int64 __stdcall
HCVMDMA_RunShellCodeX86(__int32 windowsIndex, __int32 targetPid, __int32 excuteEnvAddr,
char*shellCodeStr);
targetPid:虚拟机中的目标进程PID
excuteEnvAddr:执行环境句柄 通过HCVMDMA_ShellCodeInitX86 获取
shellCodeStr:自己写的汇编shellcode机器码,最大限制不超过1024字节
返回值:
备注:
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.如果需要参数传递,请自行往 excuteEnvAddr+ 0x8 写参数(参数最大缓冲区为0x200字节),同时自己的汇编机器码要引入自己参数的地址
[TOP]
函数简介 :
特征码搜索(X86)(指定模块名)
函数原型 :
__int64 __stdcall
HCVMDMA_FindCodeX86(__int32
windowsIndex, __int32 targetPid,CHAR*code, __int32 offset, __int32 num, __int32
type = 1, CHAR*moduleName =
NULL);
targetPid:虚拟机中的目标进程PID
特征码字符串地址:特征码字符串地址(支持??)
偏移:正负偏移
次数:找到的第几次 从1开始
type:获取的是(基地址/CALL地址/直接地址/地址中的值) 1为地址 2为基地址 3为CALL 4为地址中的值
模块名字:在指定的模块中搜索,默认为主模块 NULL为默认
返回值:
备注:
需要先初始化关联虚拟机HCVMDMA_Init
[TOP]
函数简介 :
特征码搜索(X86)(指定开始地址和搜索大小)
函数原型 :
__int64 __stdcall
HCVMDMA_FindCodeX86Ex(__int32
windowsIndex, __int32 targetPid, __int64 beginAddr, __int32 addrSize, CHAR*code,
__int32 offset, __int32 num, __int32 type =
1);
targetPid:虚拟机中的目标进程PID
beginAddr:开始地址
addrSize:搜索范围大小(单位:字节)
特征码字符串地址:特征码字符串地址(支持??)
偏移:正负偏移
次数:找到的第几次 从1开始
type:获取的是(基地址/CALL地址/直接地址/地址中的值) 1为地址 2为基地址 3为CALL 4为地址中的值
返回值:
备注:
需要先初始化关联虚拟机HCVMDMA_Init
[TOP]
函数简介
:
特征码搜索(X64)(指定模块名)
函数原型 :
__int64 __stdcall
HCVMDMA_FindCodeX64(__int32 windowsIndex, __int32
targetPid,CHAR*code, __int32 offset, __int32 num, __int32 type = 1,
CHAR*moduleName = NULL);
特征码字符串地址:特征码字符串地址(支持??)
偏移:正负偏移
次数:找到的第几次 从1开始
type:获取的是(基地址/CALL地址/直接地址/地址中的值) 1为地址 2为基地址 3为CALL 4为地址中的值
模块名字:在指定的模块中搜索,默认为主模块 NULL为默认
返回值:
备注:
需要先初始化关联虚拟机HCVMDMA_Init
[TOP]
函数简介 :
特征码搜索(X64)(指定开始地址和搜索大小)
函数原型 :
__int64 __stdcall HCVMDMA_FindCodeX64Ex(__int32 windowsIndex, __int32 targetPid, __int64
beginAddr, __int32 addrSize, CHAR*code, __int32 offset, __int32 num, __int32
type = 1);
targetPid:虚拟机中的目标进程PID
beginAddr:开始地址
addrSize:搜索范围大小(单位:字节)
特征码字符串地址:特征码字符串地址(支持??)
偏移:正负偏移
次数:找到的第几次 从1开始
type:获取的是(基地址/CALL地址/直接地址/地址中的值) 1为地址 2为基地址 3为CALL 4为地址中的值
返回值:
备注:
需要先初始化关联虚拟机HCVMDMA_Init
[TOP]
函数简介
:
卸载并关闭连接虚拟机
函数原型 :
__int64 __stdcall
HCVMDMA_Close(__int32
windowsIndex);
返回值:
备注:
内部会自动调用HCEnv_UnLoad接口,使窗口序号和虚拟机进程断开绑定然后释放虚拟机相关资源
[TOP]
函数简介
:
初始化截图环境
函数原型 :
__int64 __stdcall
HCVMDMA_InitCapture(__int32
windowsIndex);
返回值:
备注:
小技巧:
1.初始化接口有根据不同虚拟机,失败概率不同,为了提高初始化成功率,可以尝试自启动任务管理器,让系统激活起来,初始化完成就可以把任务管理器关掉了
2.步骤:打开虚拟机-关联虚拟机-检查是否有管理器PID-开始初始化键鼠/截图环境-如果失败3次直接重启虚拟机
3.如图操作自启任务管理器就行
[TOP]
函数简介
:
截图一次(获取一次虚拟机全屏数据到物理机)
函数原型 :
__int64 __stdcall HCVMDMA_Capture(__int32 windowsIndex,__int64
captureEnvAddr);
返回值:
备注:
[TOP]
函数简介
:
开启截图(内部会开启一条线程循环调用HCVMDMA_Capture)
函数原型 :
__int64 __stdcall HCVMDMA_OpenCapture(__int32 windowsIndex, __int64
captureEnvAddr);
返回值:
备注:
[TOP]
函数简介
:
关闭截图(内部会关闭之前开启的线程) 和HCVMDMA_OpenCapture是一对接口
函数原型 :
__int64 __stdcall HCVMDMA_CloseCapture(__int32
windowsIndex);
返回值:
备注:
[TOP]
函数简介
:
初始化键鼠环境
函数原型 :
__int64 __stdcall HCVMDMA_InitMouseKey(__int32
windowsIndex);
返回值:
备注:
小技巧:
1.初始化接口有根据不同虚拟机,失败概率不同,为了提高初始化成功率,可以尝试自启动任务管理器,让系统激活起来,初始化完成就可以把任务管理器关掉了
2.步骤:打开虚拟机-关联虚拟机-检查是否有管理器PID-开始初始化键鼠/截图环境-如果失败3次直接重启虚拟机
3.如图操作自启任务管理器就行
[TOP]
函数简介
:
鼠标移动 (不包含轨迹)
函数原型 :
__int64 __stdcall HCVMDMA_MoveTo(__int32 windowsIndex, __int32x,
__int32y, __int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介 :
鼠标左键按下
函数原型 :
__int64 __stdcall HCVMDMA_LeftDown(__int32 windowsIndex, __int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介 :
鼠标左键弹起
函数原型
:
__int64 __stdcall HCVMDMA_LeftUp(__int32 windowsIndex, __int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介 :
鼠标左键点击
函数原型
:
__int64 __stdcall HCVMDMA_LeftClick(__int32
windowsIndex, int mis ,__int64
mkbEnvAddr);
mis:按下和弹起之前的间隔时间(毫秒)
返回值:
备注:
[TOP]
函数简介 :
鼠标左键双击
函数原型 :
__int64 __stdcall
HCVMDMA_LeftDoubleClick
(__int32 windowsIndex, int
mis ,__int64 mkbEnvAddr);
mis:按下和弹起之前的间隔时间(毫秒)
返回值:
备注:
[TOP]
函数简介
:
鼠标中键按下
函数原型 :
__int64 __stdcall HCVMDMA_MiddleDown(__int32 windowsIndex, __int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介
:
鼠标中键弹起
函数原型 :
__int64 __stdcall HCVMDMA_MiddleUp(__int32 windowsIndex, __int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介
:
鼠标中键点击
函数原型 :
__int64 __stdcall HCVMDMA_MiddleClick(__int32 windowsIndex, int mis
,__int64 mkbEnvAddr);
mis:按下和弹起之前的间隔时间(毫秒)
返回值:
备注:
[TOP]
函数简介
:
鼠标中键双击
函数原型 :
__int64 __stdcall HCVMDMA_MiddleDoubleClick(__int32 windowsIndex, int
mis ,__int64 mkbEnvAddr);
mis:按下和弹起之前的间隔时间(毫秒)
返回值:
备注:
[TOP]
函数简介
:
鼠标右键按下
函数原型 :
__int64 __stdcall HCVMDMA_RightDown(__int32 windowsIndex, __int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介
:
鼠标右键弹起
函数原型 :
__int64 __stdcall HCVMDMA_RightUp(__int32 windowsIndex, __int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介 :
鼠标右键点击
函数原型 :
__int64 __stdcall HCVMDMA_RightClick(__int32 windowsIndex, int mis
,__int64 mkbEnvAddr);
mis:按下和弹起之前的间隔时间(毫秒)
返回值:
备注:
[TOP]
函数简介 :
鼠标右键双击
函数原型 :
__int64 __stdcall HCVMDMA_RightDoubleClick(__int32 windowsIndex, int
mis ,__int64 mkbEnvAddr);
mis:按下和弹起之前的间隔时间(毫秒)
返回值:
备注:
[TOP]
函数简介 :
鼠标滚轮滚上
函数原型 :
__int64 __stdcall HCVMDMA_WheelUp(__int32 windowsIndex,__int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介
:
鼠标滚轮滚下
函数原型 :
__int64 __stdcall HCVMDMA_WheelDown(__int32
windowsIndex,__int64
mkbEnvAddr);
返回值:
备注:
[TOP]
函数简介 :
键盘按下
函数原型 :
__int64 __stdcall HCVMDMA_KeyDown(__int32 windowsIndex, int keyCode, __int64
mkbEnvAddr);
keyCode:虚拟键码值
返回值:
备注:
[TOP]
函数简介
:
键盘弹起
函数原型 :
__int64 __stdcall HCVMDMA_KeyUp(__int32 windowsIndex, int keyCode,
__int64 mkbEnvAddr);
keyCode:虚拟键码值
返回值:
备注:
[TOP]
函数简介 :
键盘敲击
函数原型 :
__int64 __stdcall HCVMDMA_KeyClick(__int32
windowsIndex, int keyCode, int mis, __int64
mkbEnvAddr);
keyCode:虚拟键码值
mis:按下和弹起之前的间隔时间(毫秒)
返回值:
备注:
[TOP]
函数简介
:
发送unicode字符串
函数原型 :
__int64 __stdcall HCVMDMA_SendUnicode(__int32 windowsIndex, wchar_t*
strUnicode, __int64
mkbEnvAddr);
strUnicode:unicode编码字符串(长度限制:最大100长度,一个字2个字节,共200字节) 例如:中文 韩文 日文 等多国语言
返回值:
备注:
[TOP]
函数简介
:
发送ascii字符串
函数原型 :
__int64 __stdcall HCVMDMA_SendAscii(__int32 windowsIndex, char*
strAscii, __int64
mkbEnvAddr);
strAscii:ascii编码字符串(长度限制:最大200长度,一个字符一个字节,共200字节) 例如:数字 英文 符号等
返回值:
备注:
[TOP]
函数简介
:
附加内置浏览器,附加监听模式1
函数原型
:
__int64
__stdcall HCGB_Attach1(__int32
窗口序号);
参数定义:
返回值:
备注:
必须游戏进程自带内置谷歌浏览器,才会附加模块成功
由于每个游戏不同,需要定制浏览器接口
当前默认的内置谷歌浏览器接口仅适合夜鸦
[TOP]
函数简介 :
附加内置浏览器,附加监听模式2
函数原型
:
__int64
__stdcall HCGB_Attach2(__int32
窗口序号);
参数定义:
返回值:
备注:
必须游戏进程自带内置谷歌浏览器,才会附加模块成功
由于每个游戏不同,需要定制浏览器接口
当前默认的内置谷歌浏览器接口仅适合夜鸦
[TOP]
函数简介
:
脱离之前的内置浏览器
函数原型
:
__int64
__stdcall HCGB_Detach(__int32
窗口序号);
参数定义:
返回值:
备注:
必须游戏进程自带内置谷歌浏览器,才会附加模块成功
[TOP]
函数简介
:
给内置浏览器注入JS代码
函数原型
:
__int64 __stdcall
HCGB_InjectJSCode(__int32
窗口序号,char *codeBuffer, BOOL 是否主线程调用 =
FALSE);
参数定义:
返回值:
备注:
必须游戏进程自带内置谷歌浏览器,才会附加模块成功
[TOP]
函数简介 :
给内置浏览器注入指定文件中的JS代码
函数原型
:
__int64 __stdcall
HCGB_ExcuteJSFile(__int32
窗口序号,char *fileName, BOOL 是否主线程调用 =
FALSE);
参数定义:
返回值:
备注:
必须游戏进程自带内置谷歌浏览器,才会附加模块成功
[TOP]
[TOP]
函数简介 :
函数原型 :
__int64 __stdcall HCSD_SetColor(__int32 lineColor = 0x0000FF00, int textColor
= 0x00FFFF00, int backColor = 0x00000000);
参数定义 :
lineColor :线色
textColor :文本色
backColor :背景色
返回值:
备注:
颜色值是4字节分别对应XRGB
如:0x00FF0000 红色
如:0x0000FF00
绿色
如:0x000000FF
蓝色
[TOP]
函数简介
:
设置当前调试窗口跟随的进程信息
__int64 __stdcall HCSD_SetFollowClassTitleName(int pid, __int64 hwnd = NULL,
char* className = NULL, char* titleName = NULL);
参数定义 :
pid:指定pid 内部会配合className 或titleName 找绑定的窗口句柄
hwnd:指定了窗口句柄,其他3个参数无效
className :类名 可以为NULL
titleName :标题名 可以为NULL
返回值:
备注:
[TOP]
函数简介 :
__int64 __stdcall HCSD_DrawWinodws(__int64 hwnd, __int32 LineRgbColor,
__int32 lineSize, __int32 type = 0, __int32 fillRgbColor =
0);
参数定义 :
hwnd:句柄
LineRgbColor:线颜色
lineSize:线大小
type:0边框
1填充
fillRgbColor:填充色RGB type=
1 才有效
返回值:
备注:
[TOP]
函数简介 :
__int64 __stdcall HCHD_CatchException(BOOL bOpen =
TRUE);
[TOP]
函数简介 :
__int64 __stdcall HCSD_SetAttachConsole(BOOL
bOpen);
参数定义 :
bOpen:是否打开
返回值:
备注:
printf cout 输入
输出到控制台上显示
注意:自行定时清空屏幕 防止满屏卡主进程运行
[TOP]
资源路径
[TOP]
函数简介 :
设置资源路径
函数原型
:
void __stdcall HCRES_SetResPathA(char * path);
void __stdcall
HCRES_SetResPathW(wchar_t *
path);
参数定义 :
返回值:
备注:
图片 字库文件都在这个里面找
[TOP]
函数简介 :
设置语言或者字体文件资源路径
函数原型:
void __stdcall HCRES_SetLanguageResPathA
(char * path);
void __stdcall HCRES_SetLanguageResPathW
(wchar_t *
path);
参数定义 :
返回值:
备注:
语言文件都在这个里面找
[TOP]
定制游戏接口会不定时发放
太多不便一次性写上
[TOP]
函数简介
:
调用获取人物信息CALL
函数原型
:
__int64 __stdcall HB2_GetPlayerInfo(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义:
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
json:
{"error":0,"ret":[{ "name": "Jack","level":26, "curHp": 588, "maxHp": 999, "curMp": 255, "maxMp": 666,"gold": 99999, "diamond": 999999}]}
[TOP]
函数简介 :
调用获取背包信息CALL
函数原型
:
__int64 __stdcall HB2_GetBagInfo
(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义:
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
json:
{"error":0,"flag":99,"ret":[{ "id": 1111,"tId":22222,"dId":33333 ,"num": 588},{ "id": 1111,"tId":22222,"dId":33333 , "num": 588},{ "id": 1111,"tId":22222, "dId":33333 ,"num": 588}]}
[TOP]
函数简介 :
调用获取快捷栏遍历信息CALL(前10个)
函数原型 :
__int64 __stdcall HB2_GetShortCutInfo1(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义:
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注:
json:
{"error":0,"ret":[{ "index": 0,"id": 1111,"bAct":0},{ "index": 1,"id": 2222,"bAct":1}]}
[TOP]
函数简介 :
调用获取快捷栏遍历信息CALL(后10个)
函数原型 :
__int64 __stdcall HB2_GetShortCutInfo2(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义:
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
备注 :
json:
{"error":0,"ret":[{ "index": 0,"id": 1111,"bAct":0},{ "index": 1,"id": 2222,"bAct":1}]}
[TOP]
函数简介
:
调用获取人物坐标CALL
函数原型:
__int64 __stdcall
HB2_GetPlayerXYZ(__int32 窗口序号, BOOL
是否主线程调用 = FALSE);
参数定义 :
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
查看返回值表 HD返回值表
备注:
json:
{"error":0,"ret":[{"x":125,"y":125,"z":125}]}
[TOP]
函数简介
:
调用获取人物当前地图ID CALL
函数原型:
__int64 __stdcall HB2_GetPlayerCurMapId(__int32 窗口序号,
BOOL 是否主线程调用 = FALSE);
参数定义 :
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
查看返回值表 HD返回值表
备注:
json:
{"error":0,"ret":[{"mapId":1993}]}
[TOP]
函数简介 :
调用遍历已结任务章节ID信息(主线+支线)
函数原型:
__int64 __stdcall HB2_GetCurChapterTaskId(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义 :
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
查看返回值表 HD返回值表
备注:
json:
{"error":0,"ret":[{"CTaskId":1993,"index":1}]}
[TOP]
函数简介 :
调用遍历已结任务章节ID信息(主线+支线)
函数原型:
__int64 __stdcall HB2_GetAChapterTask(__int32 窗口序号, BOOL
是否主线程调用 = FALSE);
参数定义 :
是否主线程调用:是否需要主线程来调用这个CALL
返回值 :
查看返回值表 HD返回值表
备注:
json:
{"error":0,"ret":[{"CTaskId":1993,"index":1,"curNum":2},{"CTaskId":1998,"index":2,"curNum":2}]}
[TOP]
函数简介 :
调用人物是否移动CALL
函数原型:
__int64 __stdcall
HB2_PlayerIsMove(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义 :
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
查看返回值表 HD返回值表
备注:
无
[TOP]
函数简介 :
调用人物是否自动使用药品状态
函数原型:
__int64 __stdcall HB2_IsAutoUseMed(__int32 窗口序号, BOOL 是否主线程调用 =
FALSE);
参数定义 :
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
查看返回值表 HD返回值表
备注:
无
[TOP]
函数简介 :
调用移动CALL
函数原型
:
__int64 __stdcall
HB2_Move(__int32 窗口序号, __int32 地图ID, __int32 x,
__int32 y, __int32 z, BOOL 是否主线程调用 = FALSE);
参数定义 :
是否主线程调用:是否需要主线程来调用这个CALL
返回值:
查看返回值表 HD返回值表
备注:
无
[TOP]
函数简介 :
调用传送点CALL
函数原型:
__int64 __stdcall HB2_PassPoint(__int32 窗口序号, __int32 传送点ID,BOOL 是否主线程调用 =
FALSE);
参数定义 :
返回值 :
查看返回值表 HD返回值表
备注:
无
[TOP]
函数简介 :
调用化身遍历CALL
函数原型:
__int64 __stdcall HB2_GetHuaShen(__int32 窗口序号,BOOL 是否主线程调用 =
FALSE);
参数定义:
返回值 :
查看返回值表 HD返回值表
备注:
json:
{"error":0,"ret":[{ "id": 0,"xLevel": 1111,"type":0},{ "id": 0,"xLevel": 1111,"type":0}]}
id:化身ID xLevel:化身星级 type:化身品质 0 1 2 3 依次递增+1 白 绿 蓝...
[TOP]
函数简介 :
调用宠物遍历CALL
函数原型:
__int64 __stdcall HB2_GetChongWu(__int32 窗口序号,BOOL 是否主线程调用 =
FALSE);
参数定义:
返回值 :
查看返回值表 HD返回值表
备注:
json:
{"error":0,"ret":[{ "id": 0,"xLevel": 1111,"type":0},{ "id": 0,"xLevel": 1111,"type":0}]}
id:宠物ID xLevel:宠物星级 type:宠物品质 0 1 2 3 依次递增+1 白 绿 蓝...
[TOP]
函数简介 :
调用使用物品CALL
函数原型:
__int64 __stdcall HB2_UseGoods(__int32 窗口序号,
__int64 物品ID, __int64 物品数量, __int64 物品临时ID, __int64 物品描述ID, BOOL 是否主线程调用 =
FALSE);
参数定义:
物品ID: 物品ID
物品数量:物品数量
物品临时ID:物品临时ID
物品描述ID: 物品描述ID
返回值 :
查看返回值表 HD返回值表
备注:
无
[TOP]