Skip to content

v1.1.1 — 切回游戏聚焦修复 + 版本号嵌入

Latest

Choose a tag to compare

@informalgit informalgit released this 11 Sep 06:58

v1.1.1 修复

从其他窗口(如终端)切回英雄联盟窗口需按两次 Alt+Tab 的问题。

根因

ForceForeground 的慢路径 3 次重试在 6ms 内打完(无 sleep、无 attach),但游戏激活是异步的(实测落地耗时 19-110ms)。SFW(游戏) 发出后系统进入前台切换中间态,GetForegroundWindow() 返回 0。旧代码把 fg==0 误判为「无人持有焦点」,立即执行兜底 SetForegroundWindow(源窗口)亲手取消了自己刚发出的激活。4 次重试 4 次失败,形态完全一致。

修复

  1. WaitForForegroundLanding:Commit 失败后先等最多 300ms(10ms 分块 Sleep + DoEvents),轮询复核。触发条件:fg 变为目标即成功;若连续约 30ms 被外来窗口稳定持有才提前放弃(去抖),之后走原兜底逻辑(失败路径语义不变,不再抢跑撤销在途激活)。
  2. 慢路径真等待:每轮迭代末尾 Sleep(15),迭代 3→8 次,200ms 墙钟上限不变。
  3. attach 目标线程:fg==0 时不再静默跳过 attach,改为 attach 目标窗口的线程(任务栏经典做法,v1.0.5 遗留机制,本次补回)。
  4. WM_APP_START 守卫:等待期间泵消息且 _session==false,不加守卫 Alt+Tab 会开新会话被在途 Commit 拆掉。加 !_committing 守卫丢弃按键。

快路径(普通窗口切换)零改动,行为不变。

版本号嵌入(A+C 方案)

  • 文件头三行 assembly attribute:AssemblyVersion("1.1.1.0") / AssemblyFileVersion("1.1.1.0") / AssemblyInformationalVersion("1.1.1")。盒装 csc 自动编入 PE 的 VS_VERSIONINFO,Explorer 右键属性 → 详细信息可见,build.bat 零改动。
  • 运行时 AppVersion 字段从 InformationalVersion 读回(兼容 .NET 4.x 旧 API)。
  • 托盘悬停显示 AppHopper 1.1.1--log 首行写 AppHopper v1.1.1 starting, pid N
  • 以后发版只改文件头这三行;本地 exe 文件名保持固定(SetStartupApplication.ExecutablePath 写 Run 键,文件名带版本会导致升级后自启动静默失效)。发 Release 时上传资产改名 AppHopper-1.1.1.exe 即可。

v1.1.0 备注

v1.1.0(改名发布)此前只推了 tag,未建 GitHub Release;本次一并补上。

验证

本地 exe 未重新编译(仍为 15:04 构建)。用户需:托盘退出旧 exe → 双击 build.bat → 验证属性 / 悬停 / 日志 / 切回游戏行为。沙箱禁 csc,编译由用户执行。