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 客户端输入框"的接力需求应该不少人会有。