@temsmie/dsh-tool-keymouse 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -3
- package/lib/index.js +1 -1
- package/lib/skill-content.d.ts +1 -1
- package/lib/skill-content.js +4 -4
- package/package.json +1 -1
- package/skills/keymouse.md +4 -4
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ helper 已 **DPI-aware**:`GetSystemMetrics`、截图、`mouse_move` 全部统
|
|
|
8
8
|
|
|
9
9
|
- 键盘:`key_press` / `key_up` / `key_tap`,字母数字、空格回车、F1-F12、方向键、Ctrl/Alt/Shift、Tab、Esc 等。
|
|
10
10
|
- 鼠标:`mouse_press`(按住拖动)、`mouse_move`(绝对物理坐标)、`mouse_roll`(滚轮)。
|
|
11
|
-
- 截图:`screenshot` 抓主屏保存 PNG
|
|
11
|
+
- 截图:`screenshot` 抓主屏保存 PNG,返回绝对路径与物理像素尺寸;看图能力取决于宿主环境(见「环境与能力边界」)。
|
|
12
12
|
- 窗口:`get_window` / `win_rect`(查位置)、`win_find`(按进程名找窗口)、`win_activate`(唤起,含最小化/托盘)、`win_minimize` / `win_restore` / `win_maximize`、`win_top` / `release_top`(置顶)。
|
|
13
13
|
- 清理:`release_all` 一键抬起所有按住项防卡键;`release_top` 取消所有置顶。
|
|
14
14
|
- 自带常驻 `keymouse` 说明书(runtime skill),模型通过 skill 工具读取使用规则。
|
|
@@ -35,14 +35,14 @@ helper 已 **DPI-aware**:`GetSystemMetrics`、截图、`mouse_move` 全部统
|
|
|
35
35
|
| `mouse_roll(up, amount?)` | up, amount? | 滚轮滚动 |
|
|
36
36
|
| `release_all()` | 无 | 统一抬起全部按住项 |
|
|
37
37
|
|
|
38
|
-
典型组合:`win_find('QQ')` → `win_activate(hwnd)` 唤起窗口(不点图标);`key_press('ctrl')` → `key_tap('s')` → `release_all`;`mouse_press('left')` → `mouse_move(...)` → `release_all`;`screenshot()` →
|
|
38
|
+
典型组合:`win_find('QQ')` → `win_activate(hwnd)` 唤起窗口(不点图标);`key_press('ctrl')` → `key_tap('s')` → `release_all`;`mouse_press('left')` → `mouse_move(...)` → `release_all`;`screenshot()` →(环境支持看图时)查看图像 → 再定位操作。
|
|
39
39
|
|
|
40
40
|
## 安装
|
|
41
41
|
|
|
42
42
|
本地目录方式(开发/内网):
|
|
43
43
|
|
|
44
44
|
```
|
|
45
|
-
dsh plugin --profile <name> add
|
|
45
|
+
dsh plugin --profile <name> add <path-to-dsh-keymouse>
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
npm 方式(发布后):
|
|
@@ -116,6 +116,16 @@ npx tsc
|
|
|
116
116
|
|
|
117
117
|
说明:该 junction 仅用于本机编译,不在发布白名单(`files`)内,不影响打包分发。`node_modules` 已 gitignore,`bin/helper-x64.exe`(预编译、按需分发)随包提交。
|
|
118
118
|
|
|
119
|
+
## 环境与能力边界
|
|
120
|
+
|
|
121
|
+
- 本插件只做三件事:模拟键鼠输入、截主屏、窗口查询/置顶。**不含识图能力**。
|
|
122
|
+
- `screenshot` 返回 PNG 绝对路径。能否看图由宿主环境决定:
|
|
123
|
+
- 当前模型支持图像输入 → 用宿主自带的读图能力打开该路径即可。
|
|
124
|
+
- 模型不支持图像输入 → 需环境另有视觉/OCR 能力:安装提供图像理解/OCR 的 DSH 插件,或换用支持图像输入的模型。
|
|
125
|
+
- 插件不依赖任何特定视觉插件或工具名;`skill` 说明书同样不假设某种识图方式存在,避免在缺该能力的环境里给出无效步骤。
|
|
126
|
+
- 想提升体验:用插件市场(`find_dsh_plugin`)搜 `vision` / `OCR` / `image` 等关键词安装相应插件;或直接在支持图像输入的模型下使用。
|
|
127
|
+
- 键鼠工具本身依赖 Windows 桌面会话(见下)。
|
|
128
|
+
|
|
119
129
|
## 平台
|
|
120
130
|
|
|
121
131
|
仅支持 Windows(helper 使用 Win32 `SendInput`/`GetSystemMetrics`/`EnumWindows`)。DPI-aware,主屏物理像素坐标基准,单屏。
|
package/lib/index.js
CHANGED
|
@@ -338,7 +338,7 @@ function apply(ctx, config = {}) {
|
|
|
338
338
|
}));
|
|
339
339
|
register(defineTool({
|
|
340
340
|
name: 'screenshot',
|
|
341
|
-
description: '截取当前主屏(全屏)保存为 PNG
|
|
341
|
+
description: '截取当前主屏(全屏)保存为 PNG,返回绝对路径与物理像素尺寸。本插件只提供截图,不提供识图;能否查看该图像取决于宿主环境(模型是否支持图像输入,或环境是否提供视觉/OCR 能力)。',
|
|
342
342
|
parameters: {},
|
|
343
343
|
output: { schema: OUTPUT_SCHEMA, render: renderScreenshot },
|
|
344
344
|
async execute(_args, exec) {
|
package/lib/skill-content.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const KEYMOUSE_SKILL_NAME = "keymouse";
|
|
2
2
|
export declare const KEYMOUSE_SKILL_DESCRIPTION = "\u952E\u9F20\u63A7\u5236\u5DE5\u5177\uFF1A\u7528 SendInput \u6A21\u62DF\u771F\u5B9E\u952E\u76D8/\u9F20\u6807\u8F93\u5165\u3001\u622A\u5C4F\u3001\u67E5\u8BE2\u4E0E\u7F6E\u9876\u7A97\u53E3\uFF0C\u7528\u4E8E\u684C\u9762\u81EA\u52A8\u5316\uFF08\u6253\u5F00\u5E94\u7528\u3001\u767B\u5F55\u3001\u70B9\u51FB\u3001\u8F93\u5165\u3001\u62D6\u62FD\u3001\u6EDA\u52A8\u3001\u622A\u56FE\u89C2\u5BDF\u3001\u7A97\u53E3\u5B9A\u4F4D/\u7F6E\u9876\uFF09\u3002";
|
|
3
3
|
export declare const KEYMOUSE_SKILL_WHEN_TO_USE = "\u4EFB\u4F55\u9700\u8981\u6A21\u62DF\u771F\u5B9E\u952E\u76D8\u6309\u4E0B/\u62AC\u8D77\u3001\u9F20\u6807\u70B9\u51FB/\u79FB\u52A8/\u6EDA\u8F6E\u3001\u8F93\u5165\u6587\u5B57\u6216\u64CD\u4F5C\u524D\u53F0\u7A97\u53E3\u7684\u81EA\u52A8\u5316\u4EFB\u52A1\u3002";
|
|
4
|
-
export declare const KEYMOUSE_SKILL_CONTENT = "# \u952E\u9F20\u63A7\u5236\uFF08KeyMouse\uFF09\n\n\u901A\u8FC7\u5E38\u9A7B helper \u7528 SendInput \u6A21\u62DF\u771F\u5B9E\u952E\u9F20\u8F93\u5165\uFF0C\u5BF9\u5F53\u524D\u524D\u53F0\u7A97\u53E3\u751F\u6548\u3002\u6240\u6709\u5DE5\u5177\u8C03\u7528\u7ED3\u675F\u540E\u5FC5\u987B\u8DD1\u4E00\u6B21 release_all\u3002\n\n## \u5750\u6807\u4E0E\u952E\u540D\n\n- \u5750\u6807\uFF1A\u7EDD\u5BF9\u5C4F\u5E55**\u7269\u7406**\u50CF\u7D20\uFF08helper \u5DF2 DPI-aware\uFF0C\u65E0\u7F29\u653E\u6362\u7B97\uFF09\uFF0C\u4E3B\u5C4F\u5DE6\u4E0A\u89D2\u4E3A (0,0)\uFF0C\u5355\u5C4F\u3002x \u5411\u53F3\u3001y \u5411\u4E0B\u3002\u622A\u56FE\u5206\u8FA8\u7387\u5373\u7269\u7406\u50CF\u7D20\uFF0C\
|
|
4
|
+
export declare const KEYMOUSE_SKILL_CONTENT = "# \u952E\u9F20\u63A7\u5236\uFF08KeyMouse\uFF09\n\n\u901A\u8FC7\u5E38\u9A7B helper \u7528 SendInput \u6A21\u62DF\u771F\u5B9E\u952E\u9F20\u8F93\u5165\uFF0C\u5BF9\u5F53\u524D\u524D\u53F0\u7A97\u53E3\u751F\u6548\u3002\u6240\u6709\u5DE5\u5177\u8C03\u7528\u7ED3\u675F\u540E\u5FC5\u987B\u8DD1\u4E00\u6B21 release_all\u3002\n\n## \u5750\u6807\u4E0E\u952E\u540D\n\n- \u5750\u6807\uFF1A\u7EDD\u5BF9\u5C4F\u5E55**\u7269\u7406**\u50CF\u7D20\uFF08helper \u5DF2 DPI-aware\uFF0C\u65E0\u7F29\u653E\u6362\u7B97\uFF09\uFF0C\u4E3B\u5C4F\u5DE6\u4E0A\u89D2\u4E3A (0,0)\uFF0C\u5355\u5C4F\u3002x \u5411\u53F3\u3001y \u5411\u4E0B\u3002\u622A\u56FE\u5206\u8FA8\u7387\u5373\u7269\u7406\u50CF\u7D20\uFF0C\u4ECE\u56FE\u50CF\u4E2D\u8BFB\u5230\u7684\u5750\u6807\u53EF\u76F4\u63A5\u7528\u4E8E mouse_move\uFF0C\u65E0\u9700\u6362\u7B97\u3002\n- \u952E\u540D\uFF08\u5C0F\u5199\u82F1\u6587\uFF09\uFF1A\u5B57\u6BCD `a`-`z`\u3001\u6570\u5B57 `0`-`9`\u3001`space`\u3001`enter`\u3001`tab`\u3001`esc`\u3001`backspace`\u3001`delete`\u3001`insert`\u3001`home`\u3001`end`\u3001`pageup`\u3001`pagedown`\u3001\u65B9\u5411\u952E `up`/`down`/`left`/`right`\u3001`f1`-`f12`\u3001\u4FEE\u9970\u952E `ctrl`\u3001`alt`\u3001`shift`\u3001`win`\u3001`capslock`\u3002\n- \u9F20\u6807\u6309\u94AE\uFF1A`left`\u3001`right`\u3001`middle`\u3001`x1`\u3001`x2`\u3002\n\n## \u5DE5\u5177\n\n### screenshot()\n\u622A\u53D6\u5F53\u524D\u4E3B\u5C4F\uFF08\u5168\u5C4F\uFF09\u4FDD\u5B58\u4E3A PNG\uFF0C\u8FD4\u56DE\u7EDD\u5BF9\u8DEF\u5F84 path \u4E0E\u7269\u7406\u50CF\u7D20\u5C3A\u5BF8 width/height\u3002\n\u672C\u63D2\u4EF6\u53EA\u8D1F\u8D23\u622A\u56FE\uFF0C\u4E0D\u63D0\u4F9B\u8BC6\u56FE\uFF1B\u80FD\u5426\u770B\u56FE\u53D6\u51B3\u4E8E\u5BBF\u4E3B\u73AF\u5883\uFF1A\u6A21\u578B\u652F\u6301\u56FE\u50CF\u8F93\u5165\u65F6\u53EF\u7528\u5BBF\u4E3B\u7684\u8BFB\u56FE\u80FD\u529B\u6253\u5F00\u8BE5 path\uFF0C\u5426\u5219\u9700\u73AF\u5883\u53E6\u6709\u89C6\u89C9/OCR \u80FD\u529B\u6216\u6362\u7528\u652F\u6301\u56FE\u50CF\u8F93\u5165\u7684\u6A21\u578B\u3002\n\n### get_window()\n\u83B7\u53D6\u5F53\u524D\u524D\u53F0\u7A97\u53E3\u4FE1\u606F\uFF1A\u7A97\u53E3\u53E5\u67C4 hwnd\u3001\u6807\u9898 title\u3001\u8FDB\u7A0B\u540D process\u3001pid\u3001\u4F4D\u7F6E (x,y,w,h)\u3002\n\u7528\u4E8E\u786E\u8BA4\u76EE\u6807\u7A97\u53E3\u3001\u62FF\u5230 hwnd \u518D\u5B9A\u4F4D\u6216\u7F6E\u9876\u3002\n\n### win_rect(hwnd?)\n\u83B7\u53D6\u7A97\u53E3\u4F4D\u7F6E\u4E0E\u5C3A\u5BF8\uFF1A\u4F20\u5165 hwnd\uFF08\u6765\u81EA get_window\uFF09\uFF0C\u4E0D\u4F20\u9ED8\u8BA4\u5F53\u524D\u524D\u53F0\u7A97\u53E3\u3002\u8FD4\u56DE x/y/w/h\u3002\n\n### win_find(process)\n\u6309\u8FDB\u7A0B\u540D\u67E5\u627E\u7A97\u53E3\uFF1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u5339\u914D\u7684\u7A97\u53E3\u53E5\u67C4 hwnd\u3001\u6807\u9898\u3001\u8FDB\u7A0B\u3001pid\u3001visible\uFF08\u662F\u5426\u53EF\u89C1\uFF0Cfalse \u8868\u793A\u6700\u5C0F\u5316\u5230\u6258\u76D8\uFF09\u3002\u7528\u4E8E\u66FF\u4EE3\u9F20\u6807\u70B9\u4EFB\u52A1\u680F\u56FE\u6807\uFF0C\u5B9A\u4F4D\u5E76\u5524\u8D77\u67D0\u7A0B\u5E8F\u7A97\u53E3\u3002\n\u4F8B\uFF1Awin_find('QQ') \u2192 \u62FF\u5230 hwnd\uFF0C\u518D win_activate(hwnd) \u5524\u8D77 QQ \u4E3B\u7A97\u53E3\u3002\n\n### win_activate(hwnd)\n\u6FC0\u6D3B/\u524D\u7F6E\u6307\u5B9A\u7A97\u53E3\uFF1A\u81EA\u52A8\u5904\u7406\u6700\u5C0F\u5316\u4E0E\"\u6700\u5C0F\u5316\u5230\u6258\u76D8\uFF08\u9690\u85CF\uFF09\"\u4E24\u79CD\u60C5\u51B5\uFF0C\u518D\u7F6E\u524D\u53F0\u3002\u914D\u5408 win_find \u4F7F\u7528\uFF0C\u4EFB\u52A1\u7ED3\u675F\u65E0\u9700\u989D\u5916\u6E05\u7406\u3002\n\n### win_minimize(hwnd?)\n\u6700\u5C0F\u5316\u6307\u5B9A\u7A97\u53E3\uFF1A\u4F20\u5165 hwnd\uFF08\u6765\u81EA get_window\uFF09\uFF0C\u4E0D\u4F20\u9ED8\u8BA4\u5F53\u524D\u524D\u53F0\u7A97\u53E3\u3002\n\n### win_restore(hwnd?)\n\u8FD8\u539F\u6307\u5B9A\u7A97\u53E3\uFF1A\u4ECE\u6700\u5C0F\u5316\u6216\u6700\u5927\u5316\u8FD8\u539F\u5230\u4E4B\u524D\u5927\u5C0F\u3002\u4E0D\u4F20\u9ED8\u8BA4\u5F53\u524D\u524D\u53F0\u7A97\u53E3\u3002\n\n### win_maximize(hwnd?)\n\u6700\u5927\u5316\u6307\u5B9A\u7A97\u53E3\u3002\u4E0D\u4F20\u9ED8\u8BA4\u5F53\u524D\u524D\u53F0\u7A97\u53E3\u3002\n\n### win_top(hwnd, on)\n\u7F6E\u9876\uFF08true\uFF09/\u53D6\u6D88\u7F6E\u9876\uFF08false\uFF09\u6307\u5B9A\u7A97\u53E3\u3002\u7F6E\u9876\u540E\u7A97\u53E3\u5E38\u9A7B\u6700\u524D\u3002\u4EFB\u52A1\u7ED3\u675F\u5FC5\u987B\u7EDF\u4E00 release_top \u53D6\u6D88\u3002\n\n### release_top()\n\u53D6\u6D88\u6240\u6709\u672C\u63D2\u4EF6\u7F6E\u9876\u8FC7\u7684\u7A97\u53E3\uFF0C\u6062\u590D\u9ED8\u8BA4\u5C42\u7EA7\u3002\u4EFB\u52A1\u7ED3\u675F\u65F6\u5FC5\u987B\u8C03\u7528\u4E00\u6B21\u3002\n\n### key_tap(key)\n\u6309\u4E0B\u5E76\u7ACB\u523B\u62AC\u8D77\u5355\u4E2A\u952E\uFF08\u5355\u4E2A\u52A8\u4F5C\uFF0C\u4E0D\u5361\u952E\uFF09\u3002\u7528\u4E8E\u70B9\u6309\u3001\u8F93\u5165\u5355\u5B57\u7B26\u6216\u5355\u4E2A\u5FEB\u6377\u952E\u6309\u952E\u3002\n\u4F8B\uFF1Akey_tap('enter') \u786E\u8BA4\uFF1Bkey_tap('space') \u7FFB\u9875\u3002\n\n### key_press(key)\n\u53EA\u6309\u4E0B\u67D0\u952E\u3001\u4E0D\u62AC\u8D77\u3002\u7528\u4E8E\u7EC4\u5408\u952E\uFF1A\u5148 key_press('ctrl')\uFF0C\u518D\u6309\u5176\u4ED6\u952E\uFF0C\u6700\u540E release_all\u3002\n\u6CE8\u610F\uFF1A\u5FC5\u987B\u914D\u5408 release_all \u62AC\u8D77\uFF0C\u5426\u5219\u952E\u4F1A\u4E00\u76F4\u6309\u4F4F\u3002\n\n### key_up(key)\n\u62AC\u8D77\u67D0\u952E\u3002\n\n### mouse_press(button)\n\u53EA\u6309\u4E0B\u9F20\u6807\u6309\u94AE\u3001\u4E0D\u62AC\u8D77\u3002\u7528\u4E8E\u6309\u4F4F\u5DE6\u952E\u62D6\u52A8\uFF1Amouse_press('left') \u2192 mouse_move(...) \u2192 release_all\u3002\n\n### mouse_move(x,y)\n\u628A\u9F20\u6807\u7EDD\u5BF9\u79FB\u52A8\u5230\u5C4F\u5E55\u5750\u6807 (x,y)\u3002\n\n### mouse_roll(up)\n\u6EDA\u52A8\u9F20\u6807\u6EDA\u8F6E\uFF1Aup \u4E3A true \u6EDA\u4E0A\u3001false \u6EDA\u4E0B\u3002\n\n### release_all()\n\u62AC\u8D77\u6240\u6709\u4ECD\u88AB\u6309\u4F4F\u7684\u952E\u4E0E\u9F20\u6807\u6309\u94AE\u3002\u6BCF\u6B21\u952E\u9F20\u64CD\u4F5C\u7ED3\u675F\u540E\u5FC5\u987B\u8C03\u7528\u4E00\u6B21\uFF0C\u907F\u514D\u5361\u952E\u3002\n\n## \u8FD4\u56DE\n\n\u6BCF\u4E2A\u5DE5\u5177\u8FD4\u56DE ok=true \u8868\u793A\u8BE5\u547D\u4EE4\u5DF2\u4EA4\u7ED9\u7CFB\u7EDF\uFF1B\u8FD4\u56DE error \u8868\u793A\u53C2\u6570\u6216\u952E\u540D\u4E0D\u5408\u6CD5\u3002screenshot \u8FD8\u8FD4\u56DE path\uFF08PNG \u7EDD\u5BF9\u8DEF\u5F84\uFF09\u3001width/height\uFF08\u50CF\u7D20\u5C3A\u5BF8\uFF09\u3002win_find \u8FD8\u8FD4\u56DE hwnd\u3001title\u3001process\u3001pid\u3001visible\u3001x/y/w/h\u3002\n\n## \u5178\u578B\u7EC4\u5408\n\n- Ctrl+S \u4FDD\u5B58\uFF1Akey_press('ctrl')\uFF1Bkey_tap('s')\uFF1Brelease_all\u3002\n- Ctrl+O \u6253\u5F00\uFF1Akey_press('ctrl')\uFF1Bkey_tap('o')\uFF1Brelease_all\u3002\n- \u5DE6\u952E\u62D6\u62FD\uFF1Amouse_press('left')\uFF1Bmouse_move(x2,y2)\uFF1Bmouse_move(x1,y1)\uFF1Brelease_all\u3002\n- \u6EDA\u5230\u9875\u9762\u5E95\u90E8\uFF1Amouse_roll(false)\uFF1Bmouse_roll(false)\uFF1B\u2026\uFF08\u53EF\u591A\u6B21\uFF09\u3002\n- \u622A\u56FE\u5B9A\u4F4D\uFF1Ascreenshot() \u5F97 path \u2192\uFF08\u73AF\u5883\u652F\u6301\u770B\u56FE\u65F6\uFF09\u67E5\u770B\u5C4F\u5E55 \u2192 \u636E\u6B64 mouse_move \u5B9A\u4F4D\u3002\n- \u5524\u8D77\u7A0B\u5E8F\u7A97\u53E3\uFF08\u4E0D\u70B9\u56FE\u6807\uFF09\uFF1Awin_find('QQ') \u2192 win_activate(hwnd) \u2192 \u524D\u53F0\u51FA\u73B0 QQ \u4E3B\u7A97\u53E3\uFF08\u6258\u76D8\u9690\u85CF/\u6700\u5C0F\u5316\u4E5F\u80FD\u5524\u56DE\uFF09\u3002\n\n## \u89C4\u8303\n\n1. \u64CD\u4F5C\u524D\u5148\u786E\u8BA4\u76EE\u6807\u7A97\u53E3\u4E0E\u9F20\u6807\u4F4D\u7F6E\uFF08\u53EF\u5148 mouse_move \u518D\u89C2\u5BDF\u7ED3\u679C\uFF09\u3002\n2. \u7528\u7EC4\u5408\u952E/\u6309\u4F4F\u540E\uFF0C\u7ED3\u675F\u7EDF\u4E00\u8C03\u7528 release_all\u3002\n3. \u7F6E\u9876\u7A97\u53E3\u540E\uFF0C\u4EFB\u52A1\u7ED3\u675F\u7EDF\u4E00\u8C03\u7528 release_top \u53D6\u6D88\u3002\n4. \u5DE5\u5177\u503C\u662F\u5373\u65F6\u7684\uFF1ASendInput \u5FAE\u79D2\u7EA7\u751F\u6548\uFF0C\u4E0D\u9700\u8981\u7B49\u5F85\u3002\n";
|
package/lib/skill-content.js
CHANGED
|
@@ -10,15 +10,15 @@ export const KEYMOUSE_SKILL_CONTENT = `# 键鼠控制(KeyMouse)
|
|
|
10
10
|
|
|
11
11
|
## 坐标与键名
|
|
12
12
|
|
|
13
|
-
- 坐标:绝对屏幕**物理**像素(helper 已 DPI-aware,无缩放换算),主屏左上角为 (0,0),单屏。x 向右、y
|
|
13
|
+
- 坐标:绝对屏幕**物理**像素(helper 已 DPI-aware,无缩放换算),主屏左上角为 (0,0),单屏。x 向右、y 向下。截图分辨率即物理像素,从图像中读到的坐标可直接用于 mouse_move,无需换算。
|
|
14
14
|
- 键名(小写英文):字母 \`a\`-\`z\`、数字 \`0\`-\`9\`、\`space\`、\`enter\`、\`tab\`、\`esc\`、\`backspace\`、\`delete\`、\`insert\`、\`home\`、\`end\`、\`pageup\`、\`pagedown\`、方向键 \`up\`/\`down\`/\`left\`/\`right\`、\`f1\`-\`f12\`、修饰键 \`ctrl\`、\`alt\`、\`shift\`、\`win\`、\`capslock\`。
|
|
15
15
|
- 鼠标按钮:\`left\`、\`right\`、\`middle\`、\`x1\`、\`x2\`。
|
|
16
16
|
|
|
17
17
|
## 工具
|
|
18
18
|
|
|
19
19
|
### screenshot()
|
|
20
|
-
截取当前主屏(全屏)保存为 PNG
|
|
21
|
-
|
|
20
|
+
截取当前主屏(全屏)保存为 PNG,返回绝对路径 path 与物理像素尺寸 width/height。
|
|
21
|
+
本插件只负责截图,不提供识图;能否看图取决于宿主环境:模型支持图像输入时可用宿主的读图能力打开该 path,否则需环境另有视觉/OCR 能力或换用支持图像输入的模型。
|
|
22
22
|
|
|
23
23
|
### get_window()
|
|
24
24
|
获取当前前台窗口信息:窗口句柄 hwnd、标题 title、进程名 process、pid、位置 (x,y,w,h)。
|
|
@@ -82,7 +82,7 @@ screenshot() → 拿到 path → read_image(path) 查看屏幕 → 再做键鼠
|
|
|
82
82
|
- Ctrl+O 打开:key_press('ctrl');key_tap('o');release_all。
|
|
83
83
|
- 左键拖拽:mouse_press('left');mouse_move(x2,y2);mouse_move(x1,y1);release_all。
|
|
84
84
|
- 滚到页面底部:mouse_roll(false);mouse_roll(false);…(可多次)。
|
|
85
|
-
-
|
|
85
|
+
- 截图定位:screenshot() 得 path →(环境支持看图时)查看屏幕 → 据此 mouse_move 定位。
|
|
86
86
|
- 唤起程序窗口(不点图标):win_find('QQ') → win_activate(hwnd) → 前台出现 QQ 主窗口(托盘隐藏/最小化也能唤回)。
|
|
87
87
|
|
|
88
88
|
## 规范
|
package/package.json
CHANGED
package/skills/keymouse.md
CHANGED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
## 坐标与键名
|
|
6
6
|
|
|
7
|
-
- 坐标:绝对屏幕**物理**像素(helper 已 DPI-aware,无缩放换算),主屏左上角为 (0,0),单屏。x 向右、y
|
|
7
|
+
- 坐标:绝对屏幕**物理**像素(helper 已 DPI-aware,无缩放换算),主屏左上角为 (0,0),单屏。x 向右、y 向下。截图分辨率即物理像素,从图像中读到的坐标可直接用于 mouse_move,无需换算。
|
|
8
8
|
- 键名(小写英文):字母 `a`-`z`、数字 `0`-`9`、`space`、`enter`、`tab`、`esc`、`backspace`、`delete`、`insert`、`home`、`end`、`pageup`、`pagedown`、方向键 `up`/`down`/`left`/`right`、`f1`-`f12`、修饰键 `ctrl`、`alt`、`shift`、`win`、`capslock`。
|
|
9
9
|
- 鼠标按钮:`left`、`right`、`middle`、`x1`、`x2`。
|
|
10
10
|
|
|
11
11
|
## 工具
|
|
12
12
|
|
|
13
13
|
### screenshot()
|
|
14
|
-
截取当前主屏(全屏)保存为 PNG
|
|
15
|
-
|
|
14
|
+
截取当前主屏(全屏)保存为 PNG,返回绝对路径 path 与物理像素尺寸 width/height。
|
|
15
|
+
本插件只负责截图,不提供识图;能否看图取决于宿主环境:模型支持图像输入时可用宿主的读图能力打开该 path,否则需环境另有视觉/OCR 能力或换用支持图像输入的模型。
|
|
16
16
|
|
|
17
17
|
### get_window()
|
|
18
18
|
获取当前前台窗口信息:窗口句柄 hwnd、标题 title、进程名 process、pid、位置 (x,y,w,h)。
|
|
@@ -76,7 +76,7 @@ screenshot() → 拿到 path → read_image(path) 查看屏幕 → 再做键鼠
|
|
|
76
76
|
- Ctrl+O 打开:key_press('ctrl');key_tap('o');release_all。
|
|
77
77
|
- 左键拖拽:mouse_press('left');mouse_move(x2,y2);mouse_move(x1,y1);release_all。
|
|
78
78
|
- 滚到页面底部:mouse_roll(false);mouse_roll(false);…(可多次)。
|
|
79
|
-
-
|
|
79
|
+
- 截图定位:screenshot() 得 path →(环境支持看图时)查看屏幕 → 据此 mouse_move 定位。
|
|
80
80
|
- 唤起程序窗口(不点图标):win_find('QQ') → win_activate(hwnd) → 前台出现 QQ 主窗口(托盘隐藏/最小化也能唤回)。
|
|
81
81
|
|
|
82
82
|
## 规范
|