窗口是否弹出(参数防呆+初始化)
热血江湖 YGOnline.exe · 2026-09-28
整段粘贴:第一行必须是 .版本 2,缺这行易语言不认后面的 .子程序 / .参数。
行首零缩进:别自己先缩,易语言会按 如果/循环 自动缩进。
复制全部:按本页从上到下的顺序拼接,可直接一次粘进工程。
备选块:标题含「备选 / 可选」的块不参与一键复制,按需单独取用 —— 别和主方案一起粘,会重复定义同名子程序。
.版本 2
.常量 IFManager基址, "25740828"
.常量 窗口可见标志, "64"
.常量 控件类型偏移, "8"
.常量 面板类型码, "24"
.常量 控件ID偏移, "12"
.常量 窗口子槽起点, "768"
.常量 窗口子槽终点, "1532"
.常量 窗口子槽个数, "192"
.常量 窗口主面板偏移, "816"
.常量 交易窗口槽, "1236"
.常量 组队窗口槽, "1256"
.常量 通知窗口槽, "1028"
.常量 交易接受, "908"
.常量 交易拒绝, "916"
.常量 组队接受, "952"
.常量 组队拒绝, "960"
.版本 2
.子程序 窗口是否弹出, 逻辑型
.参数 槽偏移, 整数型
.局部变量 接口管理, 整数型
.局部变量 窗口对象, 整数型
.局部变量 子对象, 整数型
.局部变量 i, 整数型
.如果真 (槽偏移 < #窗口子槽起点 或 槽偏移 > #窗口子槽终点)
挂机信息.加入文本 (自定义时间 () + “[窗判] 槽偏移非法:” + 到文本 (槽偏移) + “(合法 768~1532),多半是没调 窗口槽位表_初始化 ()” + #换行符)
返回 (假)
.如果真结束
接口管理 = 内存_读整数型 (全局_进程句柄, #IFManager基址)
.如果真 (接口管理 ≤ 65536)
挂机信息.加入文本 (自定义时间 () + “[窗判] IFManager 未读到(” + 到文本 (接口管理) + “)” + #换行符)
返回 (假)
.如果真结束
窗口对象 = 内存_读整数型 (全局_进程句柄, 接口管理 + 槽偏移)
.如果真 (窗口对象 ≤ 65536)
返回 (假)
.如果真结束
.计次循环首 (#窗口子槽个数, i)
子对象 = 内存_读整数型 (全局_进程句柄, 窗口对象 + #窗口子槽起点 + (i - 1) × 4)
.如果真 (子对象 > 65536)
.如果真 (内存_读整数型 (全局_进程句柄, 子对象 + #控件类型偏移) = #面板类型码)
.如果真 (内存_读整数型 (全局_进程句柄, 子对象 + #窗口可见标志) = 1)
返回 (真)
.如果真结束
.如果真结束
.如果真结束
.计次循环尾 ()
返回 (假)
.版本 2
.全局变量 全局_槽位表就绪, 逻辑型
.版本 2
.子程序 窗口槽位表_初始化
窗口.主界面 = 940
窗口.聊天框 = 944
窗口.状态栏 = 948
窗口.背包 = 952
窗口.中央消息 = 960
窗口.武功栏 = 964
窗口.选项 = 972
窗口.小地图 = 976
窗口.帮助 = 980
窗口.退出 = 984
窗口.任务 = 988
窗口.信使 = 1008
窗口.染色 = 1016
窗口.脱色 = 1020
窗口.幸运箱 = 1024
窗口.通知 = 1028
窗口.网吧福利 = 1036
窗口.邮寄包裹 = 1040
窗口.计时器 = 1044
窗口.寻路 = 1048
窗口.门派召集 = 1052
窗口.血战 = 1056
窗口.转服 = 1064
窗口.别号 = 1068
窗口.助手 = 1072
窗口.变身宠物 = 1076
窗口.美发 = 1084
窗口.四柱 = 1096
窗口.福袋 = 1100
窗口.制作 = 1112
窗口.制药 = 1120
窗口.改名 = 1128
窗口.组队搜索 = 1136
窗口.商城道具 = 1144
窗口.商城选择 = 1148
窗口.属性石 = 1164
窗口.礼券 = 1172
窗口.英雄武器 = 1180
窗口.传送到队伍 = 1196
窗口.祈愿 = 1200
窗口.宠物背包 = 1208
窗口.宠物信息 = 1212
窗口.四柱系统 = 1220
窗口.门派战 = 1224
窗口.换装 = 1228
窗口.回城 = 1232
窗口.交易 = 1236
窗口.属性石强化 = 1240
窗口.宏 = 1244
窗口.邮件 = 1248
窗口.武功学习 = 1252
窗口.组队 = 1256
窗口.个人商店 = 1260
窗口.商城窗口 = 1268
窗口.攻城战 = 1272
窗口.网页 = 1276
窗口.网页商城 = 1280
窗口.护符 = 1284
窗口.门派 = 1288
窗口.副本队伍 = 1300
窗口.社区 = 1304
窗口.角色信息 = 1308
窗口.制造 = 1312
窗口.选项UI = 1316
窗口.魂宠进化 = 1332
窗口.魂宠强化 = 1336
窗口.魂宠仓库 = 1340
窗口.魂宠封印 = 1344
窗口.表情 = 1348
窗口.弹珠进化 = 1352
窗口.门派改名 = 1356
窗口.副本脚本 = 1360
返回 ()
.版本 2
.子程序 挂机主循环
.局部变量 继续跑, 逻辑型
窗口槽位表_初始化 ()
继续跑 = 真
.判断循环首 (继续跑)
挂机逻辑 ()
延时 (1000)
.判断循环尾 ()
返回 ()
如果你用的是"时钟周期"事件,就把 `窗口槽位表_初始化 ()` 写在时钟事件的第一行,
或者写在 `_启动窗口_创建完毕` 里 —— 两者都行,推荐后者更干净。
.版本 2
.子程序 自动处理交易
.局部变量 接口管理, 整数型
.局部变量 交易窗, 整数型
.局部变量 按钮, 整数型
窗口槽位表_初始化 ()
.如果真 (窗口是否弹出 (窗口.交易) = 假)
返回 ()
.如果真结束
接口管理 = 内存_读整数型 (全局_进程句柄, #IFManager基址)
交易窗 = 内存_读整数型 (全局_进程句柄, 接口管理 + 窗口.交易)
按钮 = 内存_读整数型 (全局_进程句柄, 交易窗 + #交易接受)
.如果真 (按钮 > 65536)
按钮点击call (内存_读整数型 (全局_进程句柄, 按钮 + #控件ID偏移))
.如果真结束
返回 ()
.版本 2
.子程序 自动处理交易_常量版
.局部变量 接口管理, 整数型
.局部变量 交易窗, 整数型
.局部变量 按钮, 整数型
.如果真 (窗口是否弹出 (1236) = 假)
返回 ()
.如果真结束
接口管理 = 内存_读整数型 (全局_进程句柄, #IFManager基址)
交易窗 = 内存_读整数型 (全局_进程句柄, 接口管理 + 1236)
按钮 = 内存_读整数型 (全局_进程句柄, 交易窗 + #交易接受)
.如果真 (按钮 > 65536)
按钮点击call (内存_读整数型 (全局_进程句柄, 按钮 + #控件ID偏移))
.如果真结束
返回 ()
用工程常量也一样:`.常量 窗口_交易, "1236"` → `窗口是否弹出 (#窗口_交易)`。
.版本 2
.子程序 自动处理交易_就地版
.局部变量 窗口, 窗口槽位表
.局部变量 接口管理, 整数型
.局部变量 交易窗, 整数型
.局部变量 按钮, 整数型
窗口.交易 = 1236
.如果真 (窗口是否弹出 (窗口.交易) = 假)
返回 ()
.如果真结束
接口管理 = 内存_读整数型 (全局_进程句柄, #IFManager基址)
交易窗 = 内存_读整数型 (全局_进程句柄, 接口管理 + 窗口.交易)
按钮 = 内存_读整数型 (全局_进程句柄, 交易窗 + #交易接受)
.如果真 (按钮 > 65536)
按钮点击call (内存_读整数型 (全局_进程句柄, 按钮 + #控件ID偏移))
.如果真结束
返回 ()