diff --git a/src/renderer/src/panels/Properties.tsx b/src/renderer/src/panels/Properties.tsx index 724aa6f..978e12d 100644 --- a/src/renderer/src/panels/Properties.tsx +++ b/src/renderer/src/panels/Properties.tsx @@ -443,6 +443,8 @@ function FieldControl({ }) { const raw = node.values[field.key] ?? field.defaultValue; const [picking, setPicking] = useState(false); + const isVisionTarget = /^(OcrOffline_|CV_)/.test(node.componentId); + const isWindowTarget = /^(Window_|System_ConnectRemoteDesktop)/.test(node.componentId); const insertVariable = (expression: string) => { const current = textOf(raw).trim(); @@ -489,6 +491,40 @@ function FieldControl({ setPicking(false); } }; + const pickRegionToField = async () => { + setPicking(true); + try { + const region = await window.rpa.desktop.pickRegion(); + onChange(field.key, region.imagePath); + onToast("已框选并截图:" + region.width + "×" + region.height); + } catch (error) { + onToast(error instanceof Error ? error.message : String(error), "error"); + } finally { + setPicking(false); + } + }; + + const pickWindowToField = async () => { + setPicking(true); + try { + const list = await window.rpa.desktop.pickWindowList(); + if (!list.length) { + onToast("未找到可见窗口", "error"); + return; + } + const numbered = list.map((w: { title: string }, i: number) => (i + 1) + ". " + w.title).join("\n"); + const choice = prompt("选择窗口(输入编号):\n" + numbered); + const idx = Number(choice) - 1; + if (Number.isInteger(idx) && list[idx]) { + onChange(field.key, list[idx].title); + onToast("已选择窗口:" + list[idx].title); + } + } catch (error) { + onToast(error instanceof Error ? error.message : String(error), "error"); + } finally { + setPicking(false); + } + }; if (field.widget === "boolean") { return ( @@ -549,6 +585,16 @@ function FieldControl({ + )} + {isWindowTarget && /title/i.test(field.key) && ( + + )} ) : field.widget === "element" ? (