热血江湖助手 · 分析资料站← 报告总目录助手主页
分区:15_助手版本迭代说明源文件:旧版本更新_v15_无任务栏图标_改动说明_20261008.md篇幅:7.9 KB收录:2026-10-19 17:10

旧版本更新 v15 —— 注入窗口不再出现在任务栏 / Alt+Tab

日期:2026-10-08<br>交付:旧版本更新_修复后_v15.e(2,879,988 字节,含 v14 全部内容)<br>上一版:旧版本更新_修复后_v14.e(未改动,可随时回退)


一、能设置吗?能。而且不用改界面、不用改窗口属性

助手是以 DLL 注入到游戏进程里的,它自己那个窗口(MainDialogWnd)是顶层窗口,<br>所以 Windows 会给它在任务栏单独开一个按钮 —— 于是任务栏上除了游戏图标,还多一个助手图标;<br>Alt+Tab 里也会多出一项。

去掉它的标准做法是给窗口加 WS_EX_TOOLWINDOW(工具窗口) 扩展样式:

⚠️ 有个必须一起做的动作:先清掉 WS_EX_APPWINDOW(0x40000)。<br>易语言生成的顶层窗口通常带着它,而它的优先级高于 WS_EX_TOOLWINDOW —— 只加不减的话,<br>任务栏按钮照样在,看起来像"没生效"。


二、改了哪几处

1. 代码/窗口程序集_MainDialogWnd.form.e.txt —— 主改动

a) _MainDialogWnd_创建完毕 头部加两个局部变量(照抄同文件既有形态):

.子程序 _MainDialogWnd_创建完毕
    .局部变量 界面_原扩展样式, 整数型, 数组
    .局部变量 界面_新扩展样式, 整数型, 数组

b) 在该子程序末尾(创建日志定时器之后)加设置样式的代码块:

    .如果真 (读配置项 (默认配置文件路径, “config”, “任务栏图标”, “0”) ≠ “1”)
        界面_原扩展样式 = 取窗口样式值 (MainDialogWnd.取窗口句柄 (), #界面_GWL_EXSTYLE)
        界面_新扩展样式 = 界面_原扩展样式
        .如果真 (位与 (界面_新扩展样式, #界面_WS_EX_APPWINDOW) ≠ 0)
            界面_新扩展样式 = 界面_新扩展样式 - #界面_WS_EX_APPWINDOW
        .如果真结束
        .如果真 (位与 (界面_新扩展样式, #界面_WS_EX_TOOLWINDOW) = 0)
            界面_新扩展样式 = 界面_新扩展样式 + #界面_WS_EX_TOOLWINDOW
        .如果真结束
        SetWindowLong (MainDialogWnd.取窗口句柄 (), #界面_GWL_EXSTYLE, 界面_新扩展样式)
        置窗口位置大小 (MainDialogWnd.取窗口句柄 (), 0, 0, 0, 0, 0, #界面_SWP_NOMOVE + #界面_SWP_NOSIZE + #界面_SWP_NOZORDER + #界面_SWP_FRAMECHANGED)
        写日志 (“【界面】助手窗口已设为「工具窗口」…(扩展样式 … → …)” + #换行符)
    .如果真结束

几个细节:

"加"就等于"置位";先判一下更稳妥,也顺手避开了本工程从没用过的 位或 命令。

沿用同一写法。

任务栏和 Alt+Tab 可能还按旧样式记着;带上它并同时置 SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER,<br>窗口位置大小层级一个都不动,只让系统重新识别样式。

窗口显示出来就是"干净"的,不会先闪一个任务栏按钮再消失。<br>另外 写日志 在本程序集内可直接调用(它在 ShowDialog 所在程序集里,未标「公开」)。

2. DLL.e.txt —— 新增 2 条命令

.DLL命令 取窗口样式值, 整数型, "user32", "GetWindowLongA"
.DLL命令 置窗口位置大小, 整数型, "user32", "SetWindowPos"

命名故意避开 GetWindowLongA / SetWindowPos —— 精易模块里已经有同名的公开 DLL 声明<br>(第 1780 / 1535 行),重名会撞。本工程原有的写法也是这个套路(如 SetWindowLong 指向 SetWindowLongA)。

3. 常量.e.txt —— 新增 7 条常量

界面_GWL_EXSTYLE        = -20      取/置扩展样式的 nIndex
界面_WS_EX_TOOLWINDOW   = 128      0x80    工具窗口
界面_WS_EX_APPWINDOW    = 262144   0x40000 强制显示任务栏按钮(要先清掉)
界面_SWP_NOSIZE         = 1
界面_SWP_NOMOVE         = 2
界面_SWP_NOZORDER       = 4
界面_SWP_FRAMECHANGED   = 32

全部带 界面_ 前缀:精易模块里已经有 #GWL_EXSTYLE、#SWP_NOMOVE、#SWP_NOSIZE 等同名常量,<br>直接叫 #GWL_EXSTYLE 有撞名风险,加前缀彻底避开。


三、开关:想恢复任务栏图标

<客户端目录>\config\Default.ini 的 [config] 段加一行:

[config]
任务栏图标=1

缺省 = 0(不显示图标)。改成 1 再重进游戏就恢复原样。


四、怎么确认生效

  1. 进游戏后看任务栏 —— 应该只有游戏自己一个图标,不再有助手的
  2. Alt+Tab 走一圈 —— 助手的窗口不出现在列表里
  3. 日志里有这一行(config\log\<角色名>.txt):
【界面】助手窗口已设为「工具窗口」:任务栏不再显示按钮、不进 Alt+Tab(扩展样式 262144 → 128)

扩展样式从 262144(0x40000,APPWINDOW)变成 128(0x80,TOOLWINDOW),就是对的。


五、验证过程

检查结果
补丁锚点4 处,各命中唯一 1 次
原有内容零丢失取当前线程ID / 脚本接口令牌 / 脚本接口地址 / 创建定时器 逐项复核
tools/_check_blocks.py(控制块配对)主本 8 文件 0 处
tools/_check_decls.py(数组性)15 文件 / 69 处数组 / 误声明 0 处
t2e 编译0 错 0 警
e2t 回转0 错 0 警
回转产物逐文件控制块体检0 处
主本 vs 回转 关键点对拍16 项全部一致
.e 二进制标识核实新变量/DLL/常量/日志文本全部搜到;取当前线程ID 等原有标识仍在
项目.etprj已还原

过程中的一次自纠

第一版补丁脚本里,新内容忘了把锚点行本身拼回去,导致 DLL.e.txt 丢掉<br>取当前线程ID 声明、常量.e.txt 丢掉 脚本接口令牌 常量(t2e 能过,但引用它们的代码会全废)。<br>当场发现 → 回滚三个文件 → 给脚本加了通用防呆:

# 新内容必须完整包含原锚点,否则会把锚点那一行原声明一起吃掉
for name, path, old, new in PATCHES:
    assert old in new

以后所有「追加式」补丁都走这条断言。


六、你要做的

  1. 易语言打开 旧版本更新_修复后_v15.e → F7 编译 → 覆盖到每一台机器的 test.dll
  2. 把各机器上的旧 test.dll 换掉(v13 那个语法错误文件 …_v13_语法错误_勿编译.e.bad 别再碰)
  3. 进游戏后按上面第四节确认

⚠️ 旧版本更新_修复后_v14.e / v13a / 原始 .e 全都没动,可随时回退。


七、两点说明

  1. 游戏窗口本身不归助手管。任务栏上游戏那个图标是 YGOnline.exe 自己的窗口,

助手无法(也不应该)去动它。如果你想要的是"挂机时任务栏完全干净",那需要另外处理游戏窗口 ——<br>说一声我再想办法。

  1. Alt+Tab 也一起消失是这个方案的正常副作用(WS_EX_TOOLWINDOW 同时管这两件事)。

如果你希望"任务栏没有、但 Alt+Tab 还能切",那要换用 ITaskbarList 接口单独删任务栏按钮 —— 需要另外加 COM 调用。

本页由 Markdown 报告自动转排;如需原始 md,可在原会话工作区取用。