# initiation_ok 控件分析 > 分析对象:`D:\rxjh2025\client\YGOnline.exe`(ImageBase 0x400000) > 日期:2026-09-18 | 方法:字符串定位 → 指针交叉引用 → capstone 反汇编 ## 结论先说 | 问题 | 结论 | |---|---| | `initiation_ok_over.bmp` 是什么 | **通用「确定」按钮贴图**(over/click 两态:`initiation_ok_over.bmp` + `initiation_ok_click.bmp`),不是助手窗口的控件 | | 控件 ID | **两个**,两个不同窗口复用同一贴图:**ID=0x62** 和 **ID=0x72** | | 是否属于助手窗口 | **否**。0x62 / 0x72 都不在助手 `0xA3F700` 跳转表的直发清单里;创建处父对象用的成员偏移(`+0x330`、`+0x3F4`、`+0x438`)与助手窗口结构不符 | ## 静态证据 ### 字符串与交叉引用 - 完整路径 `..\datas\interface\DATA\etc\initiation_ok_over.bmp` 在镜像中仅 1 处:VA `0x10A52DC`(click 版 `0x10A5310`) - 代码引用共 7 处,集中在两个函数簇:`0xAB0CBE~0xAB0D08`、`0xABD7FF~0xABD956` ### 创建点 1:ID = 0x62(危险操作确认弹窗) ```asm 0x00AB0D02 push 0x10a5310 ; click 贴图 0x00AB0D07 push 0x10a52dc ; over 贴图 0x00AB0D0C push 0x62 ; ★ 控件 ID = 0x62 0x00AB0D0E push this 0x00AB0D21 push (y+0x1B4) ; y = 436 0x00AB0D2E push (x+0xD5) ; x = 213 0x00AB0D3F call 0xcb28c0 ; 创建按钮(对象大小 0x548) → 指针存回 [this+0x358] ``` 同窗口背景:`window_npc\window_exchangebox_danger.bmp`(**红色警示确认框**)+ Close_normal/Close_click 关闭按钮。 ### 创建点 2:ID = 0x72(武功相关窗口) ```asm 0x00ABD950 push 0x10a5310 ; click 贴图 0x00ABD955 push 0x10a52dc ; over 贴图 0x00ABD95A push 0x72 ; ★ 控件 ID = 0x72 0x00ABD974 push 0x9E ; x = 158 0x00ABD979 push 0xD5 ; y = 213 0x00ABD984 call 0xcb28c0 → 指针存回 [this+0x43C],并把 [this+0x3F4]+0x28 / +0x2C 挂到按钮 +0x38 / +0x3C ``` 同窗口还引用:`button_mugong_over/click.bmp`(**무공 = 武功**按钮)。 ## 用途判定 结合三要素——`window_exchangebox_danger`(红色警示框背景)+ `button_mugong`(武功)+ `initiation_ok`(确定)——这套 UI 是**危险操作的确认弹窗**,最典型的就是**武功初始化(洗点)确认框**:`initiation_ok` 就是弹窗右下角那颗「确定」按钮,点了即执行不可逆操作。 ## 对辅助开发的意义 - 不要把 0x62 / 0x72 当助手控件发命令:父窗口不对,直发无效果 - 若要自动化「危险确认弹窗」,需先定位 `window_exchangebox_danger` 对应的窗口实例(`[this+0x3F4]` 一族),再对其控件指针(父+0x358 / 父+0x43C)模拟点击 - 贴图名 `initiation_ok_*` 可作为识别该弹窗是否在屏的特征串