槽偏移遍历 · 写日志
YGOnline.exe 32位 · [IFManager] = 0x0188C61C = 25740828 · 2026-09-28
整段粘贴:第一行必须是 .版本 2,缺这行易语言不认后面的 .子程序 / .参数。
行首零缩进:别自己先缩,易语言会按 如果/循环 自动缩进。
复制全部:按本页从上到下的顺序拼接,可直接一次粘进工程。
.版本 2
.常量 IFManager基址, "25740828"
.常量 窗口可见标志, "64"
.常量 控件类型偏移, "8"
.常量 控件ID偏移, "12"
.常量 面板类型码, "24"
.常量 窗口子槽起点, "768"
.常量 窗口子槽个数, "192"
.版本 2
.子程序 读控件类名, 文本型
.参数 对象, 整数型
.局部变量 虚表, 整数型
.局部变量 定位器, 整数型
.局部变量 类型描述符, 整数型
.局部变量 名, 文本型
.局部变量 长度, 整数型
.如果真 (对象 ≤ 65536)
返回 (“”)
.如果真结束
虚表 = 内存_读整数型 (全局_进程句柄, 对象)
.如果真 (虚表 ≤ 65536)
返回 (“”)
.如果真结束
定位器 = 内存_读整数型 (全局_进程句柄, 虚表 - 4)
.如果真 (定位器 ≤ 65536)
返回 (“”)
.如果真结束
类型描述符 = 内存_读整数型 (全局_进程句柄, 定位器 + 12)
.如果真 (类型描述符 ≤ 65536)
返回 (“”)
.如果真结束
名 = 内存_读文本型 (全局_进程句柄, 类型描述符 + 12)
长度 = 取文本长度 (名)
.如果真 (长度 > 2)
.如果真 (取文本右边 (名, 2) = “@@”)
名 = 取文本左边 (名, 长度 - 2)
.如果真结束
.如果真结束
返回 (名)
.版本 2
.子程序 遍历槽偏移_仅显示
.局部变量 接口管理, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 槽偏移, 整数型
.局部变量 窗口对象, 整数型
.局部变量 子对象, 整数型
.局部变量 可见, 整数型
.局部变量 面板数, 整数型
.局部变量 可见数, 整数型
.局部变量 可见明细, 文本型
.局部变量 窗口名, 文本型
.局部变量 显示数, 整数型
.局部变量 前缀, 文本型
前缀 = 自定义时间 () + “[槽扫] ”
接口管理 = 内存_读整数型 (全局_进程句柄, #IFManager基址)
.如果真 (接口管理 ≤ 65536)
挂机信息.加入文本 (前缀 + “IFManager 未读到(” + 到文本 (接口管理) + “),遍历中止” + #换行符 + #换行符)
返回 ()
.如果真结束
显示数 = 0
.计次循环首 (#窗口子槽个数, i)
槽偏移 = #窗口子槽起点 + (i - 1) × 4
窗口对象 = 内存_读整数型 (全局_进程句柄, 接口管理 + 槽偏移)
.如果真 (窗口对象 > 65536)
面板数 = 0
可见数 = 0
可见明细 = “”
.计次循环首 (#窗口子槽个数, j)
子对象 = 内存_读整数型 (全局_进程句柄, 窗口对象 + #窗口子槽起点 + (j - 1) × 4)
.如果真 (子对象 > 65536)
.如果真 (内存_读整数型 (全局_进程句柄, 子对象 + #控件类型偏移) = #面板类型码)
面板数 = 面板数 + 1
可见 = 内存_读整数型 (全局_进程句柄, 子对象 + #窗口可见标志)
.如果真 (可见 = 1)
可见数 = 可见数 + 1
可见明细 = 可见明细 + “ 0x” + 取十六进制文本 (#窗口子槽起点 + (j - 1) × 4)
.如果真结束
.如果真结束
.如果真结束
.计次循环尾 ()
.如果真 (可见数 > 0)
窗口名 = 读控件类名 (窗口对象)
显示数 = 显示数 + 1
挂机信息.加入文本 (前缀 + “显示中:槽 ” + 到文本 (槽偏移) + “ (0x” + 取十六进制文本 (槽偏移) + “) ” + 窗口名 + “ ID ” + 到文本 (内存_读整数型 (全局_进程句柄, 窗口对象 + #控件ID偏移)) + “ 面板 ” + 到文本 (面板数) + “ 可见 ” + 到文本 (可见数) + 可见明细 + #换行符)
.如果真结束
.如果真结束
.计次循环尾 ()
.如果真 (显示数 = 0)
挂机信息.加入文本 (前缀 + “当前没有任何接口窗口在显示” + #换行符)
.如果真结束
挂机信息.加入文本 (前缀 + “遍历完成:在显示 ” + 到文本 (显示数) + “ 个窗口” + #换行符 + #换行符)
返回 ()
.版本 2
.子程序 遍历槽偏移_全部
.局部变量 接口管理, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 槽偏移, 整数型
.局部变量 窗口对象, 整数型
.局部变量 子对象, 整数型
.局部变量 可见, 整数型
.局部变量 面板数, 整数型
.局部变量 可见数, 整数型
.局部变量 可见明细, 文本型
.局部变量 窗口名, 文本型
.局部变量 非空数, 整数型
.局部变量 显示数, 整数型
.局部变量 行, 文本型
.局部变量 前缀, 文本型
前缀 = 自定义时间 () + “[槽扫] ”
接口管理 = 内存_读整数型 (全局_进程句柄, #IFManager基址)
.如果真 (接口管理 ≤ 65536)
挂机信息.加入文本 (前缀 + “IFManager 未读到(” + 到文本 (接口管理) + “),遍历中止” + #换行符 + #换行符)
返回 ()
.如果真结束
挂机信息.加入文本 (前缀 + “IFManager 对象 ” + 到文本 (接口管理) + “ 开始遍历 ” + 到文本 (#窗口子槽个数) + “ 个槽” + #换行符)
非空数 = 0
显示数 = 0
.计次循环首 (#窗口子槽个数, i)
槽偏移 = #窗口子槽起点 + (i - 1) × 4
窗口对象 = 内存_读整数型 (全局_进程句柄, 接口管理 + 槽偏移)
.如果真 (窗口对象 > 65536)
非空数 = 非空数 + 1
窗口名 = 读控件类名 (窗口对象)
.如果真 (窗口名 = “”)
窗口名 = “(非接口对象)”
.如果真结束
面板数 = 0
可见数 = 0
可见明细 = “”
.计次循环首 (#窗口子槽个数, j)
子对象 = 内存_读整数型 (全局_进程句柄, 窗口对象 + #窗口子槽起点 + (j - 1) × 4)
.如果真 (子对象 > 65536)
.如果真 (内存_读整数型 (全局_进程句柄, 子对象 + #控件类型偏移) = #面板类型码)
面板数 = 面板数 + 1
可见 = 内存_读整数型 (全局_进程句柄, 子对象 + #窗口可见标志)
.如果真 (可见 = 1)
可见数 = 可见数 + 1
可见明细 = 可见明细 + “ 0x” + 取十六进制文本 (#窗口子槽起点 + (j - 1) × 4)
.如果真结束
.如果真结束
.如果真结束
.计次循环尾 ()
行 = 前缀 + “槽 ” + 到文本 (槽偏移) + “ (0x” + 取十六进制文本 (槽偏移) + “) ” + 窗口名 + “ 对象 ” + 到文本 (窗口对象) + “ ID ” + 到文本 (内存_读整数型 (全局_进程句柄, 窗口对象 + #控件ID偏移)) + “ 面板 ” + 到文本 (面板数) + “ 可见 ” + 到文本 (可见数)
.如果真 (可见数 > 0)
行 = 行 + 可见明细 + “ ← 显示中”
显示数 = 显示数 + 1
.如果真结束
挂机信息.加入文本 (行 + #换行符)
.如果真结束
.计次循环尾 ()
挂机信息.加入文本 (前缀 + “遍历完成:非空槽 ” + 到文本 (非空数) + “ 个,其中在显示 ” + 到文本 (显示数) + “ 个” + #换行符 + #换行符)
返回 ()