ms-vite-plugin 1.4.38 → 1.4.40

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/docs/api/pip.md CHANGED
@@ -7,7 +7,7 @@
7
7
  - **显示模式**:支持日志、保活和自定义三种显示模式;首次安装默认保活
8
8
  - **关闭控制**:支持主动关闭悬浮窗
9
9
  - **状态查询**:判断悬浮窗是否正在显示
10
- - **尺寸设置**:日志模式和自定义模式支持设置内容宽高,并按模式分别持久化
10
+ - **尺寸设置**:日志模式和自定义模式支持设置内容宽高比(实际显示尺寸由系统决定),并按模式分别持久化
11
11
  - **日志显示**:日志模式支持设置日志文字大小
12
12
  - **自定义文本**:自定义模式支持文本、换行、文字颜色、背景色和文字大小
13
13
 
@@ -129,14 +129,14 @@ const success = pip.closeWindow();
129
129
  function setContentSize(width: number, height: number): boolean;
130
130
  ```
131
131
 
132
- 设置日志模式或自定义模式的悬浮窗内容尺寸。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
132
+ 设置日志模式或自定义模式的悬浮窗内容尺寸。传入的宽高表示宽高比,不是最终像素尺寸;悬浮窗实际显示的宽高由系统决定。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
133
133
 
134
134
  **参数:**
135
135
 
136
136
  | 参数 | 类型 | 必填 | 描述 |
137
137
  | -------- | ---------------- | ---- | ---------------------------------------------- |
138
- | `width` | `number` | 是 | 目标内容宽度 |
139
- | `height` | `number` | 是 | 目标内容高度 |
138
+ | `width` | `number` | 是 | 宽度方向比例值(与 `height` 共同决定宽高比,不是像素) |
139
+ | `height` | `number` | 是 | 高度方向比例值(与 `width` 共同决定宽高比,不是像素) |
140
140
 
141
141
  **返回值:**
142
142
 
@@ -0,0 +1,161 @@
1
+ # 点阵 OCR 模块($点阵OCR)
2
+
3
+ `$点阵OCR` 使用图色工具生成的固定像素点阵字库识别文字。字库保存在项目的 `res/fonts` 目录,使用方式与 YOLO 模型一致:先加载资源取得字库 ID,再复用该 ID 进行识别,使用完毕后释放。
4
+
5
+ 点阵模板按照制作时的原始像素尺寸匹配,不会自动缩放到其他分辨率。目标文字的字号、缩放比例或像素形状发生变化时,应制作对应的字库特征。
6
+
7
+ ## 功能概览
8
+
9
+ - **字库管理**:加载、缓存和释放项目字库
10
+ - **文字识别**:返回按阅读顺序排列的识别结果数组
11
+ - **文本查找**:先识别再按行定位目标串,返回命中位置的绝对坐标
12
+ - **多源输入**:支持 `"screen"`、图片文件路径、URL 或 imageId
13
+ - **绝对坐标**:裁剪区域内的结果会映射回原图或全屏坐标
14
+
15
+ ## 数据类型
16
+
17
+ ### OCR字符
18
+
19
+ ```typescript
20
+ interface OCR字符 {
21
+ text: 字符串;
22
+ confidence: 数字;
23
+ x: 数字;
24
+ y: 数字;
25
+ ex: 数字;
26
+ ey: 数字;
27
+ width: 数字;
28
+ height: 数字;
29
+ centerX: 数字;
30
+ centerY: 数字;
31
+ }
32
+ ```
33
+
34
+ | 字段名 | 类型 | 描述 |
35
+ | -------------------- | ------ | -------------------------------------- |
36
+ | `OCR字符.text` | 字符串 | 识别文本;查找结果中为命中的目标字符串 |
37
+ | `confidence` | 数字 | 置信度,范围为 0-1 |
38
+ | `x`, `y` | 数字 | 结果区域左上角绝对坐标 |
39
+ | `ex`, `ey` | 数字 | 结果区域右下角绝对坐标 |
40
+ | `width`, `height` | 数字 | 结果区域宽度和高度 |
41
+ | `centerX`, `centerY` | 数字 | 结果区域中心点绝对坐标 |
42
+
43
+ ## API 参考
44
+
45
+ ### 字库管理
46
+
47
+ #### 加载字库 - 加载并缓存字库
48
+
49
+ ```typescript
50
+ function 加载字库(字库资源路径: 字符串): 字符串 | null;
51
+ ```
52
+
53
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
54
+ | -------------- | ------ | -------- | ------ | --------------------------------------------------------------------------- |
55
+ | `字库资源路径` | 字符串 | 是 | | 资源路径,运行时会自动处理 `res` 目录解析;常见写法如 `/fonts/default.json` |
56
+
57
+ **返回值:**加载成功返回字库 ID,失败返回 `null`。加载后的字库 ID 会复用到后续识别与释放流程。
58
+
59
+ ```javascript
60
+ const 字库ID = $点阵OCR.加载字库("/fonts/default.json");
61
+ if (!字库ID) throw new Error("字库加载失败");
62
+ ```
63
+
64
+ 建议在脚本初始化时加载一次并保存字库 ID,后续识别时复用,不要每次识别都重新加载。
65
+
66
+ ### 文字识别
67
+
68
+ #### 识别绝对坐标 - 识别文字并返回绝对坐标
69
+
70
+ ```typescript
71
+ function 识别绝对坐标(
72
+ 字库ID: 字符串,
73
+ 输入源: 字符串,
74
+ 左?: 数字,
75
+ 上?: 数字,
76
+ 右?: 数字,
77
+ 下?: 数字,
78
+ 置信度阈值?: 数字,
79
+ ): 数组<OCR字符>;
80
+ ```
81
+
82
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
83
+ | ------------ | ------ | -------- | ------ | -------------------------------------------------------------------------------------------- |
84
+ | `字库ID` | 字符串 | 是 | | `加载字库` 返回的字库 ID |
85
+ | `输入源` | 字符串 | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
86
+ | `左`, `上` | 数字 | 否 | 0 | 裁剪区域左上角坐标 |
87
+ | `右`, `下` | 数字 | 否 | 0 | 裁剪区域右下角坐标;`右` 或 `下` 为 0 时分别使用图像宽度或高度 |
88
+ | `置信度阈值` | 数字 | 否 | 0.8 | 相似度下限;`<=0` 时按 `0.8`;低于阈值的字符会被过滤;`>0.95` 时要求模板与图像像素完全一致 |
89
+
90
+ **返回值:**`数组<OCR字符>`。按行从上到下、同一行从左到右排列。颜色按字库各字自带的前景色/偏色匹配,无需额外传色。
91
+
92
+ ```javascript
93
+ const 结果 = $点阵OCR.识别绝对坐标(字库ID, "screen", 100, 200, 600, 280, 0.8);
94
+ $打印信息日志(结果[0]?.text);
95
+ $打印信息日志(`坐标: ${结果[0]?.x}, ${结果[0]?.y}`);
96
+ ```
97
+
98
+ ### 文本查找
99
+
100
+ #### 查找文本绝对坐标 - 查找指定字符串并返回绝对坐标
101
+
102
+ ```typescript
103
+ function 查找文本绝对坐标(
104
+ 字库ID: 字符串,
105
+ 输入源: 字符串,
106
+ 目标文本: 数组<字符串>,
107
+ 左?: 数字,
108
+ 上?: 数字,
109
+ 右?: 数字,
110
+ 下?: 数字,
111
+ 置信度阈值?: 数字,
112
+ 完整匹配?: 布尔值,
113
+ ): 数组<OCR字符>;
114
+ ```
115
+
116
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
117
+ | ------------ | ------------- | -------- | ------ | --------------------------------------------------------------------- |
118
+ | `字库ID` | 字符串 | 是 | | `加载字库` 返回的字库 ID |
119
+ | `输入源` | 字符串 | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
120
+ | `目标文本` | 数组<字符串> | 是 | | 要查找的字符串数组,例如 `["商店", "背包"]` |
121
+ | `左`, `上` | 数字 | 否 | 0 | 裁剪区域左上角坐标 |
122
+ | `右`, `下` | 数字 | 否 | 0 | 裁剪区域右下角坐标;`右` 或 `下` 为 0 时分别使用图像宽度或高度 |
123
+ | `置信度阈值` | 数字 | 否 | 0.8 | 单字符识别相似度下限;语义同 `识别绝对坐标` |
124
+ | `完整匹配` | 布尔值 | 否 | false | `false` 为行内子串包含匹配;`true` 要求某一整行文本完全等于目标字符串 |
125
+
126
+ **返回值:**命中结果数组。每个目标最多返回一次命中(最先匹配到的行);每项的 `text` 是目标字符串。
127
+
128
+ ```javascript
129
+ const 命中 = $点阵OCR.查找文本绝对坐标(
130
+ 字库ID,
131
+ "screen",
132
+ ["商店", "背包"],
133
+ 100,
134
+ 200,
135
+ 600,
136
+ 280,
137
+ 0.8,
138
+ false,
139
+ );
140
+ if (命中.length > 0) $动作.点击(命中[0].centerX, 命中[0].centerY);
141
+ ```
142
+
143
+ ### 资源管理
144
+
145
+ #### 释放 - 释放指定字库
146
+
147
+ ```typescript
148
+ function 释放(字库ID: 字符串): void;
149
+ ```
150
+
151
+ #### 释放全部 - 释放全部点阵字库
152
+
153
+ ```typescript
154
+ function 释放全部(): void;
155
+ ```
156
+
157
+ ```javascript
158
+ $点阵OCR.释放(字库ID);
159
+ // 或在需要清理全部已加载的点阵字库时:
160
+ $点阵OCR.释放全部();
161
+ ```
@@ -47,50 +47,6 @@ $打印信息日志(`文档目录: ${文档目录}`);
47
47
  $打印信息日志(`临时目录: ${临时目录}`);
48
48
  ```
49
49
 
50
- #### 获取数据目录
51
-
52
- ```typescript
53
- function 获取数据目录(): 字符串;
54
- ```
55
-
56
- **返回值:**
57
-
58
- | 类型 | 描述 |
59
- | -------- | ---------------- |
60
- | `字符串` | 应用数据目录路径 |
61
-
62
- **示例:**
63
-
64
- ```javascript
65
- const 数据目录 = $文件.获取数据目录();
66
- $打印信息日志(`数据目录: ${数据目录}`);
67
- ```
68
-
69
- #### 获取数据文件路径
70
-
71
- ```typescript
72
- function 获取数据文件路径(文件名称: 字符串): 字符串;
73
- ```
74
-
75
- **参数:**
76
-
77
- | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
78
- | ---------- | ------ | -------- | ------ | ------------ |
79
- | `文件名称` | 字符串 | 是 | - | 文件名或路径 |
80
-
81
- **返回值:**
82
-
83
- | 类型 | 描述 |
84
- | -------- | ------------ |
85
- | `字符串` | 文件完整路径 |
86
-
87
- **示例:**
88
-
89
- ```javascript
90
- const 配置文件路径 = $文件.获取数据文件路径("config.json");
91
- $打印信息日志(`配置文件路径: ${配置文件路径}`);
92
- ```
93
-
94
50
  #### 创建目录 - 创建目录(支持递归创建)。
95
51
 
96
52
  ```typescript
@@ -331,6 +287,54 @@ if (配置文件内容) {
331
287
  }
332
288
  ```
333
289
 
290
+ #### 获取资源文件 - 获取 `res` 资源的本地文件路径。
291
+
292
+ 适用于需要真实文件路径的场景(如模型文件、音视频)。用完后应调用 `清理资源文件`。
293
+
294
+ ```typescript
295
+ function 获取资源文件(文件名: 字符串): 字符串 | null;
296
+ ```
297
+
298
+ **参数:**
299
+
300
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
301
+ | -------- | ------ | -------- | ------ | --------------------- |
302
+ | `文件名` | 字符串 | 是 | - | 相对 `res` 目录的路径 |
303
+
304
+ **返回值:**
305
+
306
+ | 类型 | 描述 |
307
+ | -------------- | ------------------------------------------ |
308
+ | `字符串\|null` | 本地文件绝对路径;失败或不存在时返回 null |
309
+
310
+ **示例:**
311
+
312
+ ```javascript
313
+ const 路径 = $文件.获取资源文件("model.bin");
314
+ if (路径) {
315
+ // 使用 路径 ...
316
+ $文件.清理资源文件(路径);
317
+ }
318
+ ```
319
+
320
+ #### 清理资源文件 - 清理由 `获取资源文件` 得到的本地文件。
321
+
322
+ ```typescript
323
+ function 清理资源文件(文件路径: 字符串): void;
324
+ ```
325
+
326
+ **参数:**
327
+
328
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
329
+ | ---------- | ------ | -------- | ------ | ---------------------------- |
330
+ | `文件路径` | 字符串 | 是 | - | `获取资源文件` 返回的文件路径 |
331
+
332
+ **示例:**
333
+
334
+ ```javascript
335
+ $文件.清理资源文件(路径);
336
+ ```
337
+
334
338
  #### 写入文件 - 写入文件内容(覆盖原有内容)。
335
339
 
336
340
  ```typescript
package/docs/apicn/pip.md CHANGED
@@ -7,7 +7,7 @@
7
7
  - **显示模式**:支持日志、保活和自定义三种显示模式;首次安装默认保活
8
8
  - **关闭控制**:支持主动关闭悬浮窗
9
9
  - **状态查询**:判断悬浮窗是否正在显示
10
- - **尺寸设置**:日志模式和自定义模式支持设置内容宽高,并按模式分别持久化
10
+ - **尺寸设置**:日志模式和自定义模式支持设置内容宽高比(实际显示尺寸由系统决定),并按模式分别持久化
11
11
  - **日志显示**:日志模式支持设置日志文字大小
12
12
  - **自定义文本**:自定义模式支持文本、换行、文字颜色、背景色和文字大小
13
13
 
@@ -129,14 +129,14 @@ const 是否成功 = $悬浮窗.关闭悬浮窗();
129
129
  function 设置内容尺寸(宽度: 数字, 高度: 数字): 布尔值;
130
130
  ```
131
131
 
132
- 设置日志模式或自定义模式的悬浮窗内容尺寸。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
132
+ 设置日志模式或自定义模式的悬浮窗内容尺寸。传入的宽高表示宽高比,不是最终像素尺寸;悬浮窗实际显示的宽高由系统决定。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
133
133
 
134
134
  **参数:**
135
135
 
136
136
  | 参数 | 类型 | 必填 | 描述 |
137
137
  | ------ | ------------- | ---- | ---------------------------------------------- |
138
- | `宽度` | `数字` | 是 | 目标内容宽度 |
139
- | `高度` | `数字` | 是 | 目标内容高度 |
138
+ | `宽度` | `数字` | 是 | 宽度方向比例值(与高度共同决定宽高比,不是像素) |
139
+ | `高度` | `数字` | 是 | 高度方向比例值(与宽度共同决定宽高比,不是像素) |
140
140
 
141
141
  **返回值:**
142
142
 
@@ -0,0 +1,148 @@
1
+ # 点阵 OCR 模块(dotocr)
2
+
3
+ `dotocr` 使用图色工具生成的固定像素点阵字库识别文字。字库保存在项目的 `res/fonts` 目录,使用方式与 YOLO 模型一致:先加载资源取得字库 ID,再复用该 ID 进行识别,使用完毕后释放。
4
+
5
+ 点阵模板按照制作时的原始像素尺寸匹配,不会自动缩放到其他分辨率。目标文字的字号、缩放比例或像素形状发生变化时,应制作对应的字库特征。
6
+
7
+ ## 数据类型
8
+
9
+ ### OCRChar
10
+
11
+ ```python
12
+ from kuaijs._types import KuaiJSNamespace
13
+
14
+ class OCRChar(KuaiJSNamespace):
15
+ text: str
16
+ confidence: float
17
+ x: int
18
+ y: int
19
+ ex: int
20
+ ey: int
21
+ width: int
22
+ height: int
23
+ centerX: int
24
+ centerY: int
25
+ ```
26
+
27
+ | 字段名 | 类型 | 描述 |
28
+ | -------------------- | ----- | -------------------------------------- |
29
+ | `OCRChar.text` | str | 识别文本;查找结果中为命中的目标字符串 |
30
+ | `confidence` | float | 置信度,范围为 0-1 |
31
+ | `x`, `y` | int | 结果区域左上角绝对坐标 |
32
+ | `ex`, `ey` | int | 结果区域右下角绝对坐标 |
33
+ | `width`, `height` | int | 结果区域宽度和高度 |
34
+ | `centerX`, `centerY` | int | 结果区域中心点绝对坐标 |
35
+
36
+ ## API 参考
37
+
38
+ ### 字库管理
39
+
40
+ #### `loadFont` - 加载并缓存字库
41
+
42
+ ```python
43
+ def loadFont(fontPath: str) -> Optional[str]
44
+ ```
45
+
46
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
47
+ | ---------- | ---- | -------- | ------ | --------------------------------------------------------------------------- |
48
+ | `fontPath` | str | 是 | | 资源路径,运行时会自动处理 `res` 目录解析;常见写法如 `/fonts/default.json` |
49
+
50
+ **返回值:**加载成功返回 `fontId`,失败返回 `None`。加载后的字库 ID 会复用到后续识别与释放流程。
51
+
52
+ ```python
53
+ from kuaijs import dotocr
54
+
55
+ font_id = dotocr.loadFont("/fonts/default.json")
56
+ if not font_id:
57
+ raise RuntimeError("字库加载失败")
58
+ ```
59
+
60
+ 建议在脚本初始化时加载一次并保存 `font_id`,后续识别时复用,不要每次识别都重新加载。
61
+
62
+ ### 文字识别
63
+
64
+ #### `recognizeAbs` - 识别文字并返回绝对坐标
65
+
66
+ ```python
67
+ def recognizeAbs(
68
+ fontId: str,
69
+ input: str,
70
+ x: int = 0,
71
+ y: int = 0,
72
+ ex: int = 0,
73
+ ey: int = 0,
74
+ confidenceThreshold: float = 0.8,
75
+ ) -> List[OCRChar]
76
+ ```
77
+
78
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
79
+ | --------------------- | ----- | -------- | ------ | -------------------------------------------------------------------------------------------- |
80
+ | `fontId` | str | 是 | | `loadFont` 返回的字库 ID |
81
+ | `input` | str | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
82
+ | `x`, `y` | int | 否 | 0 | 裁剪区域左上角坐标 |
83
+ | `ex`, `ey` | int | 否 | 0 | 裁剪区域右下角坐标;`ex` 或 `ey` 为 0 时分别使用图像宽度或高度 |
84
+ | `confidenceThreshold` | float | 否 | 0.8 | 相似度下限;`<=0` 时按 `0.8`;低于阈值的字符会被过滤;`>0.95` 时要求模板与图像像素完全一致 |
85
+
86
+ **返回值:**`List[OCRChar]`。按行从上到下、同一行从左到右排列。颜色按字库各字自带的前景色/偏色匹配,无需额外传色。
87
+
88
+ ```python
89
+ chars = dotocr.recognizeAbs(font_id, "screen", 100, 200, 600, 280, 0.8)
90
+ if chars:
91
+ print(chars[0].text, chars[0].x, chars[0].width)
92
+ ```
93
+
94
+ ### 文本查找
95
+
96
+ #### `findTextAbs` - 查找指定字符串并返回绝对坐标
97
+
98
+ ```python
99
+ def findTextAbs(
100
+ fontId: str,
101
+ input: str,
102
+ targetTexts: List[str],
103
+ x: int = 0,
104
+ y: int = 0,
105
+ ex: int = 0,
106
+ ey: int = 0,
107
+ confidenceThreshold: float = 0.8,
108
+ exactMatch: bool = False,
109
+ ) -> List[OCRChar]
110
+ ```
111
+
112
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
113
+ | --------------------- | --------- | -------- | ------ | --------------------------------------------------------------------- |
114
+ | `fontId` | str | 是 | | `loadFont` 返回的字库 ID |
115
+ | `input` | str | 是 | | 输入源,支持 `"screen"`、图片文件路径、URL 或 imageId |
116
+ | `targetTexts` | List[str] | 是 | | 要查找的字符串数组,例如 `["商店", "背包"]` |
117
+ | `x`, `y` | int | 否 | 0 | 裁剪区域左上角坐标 |
118
+ | `ex`, `ey` | int | 否 | 0 | 裁剪区域右下角坐标;`ex` 或 `ey` 为 0 时分别使用图像宽度或高度 |
119
+ | `confidenceThreshold` | float | 否 | 0.8 | 单字符识别相似度下限;语义同 `recognizeAbs` |
120
+ | `exactMatch` | bool | 否 | false | `false` 为行内子串包含匹配;`true` 要求某一整行文本完全等于目标字符串 |
121
+
122
+ **返回值:**命中结果数组。每个目标最多返回一次命中(最先匹配到的行);每项的 `text` 是目标字符串。
123
+
124
+ ```python
125
+ hits = dotocr.findTextAbs(font_id, "screen", ["商店", "背包"], 100, 200, 600, 280, 0.8, False)
126
+ if hits:
127
+ action.click(hits[0].centerX, hits[0].centerY)
128
+ ```
129
+
130
+ ### 资源管理
131
+
132
+ #### `free` - 释放指定字库
133
+
134
+ ```python
135
+ def free(fontId: str) -> None
136
+ ```
137
+
138
+ #### `freeAll` - 释放全部点阵字库
139
+
140
+ ```python
141
+ def freeAll() -> None
142
+ ```
143
+
144
+ ```python
145
+ dotocr.free(font_id)
146
+ # 或在需要清理全部已加载的点阵字库时:
147
+ dotocr.freeAll()
148
+ ```
@@ -48,52 +48,6 @@ print(documents_dir)
48
48
  print(temp_dir)
49
49
  ```
50
50
 
51
- #### getDataDir - 获取应用数据目录路径
52
-
53
- ```python
54
- def getDataDir() -> str
55
- ```
56
-
57
- **返回值:**
58
-
59
- | 类型 | 描述 |
60
- | ----- | ---------------- |
61
- | `str` | 应用数据目录路径 |
62
-
63
- **示例:**
64
-
65
- ```python
66
- from kuaijs import file
67
- data_dir = file.getDataDir()
68
- print(data_dir)
69
- ```
70
-
71
- #### getDataFile - 获取应用数据文件的完整路径
72
-
73
- ```python
74
- def getDataFile(file: str) -> str
75
- ```
76
-
77
- **参数:**
78
-
79
- | 参数名 | 类型 | 是否必填 | 描述 |
80
- | ------ | ---- | -------- | ------------ |
81
- | `file` | str | 是 | 文件名或路径 |
82
-
83
- **返回值:**
84
-
85
- | 类型 | 描述 |
86
- | ----- | ------------ |
87
- | `str` | 文件完整路径 |
88
-
89
- **示例:**
90
-
91
- ```python
92
- from kuaijs import file
93
- config_path = file.getDataFile("config.json")
94
- print(config_path)
95
- ```
96
-
97
51
  #### mkdirs - 创建目录(支持递归创建)
98
52
 
99
53
  ```python
@@ -281,7 +235,7 @@ def readFile(path: str) -> Optional[str]
281
235
 
282
236
  ```python
283
237
  from kuaijs import file
284
- p = file.getDataFile("read.txt")
238
+ p = file.getInternalDir("documents") + "/read.txt"
285
239
  file.writeFile(p, "line1\nline2")
286
240
  print(file.readFile(p))
287
241
  ```
@@ -315,6 +269,55 @@ if config:
315
269
  print(config)
316
270
  ```
317
271
 
272
+ #### getResFile - 获取 res 资源的本地文件路径
273
+
274
+ 适用于需要真实文件路径的场景(如模型文件、音视频)。用完后应调用 `cleanupResFile`。
275
+
276
+ ```python
277
+ def getResFile(fileName: str) -> Optional[str]
278
+ ```
279
+
280
+ **参数:**
281
+
282
+ | 参数名 | 类型 | 是否必填 | 描述 |
283
+ | ---------- | ---- | -------- | --------------------- |
284
+ | `fileName` | str | 是 | 相对 `res` 目录的路径 |
285
+
286
+ **返回值:**
287
+
288
+ | 类型 | 描述 |
289
+ | ------------- | ---------------------------------------- |
290
+ | `str \| None` | 本地文件绝对路径;失败或不存在时返回 None |
291
+
292
+ **示例:**
293
+
294
+ ```python
295
+ from kuaijs import file
296
+ path = file.getResFile("model.bin")
297
+ if path:
298
+ # 使用 path ...
299
+ file.cleanupResFile(path)
300
+ ```
301
+
302
+ #### cleanupResFile - 清理由 getResFile 得到的本地文件
303
+
304
+ ```python
305
+ def cleanupResFile(path: str) -> None
306
+ ```
307
+
308
+ **参数:**
309
+
310
+ | 参数名 | 类型 | 是否必填 | 描述 |
311
+ | ------ | ---- | -------- | -------------------------- |
312
+ | `path` | str | 是 | `getResFile` 返回的文件路径 |
313
+
314
+ **示例:**
315
+
316
+ ```python
317
+ from kuaijs import file
318
+ file.cleanupResFile(path)
319
+ ```
320
+
318
321
  #### writeFile - 写入文件内容(覆盖)
319
322
 
320
323
  ```python
@@ -7,7 +7,7 @@
7
7
  - **显示模式**:支持日志、保活和自定义三种显示模式;首次安装默认保活
8
8
  - **关闭控制**:支持主动关闭悬浮窗
9
9
  - **状态查询**:判断悬浮窗是否正在显示
10
- - **尺寸设置**:日志模式和自定义模式支持设置内容宽高,并按模式分别持久化
10
+ - **尺寸设置**:日志模式和自定义模式支持设置内容宽高比(实际显示尺寸由系统决定),并按模式分别持久化
11
11
  - **日志显示**:日志模式支持设置日志文字大小
12
12
  - **自定义文本**:自定义模式支持文本、换行、文字颜色、背景色和文字大小
13
13
 
@@ -133,7 +133,7 @@ success = pip.closeWindow()
133
133
 
134
134
  ### setContentSize - 设置内容尺寸
135
135
 
136
- 设置日志模式或自定义模式的悬浮窗内容尺寸。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
136
+ 设置日志模式或自定义模式的悬浮窗内容尺寸。传入的宽高表示宽高比,不是最终像素尺寸;悬浮窗实际显示的宽高由系统决定。宽度和高度都必须传入有效数字。日志模式和自定义模式会分别保存尺寸;悬浮窗关闭状态和保活模式不会生效。
137
137
 
138
138
  ```python
139
139
  def setContentSize(width: float, height: float) -> bool
@@ -143,8 +143,8 @@ def setContentSize(width: float, height: float) -> bool
143
143
 
144
144
  | 参数 | 类型 | 必填 | 描述 |
145
145
  | -------- | ---------------- | ---- | ----------------------------- |
146
- | `width` | `float` | 是 | 目标内容宽度 |
147
- | `height` | `float` | 是 | 目标内容高度 |
146
+ | `width` | `float` | 是 | 宽度方向比例值(与 `height` 共同决定宽高比,不是像素) |
147
+ | `height` | `float` | 是 | 高度方向比例值(与 `width` 共同决定宽高比,不是像素) |
148
148
 
149
149
  **返回值:**
150
150