fix: 修复桌面元素拾取时窗口未恢复的问题并优化脚本功能
This commit is contained in:
1 parent
a12e6cb0bd
commit
b9bd6d671b
2 files changed
+44
-21
No files matched your search
+17
-12
@@ -30,19 +30,24 @@ export interface DesktopPickResult {
|
||||
export async function pickDesktopElement(): Promise<DesktopPickResult> {
|
||||
const appWindows = BrowserWindow.getAllWindows().filter(w => !w.isDestroyed() && w.isVisible());
|
||||
for (const w of appWindows) w.minimize();
|
||||
const { stdout } = await run("powershell.exe", ["-NoProfile", "-STA", "-ExecutionPolicy", "Bypass", "-File", pickerScriptPath()], { timeout: 180000, windowsHide: false, maxBuffer: 4 * 1024 * 1024 });
|
||||
const jsonLine = stdout.trim().split(/\r?\n/).reverse().find(l => l.trim().startsWith("{"));
|
||||
if (!jsonLine) throw new RuntimeError("picker_failed", "拾取未返回结果");
|
||||
const parsed = JSON.parse(jsonLine) as Omit<DesktopPickResult, "selector">;
|
||||
if (parsed.cancelled) return { ...parsed, selector: "" };
|
||||
const parts: string[] = [];
|
||||
if (parsed.window) parts.push("window=" + parsed.window);
|
||||
if (parsed.name) parts.push("name=" + parsed.name);
|
||||
if (parsed.controlType) parts.push("type=" + parsed.controlType);
|
||||
if (parsed.automationId) parts.push("id=" + parsed.automationId);
|
||||
return { ...parsed, selector: parts.join(";") };
|
||||
try {
|
||||
const { stdout } = await run("powershell.exe", ["-NoProfile", "-STA", "-ExecutionPolicy", "Bypass", "-File", pickerScriptPath()], { timeout: 180000, windowsHide: true, maxBuffer: 4 * 1024 * 1024 });
|
||||
const jsonLine = stdout.trim().split(/\r?\n/).reverse().find(l => l.trim().startsWith("{"));
|
||||
if (!jsonLine) throw new RuntimeError("picker_failed", "拾取未返回结果");
|
||||
const parsed = JSON.parse(jsonLine) as Omit<DesktopPickResult, "selector">;
|
||||
if (parsed.cancelled) return { ...parsed, selector: "" };
|
||||
const parts: string[] = [];
|
||||
if (parsed.window) parts.push("window=" + parsed.window);
|
||||
if (parsed.name) parts.push("name=" + parsed.name);
|
||||
if (parsed.controlType) parts.push("type=" + parsed.controlType);
|
||||
if (parsed.automationId) parts.push("id=" + parsed.automationId);
|
||||
return { ...parsed, selector: parts.join(";") };
|
||||
} finally {
|
||||
for (const w of appWindows) {
|
||||
if (!w.isDestroyed()) w.restore();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function listVisibleWindows(): Promise<Array<{ title: string; process: string }>> {
|
||||
const { stdout } = await run("powershell.exe", ["-NoProfile", "-ExecutionPolicy", "Bypass", "-File", pickerScriptPath(), "-Mode", "windows"], { timeout: 30000, windowsHide: true, maxBuffer: 4 * 1024 * 1024 });
|
||||
const jsonLine = stdout.trim().split(/\r?\n/).reverse().find(l => l.trim().startsWith("["));
|
||||
|
||||
Reference in new issue
Block a user