🛰️ 环境初始化模块(Inject)
📌 函数: HD通讯_初始化
描述
初始化插件环境
原型
__int64 __stdcall HCInject_Init(__int32 窗口序号,BOOL 是否重置=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
bool 是否重置 - 真(TRUE)就行
返回值
查看返回值表
注意事项
每次打开游戏都需要先初始化一次
不要多次初始化
该接口还会把当前全局进程位数HCEnv_SetProcessType与当前窗口序号进程绑定,省去了切换进程位数的操作,如果不绑定可能会返回-1107(ERROR_进程位数不匹配)
HD通讯_初始化 - 基础示例
.版本 2
.子程序 _HD环境初始化
.局部变量 初始化结果, 逻辑型
初始化结果 = HD环境_初始化 ()
.如果 (初始化结果 = 真)
调试输出 ("HD环境初始化成功")
.否则
调试输出 ("HD环境初始化失败")
.如果结束
HD通讯_初始化 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_初始化 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_初始化Ex
描述
初始化插件环境
原型
__int64 __stdcall HCInject_InitEx(__int32 窗口序号,char* 预加载LUA模块全路径,BOOL 是否重置=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
char* 预加载LUA模块全路径 - 指定一个LUA文件路径+文件名(当插件被加载的时候会自动执行这个LUA文件),通讯后执行
bool 是否重置 - 是否重置
返回值
查看返回值表
注意事项
每次打开游戏都需要先初始化一次
不要多次初始化
如果不需要用LUA来初始化自己的数据,可以直接使用HCInject_Init
该接口还会把当前全局进程位数HCEnv_SetProcessType与当前窗口序号进程绑定,省去了切换进程位数的操作,如果不绑定可能会返回-1107(ERROR_进程位数不匹配)
HD通讯_初始化Ex - 基础示例
.版本 2
.子程序 _HD环境初始化
.局部变量 初始化结果, 逻辑型
初始化结果 = HD环境_初始化 ()
.如果 (初始化结果 = 真)
调试输出 ("HD环境初始化成功")
.否则
调试输出 ("HD环境初始化失败")
.如果结束
HD通讯_初始化Ex - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_初始化Ex - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_初始化Exx
描述
初始化插件环境
原型
__int64 __stdcall HCInject_InitExx(__int32 窗口序号,char* 预加载DLL模块全路径=NULL,char* 预加载LUA模块全路径=NULL,__int32 addType=-1,BOOL 是否重置=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
char* 预加载DLL模块全路径 - 指定一个预加载的DLL,通讯前直接加载
char* 预加载LUA模块全路径 - 指定一个LUA文件路径+文件名(当插件被加载的时候会自动执行这个LUA文件),通讯后执行
__int32 addType - -1/0/1无痕无模块加载DLL2普通加载DLL
bool 是否重置 - 是否重置
返回值
查看返回值表
注意事项
每次打开游戏都需要先初始化一次
不要多次初始化
如果不需要用LUA来初始化自己的数据或者预加载DLL,可以直接使用HCInject_Init
该接口还会把当前全局进程位数HCEnv_SetProcessType与当前窗口序号进程绑定,省去了切换进程位数的操作,如果不绑定可能会返回-1107(ERROR_进程位数不匹配)
HD通讯_初始化Exx - 基础示例
.版本 2
.子程序 通讯初始化示例
.局部变量 窗口序号, 整数型
.局部变量 初始化结果, 逻辑型
.局部变量 继续结果, 长整数型
.局部变量 获取的PID, 长整数型
窗口序号 = 1
' 1. 初始化通讯环境
初始化结果 = HD通讯_初始化 (窗口序号, 真)
.如果 (初始化结果)
调试输出 ("通讯初始化成功")
' 2. 加载环境
.如果 (HD环境_加载 (窗口序号, "game.exe", 10000))
调试输出 ("环境加载成功")
' 3. 验证通讯连接
继续结果 = HD通讯_继续 (窗口序号)
.如果 (继续结果 ≥ 1)
调试输出 ("通讯验证成功")
' 4. 获取进程PID
获取的PID = HD通讯_获取PID (窗口序号)
调试输出 ("目标进程PID:" + 到文本 (获取的PID))
' 5. 测试通讯是否正常
.如果 (HD通讯_测试是否通讯成功 (窗口序号, 123, 456, 789, 0, 0, 0, 假))
调试输出 ("通讯测试成功,可以正常使用HD功能")
.否则
调试输出 ("通讯测试失败")
.如果结束
.否则
调试输出 ("通讯验证失败,错误码:" + 到文本 (继续结果))
.如果结束
.否则
调试输出 ("环境加载失败")
.如果结束
.否则
调试输出 ("通讯初始化失败")
.如果结束
HD通讯_初始化Exx - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_初始化Exx - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_获取PID
描述
获取打开的进程PID
原型
__int64 __stdcall HCInject_GetPid(__int32 窗口序号);
参数
__int32 窗口序号 - 窗口序号(从1开始)
返回值
查看返回值表
注意事项
调用这个接口之前必须保证插件已经加载才会获取PID
HD通讯_获取PID - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_获取PID - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_获取之前PID
描述
获取打开的进程之前的PID(可以用于重连)
原型
__int64 __stdcall HCInject_GetPrePid(__int32 窗口序号);
参数
__int32 窗口序号 - 窗口序号(从1开始)
返回值
查看返回值表
注意事项
当我们在调试的时候中控如果崩了,如果此时插件还在游戏进程中执行,那么可以当打开中控的时候直接获取PID进行通讯,而不是调用初始化之类的操作
HD通讯_获取之前PID - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_获取之前PID - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_获取绑定窗口序号
描述
通过进程PID尝试拿到绑定的窗口序号
原型
__int64 __stdcall HCInject_GetPreWinIndex(__int32 pid);
参数
__int32 pid - 指定一个进程PID
返回值
查看返回值表
注意事项
返回如果大于等于0的值表示之前进程绑定的窗口序号
没有进程PID返回-1178
没有绑定过返回-1179
HD通讯_获取绑定窗口序号 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_获取绑定窗口序号 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HCInject_GetPreWinIndexEx
描述
通过进程PID尝试拿到绑定的窗口序号
原型
__int64 __stdcall HCInject_GetPreWinIndexEx(__int32 pid,__int32 winIndex,__int64 checkFun);
参数
__int32 pid - 窗口序号winIndex
返回值
查看返回值表
注意事项
返回如果大于等于0的值表示之前进程绑定的窗口序号
没有进程PID返回-1178
没有绑定过返回-1179
HCInject_GetPreWinIndexEx - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HCInject_GetPreWinIndexEx - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_获取窗口句柄
描述
获取窗口句柄,内部是通过PID获取窗口句柄需要先安装好插件到目标进程
原型
__int64 __stdcall HCInject_GetHwnd(__int32 窗口序号,char* className,char* title,__int32 filter,BOOL bType,__int32 mis=0);
参数
__int32 窗口序号 - 窗口序号(从1开始)
char* className - 窗口类名(不指定为NULL/0)
char* title - 窗口标题(不指定为NULL/0)
__int32 filter - 1标题2类名8检测是否无父窗口16检查窗口句柄是否有效多个标识可以用|累加
bool bType - 真/1为模糊匹配假/0为完全匹配
__int32 mis - 循环检查毫秒数mis<=0表示不需要循环获取>0表示内部循环获取句柄直到有值
返回值
查看返回值表
注意事项
内部是通过HCWIN_EnumWindowByProcessId获取
HD通讯_获取窗口句柄 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_获取窗口句柄 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_获取窗口句柄Ex
描述
获取窗口句柄(需要内置,一般不需要调用这个获取句柄),如果需要通过PID获取句柄请调用HCInject_GetHwnd
原型
__int64 __stdcall HCInject_GetHwndEx(__int32 窗口序号);
参数
__int32 窗口序号 - 窗口序号(从1开始)
返回值
查看返回值表
注意事项
这个接口和内置的游戏接口有关,需要搭建完通讯才能调用
并不是一定获取到
如果要获取进程句柄还需要自行获取,除非内置了游戏数据
HD通讯_获取窗口句柄Ex - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_获取窗口句柄Ex - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_继续
描述
继续环境加载操作
原型
__int64 __stdcall HCInject_Continue(__int32 窗口序号);
参数
__int32 窗口序号 - 窗口序号(从1开始)
返回值
查看返回值表
注意事项
当我们调用了HCEnv_Load后需要调用这个接口来验证
HD通讯_继续 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_继续 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_存数据
描述
存自定义二进制数据
原型
__int64 __stdcall HCInject_SetData(__int32 窗口序号,void* 用户数据缓冲区,__int32 数据大小);
参数
__int32 窗口序号 - 窗口序号(从1开始)
void 用户数据缓冲区 - 数据的来源缓冲区(可以字符串JSON其他类型值)内部会拷贝一份并存储到目标进程中方便下一次获取
__int32 数据大小 - 数据的来源缓冲区中有效数据的大小总大小1024字节
返回值
查看返回值表
注意事项
无
HD通讯_存数据 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_存数据 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD通讯_取数据
描述
取自定义二进制数据
原型
__int64 __stdcall HCInject_GetData(__int32 窗口序号,void* 用户数据缓冲区,__int32 缓冲区大小);
参数
__int32 窗口序号 - 窗口序号(从1开始)
void 用户数据缓冲区 - 数据的存储缓冲区取的数据就是用HCInject_SetData接口存的数据
__int32 缓冲区大小 - 数据的存储缓冲区数据的大小不能小于等于0从内部取的数据最大为1024
返回值
查看返回值表
注意事项
取的数据就是用HCInject_SetData接口存的数据
HD通讯_取数据 - 基础示例
.版本 2
.子程序 _获取机器码无网卡
.局部变量 机器码, 文本型
机器码 = HD系统_获取机器码无网卡 ()
调试输出 ("机器码(无网卡): " + 机器码)
HD通讯_取数据 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD通讯_取数据 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")