diff --git a/src/renderer/src/panels/Properties.tsx b/src/renderer/src/panels/Properties.tsx index ced2a20..7968a7b 100644 --- a/src/renderer/src/panels/Properties.tsx +++ b/src/renderer/src/panels/Properties.tsx @@ -609,13 +609,17 @@ function FieldControl({ setPicking(true); try { const region = await window.rpa.desktop.pickRegion(); - if (field.widget === "region") { + // 只有「搜索区域」类字段(displayType=region, 如 CV_* 的 searchRegion)存区域坐标 JSON; + // 「屏幕截图」类字段(displayType=screenShot, 如 Image_* 的图片路径)是把截好的图当模板图用, + // 运行时按文件路径打开该值——存 JSON 会直接 ENOENT, 所以这里存截图落盘后的路径 + const wantsRegionJson = field.widget === "region" && field.displayType !== "screenShot"; + if (wantsRegionJson) { // region 字段存完整信息: 坐标+尺寸+截图路径, 运行时可据此定位区域内容在屏幕上的绝对位置 onChange(field.key, JSON.stringify({ x: region.x, y: region.y, width: region.width, height: region.height, imagePath: region.imagePath })); onToast("已框选区域:" + region.width + "×" + region.height + " @(" + region.x + "," + region.y + ")"); } else { onChange(field.key, region.imagePath); - onToast("已框选并截图:" + region.width + "×" + region.height); + onToast("已截取模板图片:" + region.width + "×" + region.height); } } catch (error) { onToast(error instanceof Error ? error.message : String(error), "error"); @@ -670,7 +674,9 @@ function FieldControl({ : field.widget === "folder" ? "填写完整文件夹路径,或点右侧按钮选择" : field.widget === "region" - ? "填写区域坐标 JSON,或点「屏幕框选」生成" + ? field.displayType === "screenShot" + ? "填模板图片路径,或点「屏幕框选」截取屏幕上的目标图案" + : "填写区域坐标 JSON,或点「屏幕框选」生成" : ""; const hint = field.description || fallbackHint; @@ -772,6 +778,23 @@ function FieldControl({ placeholder={field.placeholder || ""} onChange={(event) => onChange(field.key, event.target.value)} /> + ) : field.widget === "region" && field.displayType === "screenShot" ? ( + // 模板图片类字段(Image_* 的图片路径等): 值是文件路径, 框选是把截图存盘后填路径 +