mirror of
https://github.com/fofolee/uTools-quickcommand.git
synced 2025-06-06 13:04:10 +08:00
145 lines
3.8 KiB
JavaScript
145 lines
3.8 KiB
JavaScript
const { runCsharpFeature } = require("../../csharp");
|
|
|
|
/**
|
|
* 执行自动化操作
|
|
* @param {string} type - 操作类型, 可选值: "inspect"|"click"|"setvalue"|"getvalue"|"select"|"expand"|"scroll"|"wait"|"focus"|"highlight"
|
|
* @param {Object} params - 参数对象
|
|
* @param {string} params.by - 查找方式:"xpath"|"id"|"name"|"condition"
|
|
* @param {string} params.searchValue - 搜索值
|
|
* @param {string} params.window - 窗口标题、句柄、进程名、类名
|
|
* @param {Object} params.options - 附加选项
|
|
* @returns {Promise<Object>} - 操作结果
|
|
*/
|
|
async function runAutomation(
|
|
type,
|
|
window = "",
|
|
by = "xpath",
|
|
searchValue = "",
|
|
params = {}
|
|
) {
|
|
const args = [];
|
|
|
|
if (window) {
|
|
args.push("-window", window);
|
|
}
|
|
|
|
args.push("-type", type);
|
|
|
|
// 通用参数处理
|
|
if (type !== "inspect") {
|
|
switch (by) {
|
|
case "xpath":
|
|
args.push("-xpath", searchValue);
|
|
break;
|
|
case "id":
|
|
args.push("-id", searchValue);
|
|
break;
|
|
case "name":
|
|
args.push("-name", searchValue);
|
|
break;
|
|
case "condition":
|
|
args.push("-condition", searchValue);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 特定命令的参数处理
|
|
switch (type) {
|
|
case "inspect":
|
|
if (params) {
|
|
args.push("-position");
|
|
if (params.x && params.y) {
|
|
args.push(`${params.x},${params.y}`);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "setvalue":
|
|
if (params.newValue !== undefined) {
|
|
args.push("-value", params.newValue);
|
|
}
|
|
if (params.sendenter) {
|
|
args.push("-sendenter");
|
|
}
|
|
break;
|
|
|
|
case "select":
|
|
if (params.item) {
|
|
args.push("-item", params.item);
|
|
}
|
|
break;
|
|
|
|
case "expand":
|
|
if (params.expand !== undefined) {
|
|
args.push("-expand", params.expand);
|
|
}
|
|
break;
|
|
|
|
case "scroll":
|
|
if (params.direction) {
|
|
args.push("-direction", params.direction);
|
|
}
|
|
if (params.amount !== undefined) {
|
|
args.push("-amount", params.amount);
|
|
}
|
|
break;
|
|
|
|
case "wait":
|
|
if (params.condition) {
|
|
args.push("-condition", params.condition);
|
|
}
|
|
if (params.timeout !== undefined) {
|
|
args.push("-timeout", params.timeout);
|
|
}
|
|
break;
|
|
|
|
case "highlight":
|
|
if (params.duration !== undefined) {
|
|
args.push("-duration", params.duration);
|
|
}
|
|
break;
|
|
|
|
case "sendkeys":
|
|
if (params.keys) {
|
|
args.push("-keys", params.keys);
|
|
}
|
|
break;
|
|
}
|
|
|
|
let error;
|
|
try {
|
|
const result = await runCsharpFeature("automation", args);
|
|
if (result) {
|
|
const resultStr = result.toString().trim();
|
|
if (type === "inspect") return JSON.parse(resultStr);
|
|
if (resultStr === "true") return { success: true };
|
|
try {
|
|
return { success: true, data: JSON.parse(resultStr) };
|
|
} catch (err) {
|
|
return { success: true, data: resultStr };
|
|
}
|
|
}
|
|
} catch (err) {
|
|
error = err.toString().trim();
|
|
}
|
|
|
|
if (type === "inspect") return { error };
|
|
return { success: false, error };
|
|
}
|
|
|
|
module.exports = {
|
|
inspect: () => runAutomation("inspect"),
|
|
inspectPosition: (position) =>
|
|
runAutomation("inspect", null, null, null, position || {}),
|
|
click: (...args) => runAutomation("click", ...args),
|
|
setvalue: (...args) => runAutomation("setvalue", ...args),
|
|
getvalue: (...args) => runAutomation("getvalue", ...args),
|
|
select: (...args) => runAutomation("select", ...args),
|
|
expand: (...args) => runAutomation("expand", ...args),
|
|
scroll: (...args) => runAutomation("scroll", ...args),
|
|
wait: (...args) => runAutomation("wait", ...args),
|
|
focus: (...args) => runAutomation("focus", ...args),
|
|
highlight: (...args) => runAutomation("highlight", ...args),
|
|
sendkeys: (...args) => runAutomation("sendkeys", ...args),
|
|
};
|