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({
) : field.widget === "element" ? (