From b676801b9ada65ffca57880198282a73b7ad3354 Mon Sep 17 00:00:00 2001 From: fofolee Date: Thu, 9 Jan 2025 01:01:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E6=8C=89=E9=94=AE=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=B8=B8=E7=94=A8=E6=8C=89=E9=94=AE=EF=BC=8C=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E6=93=8D=E4=BD=9C=E6=96=B0=E5=A2=9E=E6=8C=89=E9=94=AE?= =?UTF-8?q?=E5=BA=8F=E5=88=97=EF=BC=8C=E7=B3=BB=E7=BB=9F=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=B3=E9=97=AD=E8=BF=9B=E7=A8=8B=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9EuTools=E5=8A=9F=E8=83=BD=E5=88=86=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E9=83=A8=E5=88=86=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/lib/quickcomposer/simulate/index.js | 3 + .../lib/quickcomposer/simulate/keyboardTap.js | 34 + .../composer/simulate/KeyEditor.vue | 372 +++++++-- .../composer/simulate/KeySequenceEditor.vue | 761 ++++++++++++++++++ src/js/composer/cardComponents.js | 26 +- src/js/composer/commands/index.js | 2 + src/js/composer/commands/otherCommands.js | 12 - src/js/composer/commands/simulateCommands.js | 25 +- src/js/composer/commands/systemCommands.js | 23 + src/js/composer/commands/utoolsCommand.js | 87 ++ 10 files changed, 1277 insertions(+), 68 deletions(-) create mode 100644 plugin/lib/quickcomposer/simulate/keyboardTap.js create mode 100644 src/components/composer/simulate/KeySequenceEditor.vue create mode 100644 src/js/composer/commands/utoolsCommand.js diff --git a/plugin/lib/quickcomposer/simulate/index.js b/plugin/lib/quickcomposer/simulate/index.js index f7a3847..e4bce25 100644 --- a/plugin/lib/quickcomposer/simulate/index.js +++ b/plugin/lib/quickcomposer/simulate/index.js @@ -1,9 +1,12 @@ const { findImage } = require("./imageFinder"); const { captureScreen } = require("./screenCapture"); const sendText = require("./sendText"); +const { keyboardTap, keySequence } = require("./keyboardTap"); module.exports = { findImage, captureScreen, sendText, + keyboardTap, + keySequence, }; diff --git a/plugin/lib/quickcomposer/simulate/keyboardTap.js b/plugin/lib/quickcomposer/simulate/keyboardTap.js new file mode 100644 index 0000000..3b239bf --- /dev/null +++ b/plugin/lib/quickcomposer/simulate/keyboardTap.js @@ -0,0 +1,34 @@ +const keyboardTap = (keys, options = {}) => { + const { repeatCount = 1, repeatInterval = 0, keyDelay = 0 } = options; + + // 执行重复操作 + const repeat = () => { + for (let i = 0; i < repeatCount; i++) { + // 执行按键操作 + window.utools.simulateKeyboardTap(...keys); + + // 如果有重复间隔且不是最后一次,则等待 + if (repeatInterval > 0 && i < repeatCount - 1) { + quickcommand.sleep(repeatInterval); + } + } + + // 如果有按键后延迟,则等待 + if (keyDelay > 0) { + quickcommand.sleep(keyDelay); + } + }; + + return repeat(); +}; + +const keySequence = (sequence, { interval = 100 } = {}) => { + sequence.forEach((keys, index) => { + keyboardTap(keys); + if (index < sequence.length - 1) { + quickcommand.sleep(interval); + } + }); +}; + +module.exports = { keyboardTap, keySequence }; diff --git a/src/components/composer/simulate/KeyEditor.vue b/src/components/composer/simulate/KeyEditor.vue index 89ee876..9371ff4 100644 --- a/src/components/composer/simulate/KeyEditor.vue +++ b/src/components/composer/simulate/KeyEditor.vue @@ -51,7 +51,52 @@ @@ -104,11 +149,250 @@ + + diff --git a/src/js/composer/cardComponents.js b/src/js/composer/cardComponents.js index 1ed8732..c919a92 100644 --- a/src/js/composer/cardComponents.js +++ b/src/js/composer/cardComponents.js @@ -1,14 +1,17 @@ import { defineAsyncComponent } from "vue"; -// UI Components +// 模拟操作组件 export const KeyEditor = defineAsyncComponent(() => import("src/components/composer/simulate/KeyEditor.vue") ); export const ImageSearchEditor = defineAsyncComponent(() => import("components/composer/simulate/ImageSearchEditor.vue") ); +export const KeySequenceEditor = defineAsyncComponent(() => + import("src/components/composer/simulate/KeySequenceEditor.vue") +); -// Control Flow Components +// 控制流组件 export const ConditionalJudgment = defineAsyncComponent(() => import("components/composer/control/ConditionalJudgment.vue") ); @@ -31,18 +34,24 @@ export const TryCatchControl = defineAsyncComponent(() => import("components/composer/control/TryCatchControl.vue") ); -// Editor Components +// 网络组件 export const UBrowserEditor = defineAsyncComponent(() => import("components/composer/ubrowser/UBrowserEditor.vue") ); export const AxiosConfigEditor = defineAsyncComponent(() => import("src/components/composer/network/AxiosConfigEditor.vue") ); + +// 数据组件 export const RegexEditor = defineAsyncComponent(() => import("components/composer/data/regex/RegexEditor.vue") ); -// Crypto Components +export const ZlibEditor = defineAsyncComponent(() => + import("src/components/composer/data/ZlibEditor.vue") +); + +// 加密组件 export const SymmetricCryptoEditor = defineAsyncComponent(() => import("src/components/composer/coding/SymmetricCryptoEditor.vue") ); @@ -50,20 +59,17 @@ export const AsymmetricCryptoEditor = defineAsyncComponent(() => import("src/components/composer/coding/AsymmetricCryptoEditor.vue") ); -// File Components +// 文件组件 export const FileOperationEditor = defineAsyncComponent(() => import("components/composer/file/FileOperationEditor.vue") ); -// System Components +// 系统组件 export const SystemCommandEditor = defineAsyncComponent(() => import("components/composer/system/SystemCommandEditor.vue") ); -export const ZlibEditor = defineAsyncComponent(() => - import("src/components/composer/data/ZlibEditor.vue") -); - +// UI组件 export const SelectListEditor = defineAsyncComponent(() => import("components/composer/ui/SelectListEditor.vue") ); diff --git a/src/js/composer/commands/index.js b/src/js/composer/commands/index.js index c2f1fe8..41d362d 100644 --- a/src/js/composer/commands/index.js +++ b/src/js/composer/commands/index.js @@ -10,12 +10,14 @@ import { uiCommands } from "./uiCommands"; import { codingCommands } from "./codingCommand"; import { mathCommands } from "./mathCommands"; import { userdataCommands } from "./userdataCommands"; +import { utoolsCommands } from "./utoolsCommand"; export const commandCategories = [ fileCommands, networkCommands, systemCommands, notifyCommands, + utoolsCommands, dataCommands, codingCommands, controlCommands, diff --git a/src/js/composer/commands/otherCommands.js b/src/js/composer/commands/otherCommands.js index 510066f..b7edf86 100644 --- a/src/js/composer/commands/otherCommands.js +++ b/src/js/composer/commands/otherCommands.js @@ -3,18 +3,6 @@ export const otherCommands = { icon: "more_horiz", defaultOpened: false, commands: [ - { - value: "utools.redirect", - label: "转至指定插件", - config: [ - { - key: "pluginName", - label: "要跳转至的插件名称", - type: "varInput", - icon: "alt_route", - }, - ], - }, { value: "quickcommand.sleep", label: "添加延时", diff --git a/src/js/composer/commands/simulateCommands.js b/src/js/composer/commands/simulateCommands.js index 2eb3e52..e3dc683 100644 --- a/src/js/composer/commands/simulateCommands.js +++ b/src/js/composer/commands/simulateCommands.js @@ -4,11 +4,34 @@ export const simulateCommands = { defaultOpened: false, commands: [ { - value: "utools.simulateKeyboardTap", + value: "quickcomposer.simulate.keyboardTap", label: "模拟按键", config: [], component: "KeyEditor", }, + { + value: "quickcomposer.simulate.keySequence", + label: "按键序列", + description: "按顺序执行多个按键操作", + component: "KeySequenceEditor", + }, + { + value: "quickcommand.simulateCopy", + label: "模拟复制粘贴", + config: [], + functionSelector: [ + { + value: "quickcommand.simulateCopy", + label: "复制", + icon: "content_copy", + }, + { + value: "quickcommand.simulatePaste", + label: "粘贴", + icon: "content_paste", + }, + ], + }, { value: "quickcomposer.simulate.sendText", label: "发送文本", diff --git a/src/js/composer/commands/systemCommands.js b/src/js/composer/commands/systemCommands.js index 62b321a..64b1b4a 100644 --- a/src/js/composer/commands/systemCommands.js +++ b/src/js/composer/commands/systemCommands.js @@ -1,3 +1,5 @@ +import { newVarInputVal } from "js/composer/varInputValManager"; + export const systemCommands = { label: "系统操作", icon: "computer", @@ -299,5 +301,26 @@ export const systemCommands = { }, ], }, + { + value: "quickcommand.kill", + label: "关闭进程", + desc: "关闭指定进程", + icon: "dangerous", + config: [ + { + label: "进程ID", + type: "numInput", + icon: "developer_board", + width: 6, + }, + { + label: "信号", + type: "varInput", + icon: "signal_cellular_alt", + defaultValue: newVarInputVal("str", "SIGTERM"), + width: 6, + }, + ], + }, ], }; diff --git a/src/js/composer/commands/utoolsCommand.js b/src/js/composer/commands/utoolsCommand.js new file mode 100644 index 0000000..518afcf --- /dev/null +++ b/src/js/composer/commands/utoolsCommand.js @@ -0,0 +1,87 @@ +export const utoolsCommands = { + label: "uTools功能", + icon: "insights", + commands: [ + { + value: "utools.hideMainWindow", + label: "隐藏主窗口", + desc: "隐藏主窗口", + icon: "visibility_off", + }, + { + value: "quickcommand.wakeUtools", + label: "唤醒uTools", + desc: "唤醒uTools", + icon: "visibility", + }, + { + value: "utools.setExpendHeight", + label: "设置uTools高度", + desc: "设置uTools高度", + icon: "height", + config: [ + { + key: "height", + label: "高度", + type: "numInput", + icon: "straighten", + width: 12, + }, + ], + }, + { + value: "utools.outPlugin", + label: "退出插件", + desc: "退出插件", + icon: "exit_to_app", + config: [ + { + key: "isKill", + type: "select", + options: [ + { label: "杀死插件进程", value: true }, + { label: "插件隐藏到后台", value: false }, + ], + defaultValue: false, + icon: "logout", + }, + ], + }, + { + value: "utools.isDarkColors", + label: "是否深色模式", + desc: "是否深色模式", + icon: "dark_mode", + outputVariable: "isDark", + saveOutput: true, + }, + { + value: "utools.getUser", + label: "获取用户信息", + desc: "获取用户信息", + icon: "person", + outputVariable: "{avatar,nickname,type}", + saveOutput: true, + }, + { + value: "utools.redirect", + label: "转至指定插件", + config: [ + { + key: "pluginName", + label: "要跳转至的插件名称", + type: "varInput", + icon: "alt_route", + width: 6, + }, + { + key: "payload", + label: "传递给插件的文本", + type: "varInput", + icon: "alt_route", + width: 6, + }, + ], + }, + ], +};