[BUG] 脚本动作里 qk.Window 无法获取/激活 DeepLocals(Electron)的窗口,报 WINDOW_UNAVAILABLE

BUG反馈 · 49 次浏览
quickerggg 创建于 8小时13分钟前

Quicker 2.3.30.0,Windows 10 22H2(19044)。

在 C# 脚本动作里用 qk.Window 操作 DeepLocals 3.6.3(Electron 应用,装在 D:\DeepLocals\DeepLocals.exe)的窗口,全部失败:

1. qk.Window.GetForeground():DeepLocals 明确在前台时,仍抛
   WINDOW_UNAVAILABLE:窗口当前不能用于该操作:The target process identity could not be verified.
2. qk.Window.ActivateProcess("DeepLocals", "D:\DeepLocals\DeepLocals.exe"):同样报上面这个身份验证失败。
3. qk.Window.FindAll()(无参枚举全部窗口):返回 25 个窗口,uTools、WorkBuddy、资源管理器、PixPin 都在,唯独没有 DeepLocals;而它当时可见、且就在前台。
4. qk.Window.FindAll(title: "DeepLocals")、qk.Window.FindAll(process: "DeepLocals") 也都是空。

关键线索:Quicker 自己的场景识别是能认出这个程序的。同一时段日志里有
DEBUG lo9Y.Ao9H - 持续触发上下文:deeplocals.exe/Exact,来源=ForegroundEvent
说明进程名识别正确、精确匹配、场景快捷键也能正常触发。但同一时刻窗口 API 就报"进程身份无法验证"。也就是进程识别这层没问题,问题在窗口身份验证/枚举这层。

另外枚举出的窗口里 uTools、WorkBuddy 也是 Electron 程序却在列表中,所以不是"Electron 一律不支持"这么简单。怀疑和多进程架构有关:DeepLocals 有主进程+渲染进程+GPU 进程,exe 名相同但 PID 不同;如果取窗口真实属主时穿透到了某个无法验证身份的进程,就会出现"能认出进程名、却验证不了窗口身份"。

顺便说一句,之前 GitHub #603(查找顶层窗口不支持 Microsoft.Photos 这类特殊进程名)您提到"为了识别进程,有些情况做了穿透处理",并在后续版本加了兼容;2.3.30 上本条问题仍然稳定复现,看起来那次修复只覆盖了 UWP,没覆盖 Electron 这种同名多进程的情况。

复现方法(把 DeepLocals 切到前台后运行):

void Main(string quicker_in_param = "")
{
    var fg = qk.Window.GetForeground();   // 这里抛 WINDOW_UNAVAILABLE
    var all = qk.Window.FindAll();        // 返回列表里没有 DeepLocals
    qk.Ui.Notify("windows=" + all.Length, "info", "test");
}

期望:FindAll 能枚举到该窗口;或者至少 GetForeground 在窗口确实位于前台时能正常返回,而不是抛 WINDOW_UNAVAILABLE。

使用场景:想做一个"一键把稿件送进 DeepLocals 跑 AI 改写"的动作——读文件 → 写剪贴板 → 激活目标程序 → Ctrl+V → Enter。现在只能退化成"用户手动把光标点进输入框,脚本直接粘贴",因为激活窗口这一步无解。类似的"把文本送进另一个 AI 客户端输入框"的接力需求应该不少人会有。


回复内容
暂无回复
回复主贴