跳到主要内容

🛰️ 虚拟机DMA模块[VMDMA]

📌 函数: HDDMA_获取版本号

描述

获取DMA服务器版本号

原型

__int64 __stdcall HCVMDMA_GetVersion(__int32 windowsIndex);

参数

__int32 windowsIndex - 窗口序号

返回值

查看返回值表

注意事项

返回长整数:如:240401格式:24年-04版本号-01小版本号

HDDMA_获取版本号 - 基础示例

.版本 2

.子程序 _获取DMA版本示例
.局部变量 版本号, 长整数型

版本号 = HDDMA_获取版本号 ()

调试输出 ("DMA版本号: " + 到文本 (版本号))

.如果 (版本号 > 0)
调试输出 ("DMA组件正常")
.否则
调试输出 ("获取DMA版本失败")
.如果结束

HDDMA_获取版本号 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取版本号 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_版本是否一致

描述

判断HD插件的DMA接口和DMA服务器接口版本是否一致

原型

__int64 __stdcall HCVMDMA_IsVersion(__int32 windowsIndex);

参数

__int32 windowsIndex - 窗口序号

返回值

查看返回值表
真假版本是否一致

HDDMA_版本是否一致 - 基础示例

.版本 2

.子程序 _检查版本兼容示例
.局部变量 版本一致, 逻辑型

版本一致 = HDDMA_版本是否一致 ()

.如果 (版本一致 = 真)
调试输出 ("DMA版本兼容")
.否则
调试输出 ("DMA版本不兼容,请更新组件")
.如果结束

HDDMA_版本是否一致 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_版本是否一致 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_开启服务器

描述

开启DMA服务器

原型

__int64 __stdcall HCVMDMA_StartServer(char* ip=\"0.0.0.0\",int port=6532,char* serverRootPath=\"\");

参数

char* ip - IP默认
int port - 端口默认
char* serverRootPath - 服务器exe根目录默认

返回值

查看返回值表

注意事项

服务器在群下载或者官网下载
兼容指定自定义进程名(全路径\\XXXX.exe)XXXX.exe为自定义进程名不指定进程名表示使用内置进程名(全路径\\HDVMDma.exe)不指定路径(当前中控exe根目录\\HDVMDma.exe)

HDDMA_开启服务器 - 基础示例

.版本 2

.子程序 _启动DMA服务器示例
.局部变量 启动结果, 逻辑型
.局部变量 设备名, 文本型
.局部变量 端口, 整数型

设备名 = "HDDMA_Device"
端口 = 9999

启动结果 = HDDMA_开启服务器 (设备名, 端口, "")

.如果 (启动结果 = 真)
调试输出 ("DMA服务器启动成功,端口: " + 到文本 (端口))
.否则
调试输出 ("DMA服务器启动失败")
.如果结束

HDDMA_开启服务器 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_开启服务器 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_关闭服务器

描述

关闭服务器,同时结束进程

原型

__int64 __stdcall HCVMDMA_CloseServer();

返回值

查看返回值表

注意事项


HDDMA_关闭服务器 - 基础示例

.版本 2

.子程序 _关闭DMA服务器示例
.局部变量 关闭结果, 逻辑型

关闭结果 = HDDMA_关闭服务器 ()

.如果 (关闭结果 = 真)
调试输出 ("DMA服务器已关闭")
.否则
调试输出 ("DMA服务器关闭失败")
.如果结束

HDDMA_关闭服务器 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_关闭服务器 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_服务器是否开启

描述

服务器是否已经开启

原型

__int64 __stdcall HCVMDMA_ServerIsStart(char* ip=\"127.0.0.1\",int port=6532);

参数

char* ip - 指定服务器IP,指定后可以用来判断服务器是否开启
int port - 指定服务器端口,指定后可以用来判断服务器是否开启

返回值

查看返回值表

注意事项

循环检查直到服务器开启成功
如果使用HCVMDMA_StartServer开启服务器,不指定IP和端口,则使用的是HCVMDMA_ServerIsStart指定的IP和端口

HDDMA_服务器是否开启 - 基础示例

.版本 2

.子程序 _检查服务器状态示例
.局部变量 服务器状态, 逻辑型

服务器状态 = HDDMA_服务器是否开启 ()

.如果 (服务器状态 = 真)
调试输出 ("DMA服务器正在运行")
.否则
调试输出 ("DMA服务器未运行")
.如果结束

HDDMA_服务器是否开启 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_服务器是否开启 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_关联虚拟机

描述

初始化并关联虚拟机

原型

__int64 __stdcall HCVMDMA_Init(__int32 windowsIndex,__int32 vmPid,__int32 timeOut=10000);

参数

__int32 windowsIndex - 窗口序号
__int32 vmPid - 虚拟机PID进程名是
__int32 timeOut - 超时等待时间

返回值

查看返回值表

注意事项

需要先开启服务器HCVMDMA_StartServer
内部会自动调用HCEnv_Load接口,使窗口序号和虚拟机进程关联绑定然后初始化虚拟机相关资源
后续就可以使用该窗口虚拟机去操作对应的虚拟机中的进程

HDDMA_关联虚拟机 - 基础示例

.版本 2

.子程序 _关联虚拟机示例
.局部变量 连接结果, 逻辑型
.局部变量 虚拟机ID, 整数型

虚拟机ID = 1 ' 虚拟机编号

连接结果 = HDDMA_关联虚拟机 (虚拟机ID, "")

.如果 (连接结果 = 真)
调试输出 ("虚拟机" + 到文本 (虚拟机ID) + "连接成功")
.否则
调试输出 ("虚拟机连接失败")
.如果结束

HDDMA_关联虚拟机 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_关联虚拟机 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_获取PID

描述

通过进程名获取PID

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_获取PID - 基础示例

.版本 2

.子程序 _获取进程PID示例
.局部变量 进程PID, 长整数型
.局部变量 进程名, 文本型

进程名 = "notepad.exe"

进程PID = HDDMA_获取PID (进程名)

.如果 (进程PID > 0)
调试输出 (进程名 + "的PID: " + 到文本 (进程PID))
.否则
调试输出 ("未找到进程: " + 进程名)
.如果结束

HDDMA_获取PID - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取PID - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_读地址

描述

读地址,仅支持1248地址大小

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_读地址 - 基础示例

.版本 2

.子程序 _DMA读整数示例
.局部变量 读取值, 整数型
.局部变量 进程PID, 长整数型
.局部变量 内存地址, 长整数型

进程PID = HDDMA_获取PID ("game.exe")
内存地址 = 8388608 ' 0x800000

.如果 (进程PID > 0)
读取值 = HDDMA_读整数 (进程PID, 内存地址)
调试输出 ("DMA读取整数: " + 到文本 (读取值))
.否则
调试输出 ("获取进程PID失败")
.如果结束

HDDMA_读地址 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_读地址 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_读单浮点

描述

读单浮点数

原型

返回值

查看返回值表
成功返回:浮点数从json返回获取

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_读单浮点 - 基础示例

.版本 2

.子程序 _HDDMA读单浮点示例
.局部变量 窗口序号, 整数型
.局部变量 进程PID, 整数型
.局部变量 目标地址, 长整数型
.局部变量 浮点值, 文本型
.局部变量 数值, 小数型

窗口序号 = 1
进程PID = 1234
目标地址 = 4194304

浮点值 = HDDMA_读单浮点 (窗口序号, 进程PID, 目标地址)

.如果 (浮点值 ≠ "")
数值 = 到数值 (浮点值)
调试输出 ("读取单浮点成功")
调试输出 ("浮点值文本: " + 浮点值)
调试输出 ("转换后数值: " + 到文本 (数值))
.否则
调试输出 ("读取单浮点失败,返回空值")
.如果结束
调试输出 ("详细信息: " + HD通用_获取最近返回json (窗口序号))

HDDMA_读单浮点 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_读单浮点 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_读双浮点

描述

读双浮点数

原型

返回值

查看返回值表
成功返回:浮点数从json返回获取

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_读双浮点 - 基础示例

.版本 2

.子程序 _HDDMA读双浮点示例
.局部变量 窗口序号, 整数型
.局部变量 进程PID, 整数型
.局部变量 目标地址, 长整数型
.局部变量 浮点值, 文本型
.局部变量 数值, 双精度小数型

窗口序号 = 1
进程PID = 1234
目标地址 = 4194304

浮点值 = HDDMA_读双浮点 (窗口序号, 进程PID, 目标地址)

.如果 (浮点值 ≠ "")
数值 = 到双精度小数 (浮点值)
调试输出 ("读取双浮点成功")
调试输出 ("浮点值文本: " + 浮点值)
调试输出 ("转换后数值: " + 到文本 (数值))
.否则
调试输出 ("读取双浮点失败,返回空值")
.如果结束
调试输出 ("详细信息: " + HD通用_获取最近返回json (窗口序号))

HDDMA_读双浮点 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_读双浮点 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_读字节集

描述

读字节集

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_读字节集 - 基础示例

.版本 2

.子程序 _DMA读字节集示例
.局部变量 字节数据, 字节集
.局部变量 进程PID, 长整数型
.局部变量 内存地址, 长整数型
.局部变量 读取长度, 整数型
.局部变量 i, 整数型
.局部变量 十六进制串, 文本型

进程PID = HDDMA_获取PID ("game.exe")
内存地址 = 4194304 ' 0x400000
读取长度 = 16

.如果 (进程PID > 0)
字节数据 = HDDMA_读字节集 (进程PID, 内存地址, 读取长度)

.如果 (取字节集长度 (字节数据) > 0)
十六进制串 = ""
.计次循环首 (取字节集长度 (字节数据), i)
十六进制串 = 十六进制串 + " " + 到十六进制 (字节数据 [i], 2)
.计次循环尾 ()

调试输出 ("DMA读取字节: " + 十六进制串)
.否则
调试输出 ("DMA读取字节失败")
.如果结束
.否则
调试输出 ("获取进程PID失败")
.如果结束

HDDMA_读字节集 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_读字节集 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_写地址

描述

写地址,仅支持1248地址大小

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_写地址 - 基础示例

.版本 2

.子程序 _DMA写整数示例
.局部变量 写入结果, 长整数型
.局部变量 进程PID, 长整数型
.局部变量 内存地址, 长整数型
.局部变量 写入值, 整数型

进程PID = HDDMA_获取PID ("game.exe")
内存地址 = 8388608 ' 0x800000
写入值 = 9999

.如果 (进程PID > 0)
写入结果 = HDDMA_写整数 (进程PID, 内存地址, 写入值)

.如果 (写入结果 > 0)
调试输出 ("DMA写入整数成功: " + 到文本 (写入值))

' 验证写入
.局部变量 验证值, 整数型
验证值 = HDDMA_读整数 (进程PID, 内存地址)
.如果 (验证值 = 写入值)
调试输出 ("DMA写入验证成功")
.如果结束
.否则
调试输出 ("DMA写入整数失败")
.如果结束
.否则
调试输出 ("获取进程PID失败")
.如果结束

HDDMA_写地址 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_写地址 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_写单浮点

描述

写单浮点数

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_写单浮点 - 基础示例

.版本 2

.子程序 _读表达式浮点示例
.局部变量 浮点值, 小数型

浮点值 = HD内存_读表达式浮点数 (0, "game.exe+0x123456+0x20")
调试输出 ("读取到的浮点数: " + 到文本 (浮点值))

HDDMA_写单浮点 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_写单浮点 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_写双浮点

描述

写双浮点数

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_写双浮点 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_写双浮点 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_写字节集

描述

写字节集

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_写字节集 - 基础示例

.版本 2

.子程序 _DMA写字节集示例
.局部变量 写入结果, 长整数型
.局部变量 进程PID, 长整数型
.局部变量 内存地址, 长整数型
.局部变量 字节数据, 字节集

进程PID = HDDMA_获取PID ("game.exe")
内存地址 = 8388608 ' 0x800000

' 构建要写入的字节数据
字节数据 = { }
加入成员 (字节数据, 144) ' 0x90 NOP指令
加入成员 (字节数据, 144) ' 0x90
加入成员 (字节数据, 195) ' 0xC3 RET指令

.如果 (进程PID > 0)
写入结果 = HDDMA_写字节集 (进程PID, 内存地址, 字节数据)

.如果 (写入结果 > 0)
调试输出 ("DMA写入字节集成功")

' 验证写入
.局部变量 验证数据, 字节集
验证数据 = HDDMA_读字节集 (进程PID, 内存地址, 取字节集长度 (字节数据))
.如果 (验证数据 = 字节数据)
调试输出 ("DMA字节集写入验证成功")
.如果结束
.否则
调试输出 ("DMA写入字节集失败")
.如果结束
.否则
调试输出 ("获取进程PID失败")
.如果结束

HDDMA_写字节集 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_写字节集 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_获取函数

描述

获取函数地址

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_获取函数 - 基础示例

.版本 2

.子程序 _HDDMA获取函数示例
.局部变量 窗口序号, 整数型
.局部变量 进程PID, 整数型
.局部变量 模块名, 文本型
.局部变量 函数名, 文本型
.局部变量 函数地址, 长整数型

窗口序号 = 1
进程PID = 1234
模块名 = "kernel32.dll"
函数名 = "CreateFileA"

函数地址 = HDDMA_获取函数 (窗口序号, 进程PID, 模块名, 函数名)

.如果 (函数地址 > 0)
调试输出 (函数名 + " 函数地址: 0x" + 到十六进制 (函数地址))
.否则
调试输出 ("获取函数地址失败: " + 函数名)
.如果结束

HDDMA_获取函数 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取函数 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_获取主模块

描述

获取主模块地址

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_获取主模块 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取主模块 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_获取模块

描述

获取模块地址

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_获取模块 - 基础示例

.版本 2

.子程序 _获取指定模块示例
.局部变量 模块基址, 长整数型
.局部变量 进程PID, 长整数型
.局部变量 模块名, 文本型

进程PID = HDDMA_获取PID ("game.exe")
模块名 = "kernel32.dll"

.如果 (进程PID > 0)
模块基址 = HDDMA_获取模块 (进程PID, 模块名)

.如果 (模块基址 > 0)
调试输出 (模块名 + "基址: 0x" + 到十六进制 (模块基址))
.否则
调试输出 ("未找到模块: " + 模块名)
.如果结束
.否则
调试输出 ("获取进程PID失败")
.如果结束

HDDMA_获取模块 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取模块 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_获取执行环境X64

描述

初始化获取一个某个进程(x64)的执行环境句柄

原型

返回值

查看返回值表
成功返回:执行环境句柄,是一个8字节

注意事项

需要先初始化关联虚拟机HCVMDMA_Init
支持内置保存执行环境最多可以保存20个进程执行环境,保存策略为->同线程-同虚拟机-指定虚拟机中的进程PID-执行环境-绑定
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.每次调用都会获取一个全新的执行环境句柄(实现物理机中控多线程调用)
3.物理机中控在一个执行环境句柄只能同时一个线程执行,如果要多线程执行请获取多个执行环境句柄
4.此接口不适合多线程获取,请在初始化最开始把所需要的执行环境句柄的数量初始化好,方便物理机中控多线程中单独分别使用

HDDMA_获取执行环境X64 - 基础示例

.版本 2

.子程序 _测试OCR初始化, 逻辑型
.局部变量 窗口索引, 整数型
.局部变量 语言库, 文本型
.局部变量 初始化结果, 逻辑型
.局部变量 返回信息, 文本型

窗口索引 = 0
语言库 = "chi_sim" ' 中文简体语言库

调试输出 ("=== OCR服务初始化测试 ===")
调试输出 ("窗口索引:", 窗口索引)
调试输出 ("语言库:", 语言库)

' 执行初始化
初始化结果 = HD智能识字_初始化 (窗口索引, 语言库)

' 获取详细返回信息
返回信息 = HD通用_获取最近返回json (窗口索引)

.如果 (初始化结果 = 真)
调试输出 ("✓ OCR初始化成功!")
调试输出 ("语言库加载完成:", 语言库)
调试输出 ("返回信息:", 返回信息)

' 验证初始化状态
调试输出 ("OCR服务已准备就绪,可以调用启动接口")
返回 (真)
.否则
调试输出 ("✗ OCR初始化失败")
调试输出 ("错误信息:", 返回信息)
调试输出 ("可能原因:")
调试输出 ("1. 语言库文件不存在:", 语言库, ".traineddata")
调试输出 ("2. 语言库路径配置错误")
调试输出 ("3. OCR引擎组件缺失")
调试输出 ("4. 系统权限不足")
返回 (假)
.如果结束

' 多语言库测试
.子程序 _多语言库初始化测试
.局部变量 语言库列表, 文本型, , , "7"
.局部变量 语言说明, 文本型, , , "7"
.局部变量 i, 整数型
.局部变量 成功计数, 整数型
.局部变量 失败计数, 整数型

' 定义支持的语言库
语言库列表 [1] = "chi_sim"
语言说明 [1] = "中文简体"
语言库列表 [2] = "chi_tra"
语言说明 [2] = "中文繁体"
语言库列表 [3] = "eng"
语言说明 [3] = "英文"
语言库列表 [4] = "jpn"
语言说明 [4] = "日文"
语言库列表 [5] = "kor"
语言说明 [5] = "韩文"
语言库列表 [6] = "ara"
语言说明 [6] = "阿拉伯文"
语言库列表 [7] = "rus"
语言说明 [7] = "俄文"

调试输出 ("=== 多语言库支持测试 ===")
成功计数 = 0
失败计数 = 0

.计次循环首 (7, i)
调试输出 ("测试", i, "/7: ", 语言说明 [i], " (", 语言库列表 [i], ")")

.如果 (HD智能识字_初始化 (0, 语言库列表 [i]))
成功计数 = 成功计数 + 1
调试输出 (" ✓ ", 语言说明 [i], "初始化成功")

' 立即关闭,准备下一个测试
HD智能识字_关闭 (0)
.否则
失败计数 = 失败计数 + 1
调试输出 (" ✗ ", 语言说明 [i], "初始化失败")
调试输出 (" 错误:", HD通用_获取最近返回json (0))
.如果结束
.计次循环尾 ()

调试输出 ("")
调试输出 ("多语言支持测试完成:")
调试输出 ("成功:", 成功计数, " 失败:", 失败计数)
调试输出 ("语言库支持率:", (成功计数 × 100) ÷ 7, "%")

.如果 (成功计数 > 0)
调试输出 ("推荐使用: chi_sim (中文简体) 或 eng (英文)")
.如果结束

HDDMA_获取执行环境X64 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取执行环境X64 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_CALLX64

描述

通过指定一个初进程(x64)的执行环境句柄来执行CALL

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.如果需要参数传递,请自行往excuteEnvAddr+0x8写参数(参数最大缓冲区为0x200字节),同时自己的汇编机器码要引入自己参数的地址

HDDMA_CALLX64 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_CALLX64 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HCVMDMA_ShellCodeInitX86

描述

初始化获取一个某个进程(x86)的执行环境句柄

原型

返回值

查看返回值表
成功返回:执行环境句柄,是一个8字节

注意事项

需要先初始化关联虚拟机HCVMDMA_Init
支持内置保存执行环境最多可以保存20个进程执行环境,保存策略为->同线程-同虚拟机-指定虚拟机中的进程PID-执行环境-绑定
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.每次调用都会获取一个全新的执行环境句柄(实现物理机中控多线程调用)
3.物理机中控在一个执行环境句柄只能同时一个线程执行,如果要多线程执行请获取多个执行环境句柄
4.此接口不适合多线程获取,请在初始化最开始把所需要的执行环境句柄的数量初始化好,方便物理机中控多线程中单独分别使用

HCVMDMA_ShellCodeInitX86 - 基础示例

.版本 2

.子程序 _断开虚拟机示例
.局部变量 断开结果, 逻辑型

断开结果 = HDDMA_断开虚拟机 ()

.如果 (断开结果 = 真)
调试输出 ("虚拟机连接已断开")
.否则
调试输出 ("断开虚拟机失败")
.如果结束

HCVMDMA_ShellCodeInitX86 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HCVMDMA_ShellCodeInitX86 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HCVMDMA_RunShellCodeX86

描述

通过指定一个初进程(x86)的执行环境句柄来执行CALL

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init
执行环境句柄解析:
1.可以理解成一个空间可以与物理机进行交互,实现参数传递和调用CALL
2.如果需要参数传递,请自行往excuteEnvAddr+0x8写参数(参数最大缓冲区为0x200字节),同时自己的汇编机器码要引入自己参数的地址

HCVMDMA_RunShellCodeX86 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HCVMDMA_RunShellCodeX86 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_搜索特征码x86

描述

特征码搜索(X86)(指定模块名)

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_搜索特征码x86 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_搜索特征码x86 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_搜索特征码x86Ex

描述

特征码搜索(X86)(指定开始地址和搜索大小)

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_搜索特征码x86Ex - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_搜索特征码x86Ex - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_搜索特征码x64

描述

特征码搜索(X64)(指定模块名)

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_搜索特征码x64 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_搜索特征码x64 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_搜索特征码x64Ex

描述

特征码搜索(X64)(指定开始地址和搜索大小)

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_搜索特征码x64Ex - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_搜索特征码x64Ex - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_断开虚拟机

描述

卸载并关闭连接虚拟机

原型

返回值

查看返回值表

注意事项

与HCVMDMA_Init是一对接口
内部会自动调用HCEnv_UnLoadEx接口,使窗口序号和虚拟机进程断开绑定然后释放虚拟机相关资源
一旦调用,则虚拟机需要被关闭后开启而不是重启PID不能一样

HDDMA_断开虚拟机 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_断开虚拟机 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_获取截图环境

描述

初始化截图环境

原型

返回值

查看返回值表
成功:截图句柄,一个虚拟机只能一个,不要多获取,自行保存维护,方便后续调用其他接口传参

注意事项

需要先初始化关联虚拟机HCVMDMA_Init
小技巧:
1.初始化接口有根据不同虚拟机,失败概率不同,为了提高初始化成功率,可以尝试自启动任务管理器,让系统激活起来,初始化完成就可以把任务管理器关掉了
2.步骤:打开虚拟机-关联虚拟机-检查是否有管理器PID-开始初始化键鼠/截图环境-如果失败3次直接重启虚拟机
3.如图操作自启任务管理器就行
4.支持内置保存截图环境一个虚拟机固定一个,自动判断是否之前初始化过
如果有的虚拟机初始化句柄超时建议:

HDDMA_获取截图环境 - 基础示例

.版本 2

.子程序 _DMA截图示例
.局部变量 截图结果, 长整数型
.局部变量 保存路径, 文本型

保存路径 = "C:\temp\dma_screenshot.bmp"

截图结果 = HDDMA_截图一次 (保存路径)

.如果 (截图结果 > 0)
调试输出 ("DMA截图成功: " + 保存路径)
.否则
调试输出 ("DMA截图失败")
.如果结束

HDDMA_获取截图环境 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取截图环境 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_截图一次

描述

截图一次(获取一次虚拟机全屏数据到物理机)

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_截图一次 - 基础示例

.版本 2

.子程序 _HD截图保存示例
.局部变量 窗口序号, 整数型
.局部变量 文件路径, 文本型
.局部变量 截图结果, 长整数型
.局部变量 当前时间, 文本型

窗口序号 = 0
当前时间 = 到文本 (取现行时间戳 ())
文件路径 = "screenshot_" + 当前时间 + ".bmp"

' 确保截图功能已开启
.如果 (HD截图_获取截图状态 (窗口序号) ≠ 1)
.如果 (HD截图_打开 (窗口序号) = 假)
调试输出 ("截图功能开启失败")
返回 (假)
.如果结束
HD系统_延时 (200)
.如果结束

' 执行截图操作
截图结果 = HD截图_截图 (窗口序号, 文件路径, 假)
.如果 (截图结果 = 1)
调试输出 ("截图保存成功")
调试输出 ("文件路径:" + 文件路径)

' 验证文件是否存在
.如果 (文件是否存在 (文件路径))
调试输出 ("文件保存确认成功")
调试输出 ("文件大小:" + 到文本 (取文件尺寸 (文件路径)) + " 字节")
.否则
调试输出 ("文件保存验证失败")
.如果结束
.否则
调试输出 ("截图保存失败,返回值:" + 到文本 (截图结果))
.如果结束

HDDMA_截图一次 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_截图一次 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_开启截图

描述

开启截图(内部会开启一条线程循环调用HCVMDMA_Capture)

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_开启截图 - 基础示例

.版本 2

.子程序 _HD截图扩展打开示例
.局部变量 窗口序号, 整数型
.局部变量 窗口句柄, 整数型
.局部变量 打开结果, 逻辑型
.局部变量 进程ID, 整数型

窗口序号 = 0

' 第一步:获取目标窗口句柄
进程ID = HD窗口_根据程序取进程ID ("notepad.exe")
.如果 (进程ID > 0)
窗口句柄 = HD窗口_根据进程ID取窗口句柄 (进程ID)
.如果 (窗口句柄 > 0)
调试输出 ("目标窗口句柄:" + 到文本 (窗口句柄))
.否则
调试输出 ("获取窗口句柄失败")
返回 (假)
.如果结束
.否则
调试输出 ("未找到目标进程")
返回 (假)
.如果结束

' 第二步:扩展模式打开截图
打开结果 = HD截图_打开Ex (窗口序号, 真, 1, 窗口句柄)
.如果 (打开结果 = 真)
调试输出 ("扩展截图模式开启成功")
调试输出 ("已绑定到窗口句柄:" + 到文本 (窗口句柄))

' 测试截图功能
HD系统_延时 (300)
.如果 (HD截图_获取截图状态 (窗口序号) = 1)
调试输出 ("截图状态正常")
.否则
调试输出 ("截图状态异常")
.如果结束
.否则
调试输出 ("扩展截图模式开启失败")
返回 (假)
.如果结束

HDDMA_开启截图 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_开启截图 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_关闭截图

描述

关闭截图(内部会关闭之前开启的线程)和HCVMDMA_OpenCapture是一对接口

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_关闭截图 - 基础示例

.版本 2

.子程序 _HD截图关闭示例
.局部变量 窗口序号, 整数型
.局部变量 关闭结果, 逻辑型
.局部变量 错误码, 长整数型

窗口序号 = 0

' 检查当前截图状态
.如果 (HD截图_获取截图状态 (窗口序号) ≠ 1)
调试输出 ("截图功能未开启,无需关闭")
返回 (真)
.如果结束

' 关闭截图功能
关闭结果 = HD截图_关闭 (窗口序号)
.如果 (关闭结果 = 真)
调试输出 ("截图功能关闭成功")
.否则
错误码 = HD通用_获取最近返回值 (窗口序号)
.如果 (错误码 = -1033)
调试输出 ("截图功能已经关闭")
返回 (真)
.否则
调试输出 ("截图功能关闭失败,错误码:" + 到文本 (错误码))
返回 (假)
.如果结束
.如果结束

HDDMA_关闭截图 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_关闭截图 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_获取键鼠环境

描述

初始化键鼠环境

原型

返回值

查看返回值表
成功:返回键鼠句柄一个虚拟机只能一个,不要多获取,自行保存维护,方便后续调用其他接口传参

注意事项

需要先初始化关联虚拟机HCVMDMA_Init
小技巧:
1.初始化接口有根据不同虚拟机,失败概率不同,为了提高初始化成功率,可以尝试自启动任务管理器,让系统激活起来,初始化完成就可以把任务管理器关掉了
2.步骤:打开虚拟机-关联虚拟机-检查是否有管理器PID-开始初始化键鼠/截图环境-如果失败3次直接重启虚拟机
3.如图操作自启任务管理器就行
4.支持内置保存键鼠环境一个虚拟机固定一个,自动判断是否之前初始化过
如果有的虚拟机初始化句柄超时建议:

HDDMA_获取键鼠环境 - 基础示例

.版本 2

.子程序 _DMA键盘按键示例
.局部变量 按键结果, 长整数型
.局部变量 键码, 整数型

键码 = 65 ' A键的虚拟键码

按键结果 = HDDMA_键盘敲击 (键码)

.如果 (按键结果 > 0)
调试输出 ("DMA按键成功,键码: " + 到文本 (键码))
.否则
调试输出 ("DMA按键失败")
.如果结束

HDDMA_获取键鼠环境 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_获取键鼠环境 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_鼠标移动

描述

鼠标移动(不包含轨迹)

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_鼠标移动 - 基础示例

.版本 2

.子程序 _DMA鼠标移动示例
.局部变量 移动结果, 长整数型
.局部变量 目标X, 整数型
.局部变量 目标Y, 整数型

目标X = 500
目标Y = 300

移动结果 = HDDMA_鼠标移动 (目标X, 目标Y)

.如果 (移动结果 > 0)
调试输出 ("DMA鼠标移动成功: (" + 到文本 (目标X) + ", " + 到文本 (目标Y) + ")")
.否则
调试输出 ("DMA鼠标移动失败")
.如果结束

HDDMA_鼠标移动 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_鼠标移动 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_左键按下

描述

鼠标左键按下

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_左键按下 - 基础示例

.版本 2

.子程序 测试VNC左键按下, 逻辑型, 公开
.局部变量 窗口序号, 整数型
.局部变量 结果, 逻辑型

窗口序号 = 1

调试输出 ("准备执行VNC左键按下")

' 执行VNC左键按下
结果 = HDVNC_左键按下 (窗口序号)
.如果 (结果 = 真)
调试输出 ("VNC左键按下成功")
调试输出 ("可进行拖拽操作")
.否则
调试输出 ("VNC左键按下失败")
.如果结束

返回 (结果)

HDDMA_左键按下 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_左键按下 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_左键弹起

描述

鼠标左键弹起

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_左键弹起 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_左键弹起 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_左键点击

描述

鼠标左键点击

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_左键点击 - 基础示例

.版本 2

.子程序 _DMA左键点击示例
.局部变量 点击结果, 长整数型
.局部变量 点击X, 整数型
.局部变量 点击Y, 整数型

点击X = 100
点击Y = 200

点击结果 = HDDMA_左键点击 (点击X, 点击Y)

.如果 (点击结果 > 0)
调试输出 ("DMA左键点击成功: (" + 到文本 (点击X) + ", " + 到文本 (点击Y) + ")")
.否则
调试输出 ("DMA左键点击失败")
.如果结束

HDDMA_左键点击 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_左键点击 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_左键双击

描述

鼠标左键双击

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_左键双击 - 基础示例

.版本 2

.子程序 测试VNC左键点击, 逻辑型, 公开
.局部变量 窗口序号, 整数型
.局部变量 结果, 逻辑型

窗口序号 = 1

调试输出 ("准备执行VNC左键点击")

' 执行VNC左键点击
结果 = HDVNC_左键点击 (窗口序号)
.如果 (结果 = 真)
调试输出 ("VNC左键点击成功")
.否则
调试输出 ("VNC左键点击失败")
.如果结束

返回 (结果)

HDDMA_左键双击 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_左键双击 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_中键按下

描述

鼠标中键按下

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_中键按下 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_中键按下 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_中键弹起

描述

鼠标中键弹起

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_中键弹起 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_中键弹起 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_中键点击

描述

鼠标中键点击

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_中键点击 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_中键点击 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_中键双击

描述

鼠标中键双击

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_中键双击 - 基础示例

.版本 2

.子程序 测试前台驱动鼠标点击, 长整数型, 公开
.局部变量 点击X, 整数型
.局部变量 点击Y, 整数型
.局部变量 鼠标键, 整数型
.局部变量 延迟, 整数型
.局部变量 结果, 长整数型

' 设置点击参数
点击X = 500
点击Y = 300
鼠标键 = 1 ' 左键点击
延迟 = 50 ' 50毫秒延迟

调试输出 ("准备执行前台驱动鼠标点击")
调试输出 ("坐标:(", 点击X, ",", 点击Y, ")")
调试输出 ("鼠标键:", .如果真 (鼠标键 = 1, "左键", .如果真 (鼠标键 = 4, "中键", "右键")))
调试输出 ("延迟:", 延迟, "毫秒")

' 执行前台驱动鼠标点击
结果 = HD驱动前台_前台鼠标点击 (点击X, 点击Y, 鼠标键, 延迟)
.如果 (结果 > 0)
调试输出 ("前台驱动鼠标点击成功")
调试输出 ("返回值:", 结果)
.否则
调试输出 ("前台驱动鼠标点击失败")
调试输出 ("错误码:", 结果)
.如果结束

返回 (结果)

HDDMA_中键双击 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_中键双击 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_右键按下

描述

鼠标右键按下

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_右键按下 - 基础示例

.版本 2

.子程序 测试VNC右键按下, 逻辑型, 公开
.局部变量 窗口序号, 整数型
.局部变量 结果, 逻辑型

窗口序号 = 1

调试输出 ("准备执行VNC右键按下")

' 执行VNC右键按下
结果 = HDVNC_右键按下 (窗口序号)
.如果 (结果 = 真)
调试输出 ("VNC右键按下成功")
.否则
调试输出 ("VNC右键按下失败")
.如果结束

返回 (结果)

HDDMA_右键按下 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_右键按下 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_右键弹起

描述

鼠标右键弹起

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_右键弹起 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_右键弹起 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_右键点击

描述

鼠标右键点击

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_右键点击 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_右键点击 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_右键双击

描述

鼠标右键双击

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_右键双击 - 基础示例

.版本 2

.子程序 _HDDMA读短整数示例
.局部变量 窗口序号, 整数型
.局部变量 进程PID, 整数型
.局部变量 目标地址, 长整数型
.局部变量 短整数值, 整数型

窗口序号 = 1
进程PID = 1234
目标地址 = 4194304

短整数值 = HDDMA_读短整数 (窗口序号, 进程PID, 目标地址)

调试输出 ("读取短整数值: " + 到文本 (短整数值))
调试输出 ("详细信息: " + HD通用_获取最近返回json (窗口序号))

HDDMA_右键双击 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_右键双击 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_滚轮滚上

描述

鼠标滚轮滚上

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_滚轮滚上 - 基础示例

.版本 2

.子程序 测试前台驱动键盘弹起, 长整数型, 公开
.局部变量 虚拟键码, 整数型
.局部变量 结果, 长整数型
.局部变量 键名, 文本型

' 弹起之前按住的键
虚拟键码 = 16 ' Shift键
键名 = "Shift键"

调试输出 ("准备执行前台驱动键盘弹起")
调试输出 ("虚拟键码:", 虚拟键码, " (", 键名, ")")

' 执行前台驱动键盘弹起
结果 = HD驱动前台_前台键盘弹起 (虚拟键码)
.如果 (结果 > 0)
调试输出 ("前台驱动键盘弹起成功:", 键名)
调试输出 ("组合键操作完成")
.否则
调试输出 ("前台驱动键盘弹起失败")
.如果结束

返回 (结果)

HDDMA_滚轮滚上 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_滚轮滚上 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_滚轮滚下

描述

鼠标滚轮滚下

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_滚轮滚下 - 基础示例

.版本 2

.子程序 测试VNC滚轮向下, 逻辑型, 公开
.局部变量 窗口序号, 整数型
.局部变量 结果, 逻辑型

窗口序号 = 1

调试输出 ("准备执行VNC滚轮向下滚动")

' 执行VNC滚轮向下滚动
结果 = HDVNC_滚轮滚下 (窗口序号)
.如果 (结果 = 真)
调试输出 ("VNC滚轮向下滚动成功")
.否则
调试输出 ("VNC滚轮向下滚动失败")
.如果结束

返回 (结果)

HDDMA_滚轮滚下 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_滚轮滚下 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_键盘按下

描述

键盘按下

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_键盘按下 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_键盘按下 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_键盘按上

描述

键盘弹起

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_键盘按上 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_键盘按上 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_键盘敲击

描述

键盘敲击

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_键盘敲击 - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_键盘敲击 - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_发送文本Unicode

描述

发送unicode字符串

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_发送文本Unicode - 基础示例

.版本 2

.子程序 Unicode字符串输入示例
.局部变量 窗口序号, 整数型
.局部变量 发送结果, 长整数型
.局部变量 中文文本, 文本型
.局部变量 字节集数据, 字节集

窗口序号 = 1
中文文本 = "你好,这是HD自动化库的Unicode测试!123"

' 转换为Unicode字节集
字节集数据 = 到字节集 (中文文本)

' 发送Unicode字符串
发送结果 = HCMKB_SendStringW (窗口序号, 字节集数据)

.如果 (发送结果 ≥ 1)
调试输出 ("Unicode字符串发送成功")
调试输出 ("发送的内容:" + 中文文本)

延时 (500)

' 继续输入更多中文
中文文本 = "支持中文、英文、数字、符号混合输入!@#$%^&*()"
字节集数据 = 到字节集 (中文文本)

发送结果 = HCMKB_SendStringW (窗口序号, 字节集数据)

.如果 (发送结果 ≥ 1)
调试输出 ("第二段Unicode文本发送成功")
.否则
调试输出 ("第二段Unicode文本发送失败")
.如果结束

.否则
调试输出 ("Unicode字符串发送失败,错误码:" + 到文本 (发送结果))
.如果结束

HDDMA_发送文本Unicode - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_发送文本Unicode - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HDDMA_发送文本Ascii

描述

发送ascii字符串

原型

返回值

查看返回值表

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HDDMA_发送文本Ascii - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HDDMA_发送文本Ascii - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HCVMDMA_GetPidList

描述

获取PID列表

原型

返回值

查看返回值表
返回值:PID数量小于等于0为错误大于0为数量返回JSON:具体进程PID从最近json获取字符串pid1,name1|pid2,name2|pid3,name3|\"|\"分隔符每个进程信息

注意事项

需要先初始化关联虚拟机HCVMDMA_Init
C++解析获取案例:
\n最大51个数量存储量autojsonStr=HCEnv_GetRetJson(windowsIndex);if(jsonStr==NULL)returnERROR_获取数据失败;\npid1,name1|pid2,name2|pid3,name3|vector<string>pidNameArray;Tool::HSplitStringA(jsonStr,pidNameArray,\"|\");if(pidNameArray.size()<=0)returnRET_失败;for(int index=0;index<pidSize;index++){\npid1,name1,vector<string>proArray;Tool::HSplitStringA(pidNameArray[index]+\",\",proArray,\",\");if(proArray.size()<2)continue;if(atoi(proArray[0].c_str())==pid)returnRET_成功;\n元素1就是PID元素2是进程名}returnRET_失败;\n没找到

HCVMDMA_GetPidList - 基础示例

.版本 2

.子程序 _HDDMA遍历PID示例
.局部变量 窗口序号, 整数型
.局部变量 进程数量, 长整数型
.局部变量 JSON数据, 文本型

窗口序号 = 1

进程数量 = HDDMA_遍历PID (窗口序号)

.如果 (进程数量 > 0)
JSON数据 = HD通用_获取最近返回json (窗口序号)
调试输出 ("找到 " + 到文本 (进程数量) + " 个进程")
调试输出 ("进程列表JSON: " + JSON数据)
.否则
调试输出 ("遍历PID失败或无进程")
.如果结束

HCVMDMA_GetPidList - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HCVMDMA_GetPidList - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")

📌 函数: HCVMDMA_IsExistPid

描述

对应虚拟机中的进程PID是否存在

原型

返回值

查看返回值表
返回值:01

注意事项

需要先初始化关联虚拟机HCVMDMA_Init

HCVMDMA_IsExistPid - 基础示例

.版本 2

.子程序 _HDDMA检查PID示例
.局部变量 窗口序号, 整数型
.局部变量 检查PID, 整数型
.局部变量 是否存在, 逻辑型

窗口序号 = 1
检查PID = 1234

是否存在 = HDDMA_PID是否存在 (窗口序号, 检查PID)

.如果 (是否存在 = 真)
调试输出 ("进程 " + 到文本 (检查PID) + " 存在")
.否则
调试输出 ("进程 " + 到文本 (检查PID) + " 不存在")
.如果结束
调试输出 ("详细信息: " + HD通用_获取最近返回json (窗口序号))

HCVMDMA_IsExistPid - 进阶用法

.版本 2
.子程序 示例2
调试输出("示例2")

HCVMDMA_IsExistPid - 高级应用

.版本 2
.子程序 高级示例
调试输出("高级示例")