diff --git a/assets/inject/Dll1.dll b/assets/inject/Dll1.dll
new file mode 100644
index 0000000..b385a0f
Binary files /dev/null and b/assets/inject/Dll1.dll differ
diff --git a/assets/inject/WindowsInject.exe b/assets/inject/WindowsInject.exe
new file mode 100644
index 0000000..2a745b3
Binary files /dev/null and b/assets/inject/WindowsInject.exe differ
diff --git a/docx/CHANGELOG.md b/docx/CHANGELOG.md
index 49e0666..719876a 100644
--- a/docx/CHANGELOG.md
+++ b/docx/CHANGELOG.md
@@ -1,4 +1,15 @@
-# [0.40.1](https://github.com/shelllet/winui/compare/main...dev) (2024-11-06)
+# [0.41.0](https://github.com/shelllet/winui/compare/main...dev) (2024-12-14)
+
+### Changed:
+1. 修复一些问题。
+2. 添加内存读写动作:[ReadMemory](./actions/system/ReadMemory.md)、[WriteMemory](./actions/system/WriteMemory.md)、`DLL`注入:[AttachProcess](./actions/system/AttachProcess.md)。
+
+### Note
+
+1. 使用管理员权限运行 *winui++*, 无法显示 *动作* 的拖动效果(已知问题)。
+2. 64位下载(x64):https://bitbucket.org/winui-release/version/downloads/winui0.41.0-setup.x64.exe
+
+## [0.40.1](https://github.com/shelllet/winui/compare/main...dev) (2024-11-06)
### Changed:
1. 修复动作参数数字无法输入问题。
diff --git a/docx/_sidebar.md b/docx/_sidebar.md
index aa56d99..8b61d43 100644
--- a/docx/_sidebar.md
+++ b/docx/_sidebar.md
@@ -13,6 +13,7 @@
- [使用逻辑](./introduction/workflow/logic.md)
- [鼠标/键盘宏录制](./introduction/workflow/record)
- [变量](./introduction/workflow/variable.md)
+ - [资源](./introduction/workflow/resources.md)
- [流程操作技巧](./introduction/workflow/skill.md)
- [通配符匹配](./introduction/workflow/wildcard.md)
- [Glob模式匹配](./introduction/workflow/glob.md)
@@ -25,7 +26,7 @@
- [添加用户](./actions/system/UserAdd.md)
- [打开应用](./actions/system/OpenApplication.md)
- [打开文件](./actions/system/LaunchFile.md)
- - [打开链接](./actions/system/OpenUri.md)
+ - [打开链接](./actions/system/OpenUrl.md)
- [退出系统](./actions/system/ExitWindows.md)
- [关闭句柄](./actions/system/CloseHandle.md)
- [检测进程](./actions/system/ExistProcess.md)
@@ -35,6 +36,9 @@
- [输出文本](./actions/system/OutputString.md)
- [创建对象](./actions/system/CreateObject.md)
- [调用方法](./actions/system/CallMethod.md)
+ - [读内存](./actions/system/ReadMemory.md)
+ - [写内存](./actions/system/WriteMemory.md)
+ - [附加进程](./actions/system/AttachProcess.md)
- 异步操作
- [定时器](./actions/async/WorkTimer.md)
- [定时任务](./actions/async/WorkTask.md)
@@ -73,6 +77,7 @@
- [监听鼠标](./actions/mouse/ListenMouse.md)
- [偏移移动](./actions/mouse/MoveOffset.md)
- [点击*网格](./actions/mouse/CellClick.md)
+ - [移动*网格](./actions/mouse/CellMove.md)
- [滚动鼠标](./actions/mouse/WheelMouse.md)
- 窗口
- [查找窗口](./actions/window/FindWindow.md)
@@ -247,8 +252,10 @@
- [添加元素](./actions/algorithm/PushBack.md)
- [删除元素](./actions/algorithm/PopBack.md)
- 类型
+ - [布尔](./actions/type/TypeBoolean.md)
+ - [数字](./actions/type/TypeNumber.md)
- [字符串](./actions/type/TypeString.md)
- - [网址](./actions/type/TypeUri.md)
+ - [网址](./actions/type/TypeUrl.md)
- [坐标](./actions/type/TypePoint.md)
- [文件](./actions/type/TypeFile.md)
- [文件夹](./actions/type/TypeFolder.md)
@@ -260,6 +267,13 @@
- [颜色](./actions/type/TypeColor.md)
- [模型](./actions/type/TypeModel.md)
- [相机](./actions/type/TypeCamera.md)
+ - [字典](./actions/type/TypeDict.md)
+ - [元组](./actions/type/TypeTuple.md)
+ - [切片](./actions/type/TypeSlice.md)
+ - [列表](./actions/type/TypeList.md)
+ - [指针](./actions/type/TypePtr.md)
+ - [主机地址](./actions/type/TypeHostAddress.md)
+ - [字符串列表](./actions/type/TypeStrings.md)
- 内置类型
- [Boolean](./types/Boolean.md)
- [Number](./types/Number.md)
@@ -269,22 +283,25 @@
- [Rect](./types/Rect.md)
- [Scalar](./types/Scalar.md)
- [Color](./types/Color.md)
+ - [Bytes](./types/Bytes.md)
- [RotatedRect](./types/RotatedRect.md)
- [DetectionResult](./types/DetectionResult.md)
- [ClassificationResult](./types/ClassificationResult.md)
- [RecognitionResult](./types/RecognitionResult.md)
- [File](./types/File.md)
- - [图像](./types/Image.md)
+ - [Image](./types/Image.md)
- [Size](./types/Size.md)
- [Url](./types/Url.md)
- [Wnd](./types/Wnd.md)
- [ModelSession](./types/ModelSession.md)
- [WebDriver](./types/WebDriver.md)
- [Timer](./types/Timer.md)
- - [线程](./types/Thread.md)
- - [键盘](./types/Keyboard.md)
- - [主机地址](./types/HostAddress.md)
- - [元组](./types/Tuple.md)
+ - [Thread](./types/Thread.md)
+ - [Keyboard](./types/Keyboard.md)
+ - [HostAddress](./types/HostAddress.md)
+ - [Tuple](./types/Tuple.md)
+ - [Slice](./types/Slice.md)
+ - [Ptr](./types/Ptr.md)
- 枚举类型
- [Colors](./enums/Colors.md)
- [Directions](./enums/Directions.md)
diff --git a/docx/actions/algorithm/FilterVertex.md b/docx/actions/algorithm/FilterVertex.md
index 35badba..8fd4719 100644
--- a/docx/actions/algorithm/FilterVertex.md
+++ b/docx/actions/algorithm/FilterVertex.md
@@ -26,3 +26,8 @@
## 其它
示例:https://github.com/shelllet/WinUi/blob/main/algorithm/FilterVertex.simple
+
+
+
+
+
\ No newline at end of file
diff --git a/docx/actions/algorithm/RandomNumber.md b/docx/actions/algorithm/RandomNumber.md
index d51c6f7..3c19095 100644
--- a/docx/actions/algorithm/RandomNumber.md
+++ b/docx/actions/algorithm/RandomNumber.md
@@ -30,4 +30,9 @@ import random
random.randint(1, 100)
````
+
+
+
+
+
!> 该动作被执行之后就会生成确定的随机数。所有引用该动作的运行参数,都会使用相同的随机数。
\ No newline at end of file
diff --git a/docx/actions/algorithm/RandomPoint.md b/docx/actions/algorithm/RandomPoint.md
index 94bdfff..6942885 100644
--- a/docx/actions/algorithm/RandomPoint.md
+++ b/docx/actions/algorithm/RandomPoint.md
@@ -23,5 +23,8 @@
示例:https://github.com/shelllet/WinUi/blob/main/algorithm/RandomPoint.simple
+
+
+
!> 该动作被执行之后就会生成确定的随机坐标。其他所有引用该动作的运行参数,都会使用相同的随机坐标。
\ No newline at end of file
diff --git a/docx/actions/mouse/CellClick.md b/docx/actions/mouse/CellClick.md
index 279f99a..e85c283 100644
--- a/docx/actions/mouse/CellClick.md
+++ b/docx/actions/mouse/CellClick.md
@@ -15,10 +15,16 @@
>
* 行数
> 风格行数
+
* 列数
> 网格列数
+
* 半径
> 以单元格中心为圆心,该参数为半径,动态计算最终的目标位置。该参数不要超过单元格长宽中的最小值。
+
+* 停顿
+> 移动至下个单元格的停顿时间。
+
* 点击键
> 鼠标键,参考:[MouseButtons](./enums/MouseButtons.md)
@@ -31,6 +37,6 @@
* 流程:https://github.com/shelllet/WinUi/blob/main/mouse/CellClick.simple
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docx/actions/mouse/CellMove.md b/docx/actions/mouse/CellMove.md
new file mode 100644
index 0000000..cca72e8
--- /dev/null
+++ b/docx/actions/mouse/CellMove.md
@@ -0,0 +1,36 @@
+# 移动 * 网格
+在桌面虚拟一个网格,依次移动鼠标至网格中的每个单元格,并调用自定义的子流程。需要配合 [移动鼠标](./actions/mouse/MovePointer.md)动作,移动鼠标至网格左上角第一个单格中心位置。
+
+![CellMove](./images/12.png ':size=90%')
+
+## 子流程
+> 支持,当前鼠标位置传入子流程。
+
+
+## 运行参数
+
+* 单元格宽度
+>
+* 单元格高度
+>
+* 行数
+> 风格行数
+
+* 列数
+> 网格列数
+
+* 半径
+> 以单元格中心为圆心,该参数为半径,动态计算最终的目标位置。该参数不要超过单元格长宽中的最小值。
+
+
+## 输出
+
+> 无
+
+## 资源
+
+* 流程:https://github.com/shelllet/WinUi/blob/main/mouse/CellMove.simple
+
+
\ No newline at end of file
diff --git a/docx/actions/mouse/images/12.png b/docx/actions/mouse/images/12.png
new file mode 100644
index 0000000..6ca873c
Binary files /dev/null and b/docx/actions/mouse/images/12.png differ
diff --git a/docx/actions/system/AttachProcess.md b/docx/actions/system/AttachProcess.md
new file mode 100644
index 0000000..98ce50b
--- /dev/null
+++ b/docx/actions/system/AttachProcess.md
@@ -0,0 +1,30 @@
+# 代码注入
+
+创建一个进程,在进程启动的时候附加一个动态链接库。这个动作可以把动态库加载到进程的运行空间,也可以称作`DLL`注入。
+
+![AttachProcess](./images/19.png ':size=90%')
+
+## 权限
+> 无要求
+
+## 子流程
+
+> 不支持
+
+## 运行参数
+
+* 进程
+> 进程的路径,`Windows` 系统同名进程可以有多个,可以用进程全路径区分。
+
+* 动态库
+> 要附加的动态链接库。注意适配`32`位或者`64`位可执行程序。
+
+## 输出
+
+> 无
+
+
+## 资源
+
+* 示例流程:https://github.com/shelllet/WinUi/blob/main/system/AttachProcess.simple
+
diff --git a/docx/actions/system/OpenUri.md b/docx/actions/system/OpenUrl.md
similarity index 94%
rename from docx/actions/system/OpenUri.md
rename to docx/actions/system/OpenUrl.md
index 89465b6..6264ca4 100644
--- a/docx/actions/system/OpenUri.md
+++ b/docx/actions/system/OpenUrl.md
@@ -1,7 +1,7 @@
# 打开链接
该动作可以启动默认的浏览器打开指定的网址
-![OpenUri](./images/08.png ':size=90%')
+![OpenUrl](./images/08.png ':size=90%')
## 权限
> 无要求
diff --git a/docx/actions/system/ReadMemory.md b/docx/actions/system/ReadMemory.md
new file mode 100644
index 0000000..c315e21
--- /dev/null
+++ b/docx/actions/system/ReadMemory.md
@@ -0,0 +1,31 @@
+# 读取内存
+
+读取指定进程地址范围内的数据。
+
+![ReadMemory](./images/18.png ':size=90%')
+
+## 权限
+> 无要求
+
+## 子流程
+
+> 不支持
+
+## 运行参数
+* 进程
+> 进程的路径,`Windows` 系统同名进程可以有多个,可以用进程全路径来区分。
+
+* 地址
+> 用户空间的内存地址。
+
+* 长度
+> 读取的数据长度。
+
+## 输出
+
+> 内存数据,参考:[字节序列](./types/Bytes.md)。
+
+## 资源
+
+* 示例流程:https://github.com/shelllet/WinUi/blob/main/system/ReadMemory.simple
+
diff --git a/docx/actions/system/Wait.md b/docx/actions/system/Wait.md
index dbe49f9..78e88ea 100644
--- a/docx/actions/system/Wait.md
+++ b/docx/actions/system/Wait.md
@@ -19,16 +19,6 @@
> 无
-## 脚本调用
-
-```python
-import simple
-
-w = simple.WaitRunner(3) # sleep 3s
-# w.duration = 3
-w.run()
-```
-
## 资源
* 示例流程:https://github.com/shelllet/WinUi/blob/main/system/Wait.simple
diff --git a/docx/actions/system/WriteMemory.md b/docx/actions/system/WriteMemory.md
new file mode 100644
index 0000000..5d6eb57
--- /dev/null
+++ b/docx/actions/system/WriteMemory.md
@@ -0,0 +1,33 @@
+# 写内存
+
+在进程指定的内存地址处写入数据。
+
+![WriteMemory](./images/17.png ':size=90%')
+
+## 权限
+> 无要求
+
+## 子流程
+
+> 不支持
+
+## 运行参数
+
+* 进程
+> 进程的路径,`Windows` 系统同名进程可以有多个,可以用进程全路径区分。
+
+
+* 地址
+> 用户空间的内存地址。
+
+* 数据
+> 写入的数据。如果写入字节序列,请使用:[Bytes](./types/Bytes.md),创建字节序列。
+
+## 输出
+
+> 无
+
+
+## 资源
+
+* 示例流程:https://github.com/shelllet/WinUi/blob/main/system/Wait.simple
diff --git a/docx/actions/system/images/17.png b/docx/actions/system/images/17.png
new file mode 100644
index 0000000..d0d01ee
Binary files /dev/null and b/docx/actions/system/images/17.png differ
diff --git a/docx/actions/system/images/18.png b/docx/actions/system/images/18.png
new file mode 100644
index 0000000..3e42035
Binary files /dev/null and b/docx/actions/system/images/18.png differ
diff --git a/docx/actions/system/images/19.png b/docx/actions/system/images/19.png
new file mode 100644
index 0000000..1355d5b
Binary files /dev/null and b/docx/actions/system/images/19.png differ
diff --git a/docx/actions/type/TypeBoolean.md b/docx/actions/type/TypeBoolean.md
new file mode 100644
index 0000000..55a85c9
--- /dev/null
+++ b/docx/actions/type/TypeBoolean.md
@@ -0,0 +1,29 @@
+# 布尔
+定义一个 *布尔* 类型。
+
+
+![TypeBoolean](./images/01.png ':size=90%')
+
+## 子流程
+> 不支持
+
+
+## 运行参数
+
+* 值
+> 布尔值。
+
+## 输出
+
+> 参考类型:[Boolean](./types/Boolean.md)。
+
+
+## 脚本调用
+
+```python
+
+b = True
+
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeCamera.md b/docx/actions/type/TypeCamera.md
index 2e2dc3e..72e7344 100644
--- a/docx/actions/type/TypeCamera.md
+++ b/docx/actions/type/TypeCamera.md
@@ -1,22 +1,23 @@
# 相机
定义相机类型,当前系统必须连接相机设备。工业 *GIGE* 接口的相机需要手动安装相应的驱动。
+![TypeCamera](./images/15.png ':size=90%')
+
## 权限
> 无要求
+
## 子流程
> 不支持
-## 预览
-> 可预览,默认 *6s* 之后停止。
## 运行参数
-* [相机索引](./types/Number.md)
-> 默认值:0
+* 相机
+> 相机索引,默认值:`0`。
## 输出
-> 相机对象
+> 相机对象,参考:[VideoCapture](./types/VideoCapture.md)。
## 脚本调用
@@ -24,6 +25,12 @@
```python
import simple;
+
+cap = VideoCapture(0)
+
```
-## 示例
\ No newline at end of file
+## 示例
+
+
+!> 预览该动作执行, *6s* 之后停止。
\ No newline at end of file
diff --git a/docx/actions/type/TypeColor.md b/docx/actions/type/TypeColor.md
index e2a1639..8d98bda 100644
--- a/docx/actions/type/TypeColor.md
+++ b/docx/actions/type/TypeColor.md
@@ -1,5 +1,7 @@
# 颜色
-定义 *颜色* 类型
+定义 *颜色* 类型的值。
+
+![TypeColor](./images/13.png ':size=90%')
## 子流程
> 不支持
@@ -7,12 +9,12 @@
## 运行参数
-* Color:颜色
+* 颜色
## 输出
-> [Color](./types/Color.md)
+> 颜色,参考: [Color](./types/Color.md)。
## 脚本调用
@@ -20,6 +22,8 @@
```python
import simple;
+c = simple.Color(255,255,255)
+
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeDict.md b/docx/actions/type/TypeDict.md
index 343cce8..d771794 100644
--- a/docx/actions/type/TypeDict.md
+++ b/docx/actions/type/TypeDict.md
@@ -1,21 +1,29 @@
# 字典
定义一个 `Dict`(字典) 类型。
+![TypeDict](./images/16.png ':size=90%')
+
## 子流程
-> 支持
+> 支持, 可以通过子动作可以为该字典添加多个键值对。
## 运行参数
+该动作只能添加一个 键值对,多个键值对,需要通过子动作添加。
+* 键
+>
+* 值
+>
## 输出
-> [`Dict`](./types/Dict.md)
+> 字典,参考:[`Dict`](./types/Dict.md) 。
## 脚本调用
```python
-import simple;
+
+tel = {'jack': 4098, 'sape': 4139}
```
diff --git a/docx/actions/type/TypeFile.md b/docx/actions/type/TypeFile.md
index 58b0e7c..7f0521c 100644
--- a/docx/actions/type/TypeFile.md
+++ b/docx/actions/type/TypeFile.md
@@ -1,5 +1,7 @@
# 文件
-定义 *文件* 类型
+定义 *文件* 类型。
+
+![TypeFile](./images/06.png ':size=90%')
## 子流程
> 不支持
@@ -7,11 +9,12 @@
## 运行参数
-* File:本地文件
+* 值
+> 本地文件。
## 输出
-
+> 文件,参考:[File](./types/File.md)。
@@ -20,6 +23,8 @@
```python
import simple;
+file = simple.File('c:/windows/system32/notepad.exe')
+
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeFolder.md b/docx/actions/type/TypeFolder.md
index 46e7fcf..396c5fc 100644
--- a/docx/actions/type/TypeFolder.md
+++ b/docx/actions/type/TypeFolder.md
@@ -1,5 +1,7 @@
# 文件夹
-定义 *文件夹* 类型
+定义 *文件夹* 类型。
+
+![TypeFile](./images/07.png ':size=90%')
## 子流程
> 不支持
@@ -7,12 +9,13 @@
## 运行参数
-* Folder:文件夹
+* 值
+> 文件夹。
## 输出
-
+> 文件夹,参考:[Path](./types/Path.md)。
## 脚本调用
@@ -20,6 +23,8 @@
```python
import simple;
+p = simple.Path('c:/windows')
+
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeHostAddress.md b/docx/actions/type/TypeHostAddress.md
new file mode 100644
index 0000000..715938f
--- /dev/null
+++ b/docx/actions/type/TypeHostAddress.md
@@ -0,0 +1,31 @@
+# 主机地址
+定义一个 *主机地址* 类型。主机地址通常包含*IP*地址和端口。
+
+![TypeString](./images/18.png ':size=90%')
+
+## 子流程
+> 不支持
+
+
+## 运行参数
+
+* 主机
+> *ip* 地址。默认:`localhost`,本地回环地址,和 `127.0.0.1`对应。
+
+* 端口
+> 端口号,端口号的范围从`0`到`65535`。
+
+## 输出
+
+> 主机地址,参考: [HostAddress](./types/HostAddress.md)。
+
+
+## 脚本调用
+
+```python
+
+str = 'hello, winui++'
+
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeList.md b/docx/actions/type/TypeList.md
new file mode 100644
index 0000000..9f86113
--- /dev/null
+++ b/docx/actions/type/TypeList.md
@@ -0,0 +1,29 @@
+# 列表
+定义一个 *列表* 类型的值。
+
+![TypeList](./images/20.png ':size=90%')
+
+## 子流程
+> 不支持
+
+
+## 运行参数
+
+* 值
+> *Python* 列表。
+
+
+## 输出
+
+> 列表,参考: [List](./types/List.md)。
+
+
+## 脚本调用
+
+```python
+
+fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
+
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeModel.md b/docx/actions/type/TypeModel.md
index 238943f..d828a39 100644
--- a/docx/actions/type/TypeModel.md
+++ b/docx/actions/type/TypeModel.md
@@ -1,7 +1,7 @@
# 模型
-加载 *ONNX* 模型文件
+定义 *ONNX* 模型文件。
-![action](./images/01.png ':size=90%')
+![TypeModel](./images/14.png ':size=90%')
## 子流程
@@ -10,13 +10,15 @@
## 运行参数
-* Model:模型文件,后缀名为:`.onnx`
-
+* 模型
+> 模型文件,后缀名为:`.onnx`。
+* 类型
+> 由于模型文件通常比较大,加载需要比较长的时间,为避免动作每次执行都加载模型文件,可以打开此开关,切换为静态。
## 输出
-> [`ModelSession`](./types/ModelSession.md)
+> 模型,参考:[`ModelSession`](./types/ModelSession.md)。
## 脚本调用
@@ -24,6 +26,7 @@
```python
import simple;
+model = simple.ModelSession('simple.onnx')
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeNumber.md b/docx/actions/type/TypeNumber.md
new file mode 100644
index 0000000..a9572b4
--- /dev/null
+++ b/docx/actions/type/TypeNumber.md
@@ -0,0 +1,28 @@
+# 布尔
+定义一个 *数字* 类型。
+
+
+![TypeNumber](./images/02.png ':size=90%')
+
+## 子流程
+> 不支持
+
+
+## 运行参数
+
+* 值
+> 数字。
+
+## 输出
+
+> 参考类型:[Number](./types/Number.md)。
+
+## 脚本调用
+
+```python
+
+num = 5
+
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypePassword.md b/docx/actions/type/TypePassword.md
index 47b8968..51052c3 100644
--- a/docx/actions/type/TypePassword.md
+++ b/docx/actions/type/TypePassword.md
@@ -1,5 +1,7 @@
# 密码
-定义 *密码*,字符串类型
+定义 *密码*,字符串类型。
+
+![TypePassword](./images/12.png ':size=90%')
## 子流程
> 不支持
@@ -7,18 +9,20 @@
## 运行参数
-* Password:密码
-
+* 密码
+> 定义的密码,以 `*`号显示。
## 输出
+> 字符串,参考:[String](./types/String.md)。
## 脚本调用
```python
-import simple;
+
+p = '123456'
```
diff --git a/docx/actions/type/TypePoint.md b/docx/actions/type/TypePoint.md
index 077c61e..cae29d0 100644
--- a/docx/actions/type/TypePoint.md
+++ b/docx/actions/type/TypePoint.md
@@ -1,5 +1,7 @@
# 坐标
-定义一个 *坐标* 类型
+定义一个 *坐标* 类型。
+
+![TypePoint](./images/05.png ':size=90%')
## 子流程
> 不支持
@@ -7,11 +9,13 @@
## 运行参数
-* Point:坐标点
+* 值
+> 坐标点,包含 `x` 和 `y` 的值。
## 输出
+> 坐标,参考:[Point](./types/Point.md)。
@@ -20,6 +24,8 @@
```python
import simple;
+pt = simple.Point(100, 100)
+
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypePtr.md b/docx/actions/type/TypePtr.md
new file mode 100644
index 0000000..063ae6e
--- /dev/null
+++ b/docx/actions/type/TypePtr.md
@@ -0,0 +1,31 @@
+# Ptr
+定义一个 *Ptr* 类型的值,用来表示内存地址,也可称为指针。
+
+![TypePtr](./images/22.png ':size=90%')
+
+## 子流程
+> 不支持
+
+
+## 运行参数
+
+* 值
+
+> 使用字符串或者十六进制官字行串表示一个内存地址,例如:`0x014B30A8`。
+
+
+## 输出
+
+> 指针
+
+
+## 脚本调用
+
+```python
+import simple;
+
+ptr = simple.Ptr(0x014B30A8)
+
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeRect.md b/docx/actions/type/TypeRect.md
index 1130ae2..3870adf 100644
--- a/docx/actions/type/TypeRect.md
+++ b/docx/actions/type/TypeRect.md
@@ -1,5 +1,7 @@
# 矩形
-定义一个 *矩形* 类型
+定义一个 *矩形* 类型。
+
+![TypeRect](./images/09.png ':size=90%')
## 子流程
> 不支持
@@ -8,18 +10,19 @@
## 运行参数
-* Rect:矩形
-
+* 矩形
+> 包含矩形的 *左上角* 坐标和 *长*、 *宽* 大小。
## 输出
-
-
+> 短形,参考:[Rect](./types/Rect.md)。
## 脚本调用
```python
import simple;
+rc = simple.Rect(0,0, 100, 100)
+
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeResource.md b/docx/actions/type/TypeResource.md
index 5560bd8..62c5a19 100644
--- a/docx/actions/type/TypeResource.md
+++ b/docx/actions/type/TypeResource.md
@@ -1,5 +1,8 @@
# 资源
-定义 *资源* 类型
+定义 *资源* 类型,用于选择嵌入流程中的资源,比如常用的图片文件。
+
+![TypeResource](./images/09.png ':size=90%')
+
## 子流程
> 不支持
@@ -8,18 +11,12 @@
## 运行参数
-* Resource:选择内嵌的资源
+* 资源
+> 选择嵌入流程中的资源,参考:[资源](./introduction/workflow/resources.md)。
## 输出
-
-
-
-## 脚本调用
-
-```python
-import simple;
+> 对应的资源类型。
-```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeScalar.md b/docx/actions/type/TypeScalar.md
index 1f87326..3f84e42 100644
--- a/docx/actions/type/TypeScalar.md
+++ b/docx/actions/type/TypeScalar.md
@@ -1,5 +1,8 @@
# 标量
-定义 *标量* 类型,*标量* 包含 *4* 个数值
+定义 *标量* 类型,*标量* 包含 *4* 个数值。
+
+
+![TypeScalar](./images/11.png)
## 子流程
> 不支持
@@ -8,10 +11,12 @@
## 运行参数
-* Value:标量
+* 值
+> 包含四个数值 `M0`、 `M1`、 `M2`、 `M3`。
## 输出
+> 标题,参考:[Scalar](./types/Scalar.md)。
@@ -20,6 +25,10 @@
```python
import simple;
+s1 = simple.Scalar()
+
+s2 = simple.Scalar(0,0,0,0)
+
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeShortcut.md b/docx/actions/type/TypeShortcut.md
index 955c9bd..8232433 100644
--- a/docx/actions/type/TypeShortcut.md
+++ b/docx/actions/type/TypeShortcut.md
@@ -1,6 +1,7 @@
# 快捷键
-定义一个 *快捷键* 类型
+定义一个 *快捷键* 类型。
+![TypeString](./images/08.png ':size=90%')
## 子流程
> 不支持
@@ -9,11 +10,12 @@
## 运行参数
-* Key:快捷键
+* 键
+> 快捷键。
## 输出
-
+> 快捷键,参考:[KeySequence](./types/KeySequence.md)。
## 脚本调用
@@ -21,6 +23,9 @@
```python
import simple;
+key = simple.KeySequence(simple.Key.Control, simple.Key.W)
+
+
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeSlice.md b/docx/actions/type/TypeSlice.md
new file mode 100644
index 0000000..73300fe
--- /dev/null
+++ b/docx/actions/type/TypeSlice.md
@@ -0,0 +1,33 @@
+# 切片
+定义一个 `切片`(Slice) 类型值。
+
+![TypeSlice](./images/19.png ':size=90%')
+
+## 子流程
+> 不支持
+
+## 运行参数
+
+* 开始
+> 切片开始位置。如果未提供,则默认为 `None`。
+
+* 结束
+> 结束位置,切片在索引 stop-1(最后一个元素)处停止。
+
+* 步长
+> 用于确定切片的每个索引之间的增量。如果未提供,则默认为 `None`。
+
+## 输出
+
+> 切片对象,参考:[`Slice`](./types/Slice.md) 。
+
+
+## 脚本调用
+
+```python
+
+sliced = slice(3)
+
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeString.md b/docx/actions/type/TypeString.md
index eafe8ad..3a07a7f 100644
--- a/docx/actions/type/TypeString.md
+++ b/docx/actions/type/TypeString.md
@@ -1,5 +1,7 @@
# 字符串
-定义一个 *字符串* 类型
+定义一个 *字符串* 类型。
+
+![TypeString](./images/03.png ':size=90%')
## 子流程
> 不支持
@@ -7,18 +9,20 @@
## 运行参数
-* Text:定义一个字符串
+* 值
+> 字符串。
## 输出
-
+> 字符串,参考: [String](./types/String.md)。
## 脚本调用
```python
-import simple;
+
+str = 'hello, winui++'
```
diff --git a/docx/actions/type/TypeStrings.md b/docx/actions/type/TypeStrings.md
new file mode 100644
index 0000000..7c47ec9
--- /dev/null
+++ b/docx/actions/type/TypeStrings.md
@@ -0,0 +1,29 @@
+# 字符串列表
+定义一个 *字符串列表* 类型的值。
+
+![TypeStrings](./images/21.png ':size=90%')
+
+## 子流程
+> 不支持
+
+
+## 运行参数
+
+* 值
+> 多行字符串。按照换行符`\r\n` 分隔为字符串列表。
+
+
+## 输出
+
+> 字符串列表,参考: [String](./types/String.md)。
+
+
+## 脚本调用
+
+```python
+
+fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
+
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeTuple.md b/docx/actions/type/TypeTuple.md
index 781277b..6b5ddf0 100644
--- a/docx/actions/type/TypeTuple.md
+++ b/docx/actions/type/TypeTuple.md
@@ -1,27 +1,26 @@
# 字典
定义一个 `Tuple`(元组) 类型。
+![TypeTuple](./images/17.png ':size=90%')
+
## 子流程
-> 支持
+> 支持,可以通过子动作可以为该元组添加多个元素。
-## 运行参数
-* 名称
-> 元组的第 1 个元素。
+## 运行参数
-* 数据
-> 元组的第 2 个元素。
+* 值
+> 元组的第 `1` 个元素。
## 输出
-> [`Tuple`](./types/Tuple.md)
+> 元组,参考:[`Tuple`](./types/Tuple.md) 。
## 脚本调用
```python
-import simple;
-
+num = (7, 14, 21, 28, 35)
```
## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeUri.md b/docx/actions/type/TypeUri.md
deleted file mode 100644
index 8423790..0000000
--- a/docx/actions/type/TypeUri.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# 网址
-创建一个 *网址* 类型
-
-## 子流程
-> 不支持
-
-
-## 运行参数
-
-
-* Url:网址
-
-## 输出
-
-
-
-
-## 脚本调用
-
-```python
-import simple;
-
-```
-
-## 示例
\ No newline at end of file
diff --git a/docx/actions/type/TypeUrl.md b/docx/actions/type/TypeUrl.md
new file mode 100644
index 0000000..3abb3a9
--- /dev/null
+++ b/docx/actions/type/TypeUrl.md
@@ -0,0 +1,30 @@
+# 网址
+创建一个 *网址* 类型。
+
+![TypeUrl](./images/04.png ':size=90%')
+
+## 子流程
+> 不支持
+
+
+## 运行参数
+
+
+* 值
+> 网址, 例如:`https://winui.net` , 注意要以 `http` 或者 `https` 开头。
+
+## 输出
+
+> 网址,参考:[Url](./types/Url.md)
+
+
+
+## 脚本调用
+
+```python
+import simple
+
+url = simple.Url('https://winui.net')
+```
+
+## 示例
\ No newline at end of file
diff --git a/docx/actions/type/images/01.png b/docx/actions/type/images/01.png
index e20d346..8bd32ef 100644
Binary files a/docx/actions/type/images/01.png and b/docx/actions/type/images/01.png differ
diff --git a/docx/actions/type/images/02.png b/docx/actions/type/images/02.png
new file mode 100644
index 0000000..99e0817
Binary files /dev/null and b/docx/actions/type/images/02.png differ
diff --git a/docx/actions/type/images/03.png b/docx/actions/type/images/03.png
new file mode 100644
index 0000000..2b8ce3d
Binary files /dev/null and b/docx/actions/type/images/03.png differ
diff --git a/docx/actions/type/images/04.png b/docx/actions/type/images/04.png
new file mode 100644
index 0000000..7e24ca2
Binary files /dev/null and b/docx/actions/type/images/04.png differ
diff --git a/docx/actions/type/images/05.png b/docx/actions/type/images/05.png
new file mode 100644
index 0000000..7c8d1f9
Binary files /dev/null and b/docx/actions/type/images/05.png differ
diff --git a/docx/actions/type/images/06.png b/docx/actions/type/images/06.png
new file mode 100644
index 0000000..c754a7f
Binary files /dev/null and b/docx/actions/type/images/06.png differ
diff --git a/docx/actions/type/images/07.png b/docx/actions/type/images/07.png
new file mode 100644
index 0000000..b4f4907
Binary files /dev/null and b/docx/actions/type/images/07.png differ
diff --git a/docx/actions/type/images/08.png b/docx/actions/type/images/08.png
new file mode 100644
index 0000000..3e022bf
Binary files /dev/null and b/docx/actions/type/images/08.png differ
diff --git a/docx/actions/type/images/09.png b/docx/actions/type/images/09.png
new file mode 100644
index 0000000..f461e31
Binary files /dev/null and b/docx/actions/type/images/09.png differ
diff --git a/docx/actions/type/images/10.png b/docx/actions/type/images/10.png
new file mode 100644
index 0000000..a54be10
Binary files /dev/null and b/docx/actions/type/images/10.png differ
diff --git a/docx/actions/type/images/11.png b/docx/actions/type/images/11.png
new file mode 100644
index 0000000..abecf9a
Binary files /dev/null and b/docx/actions/type/images/11.png differ
diff --git a/docx/actions/type/images/12.png b/docx/actions/type/images/12.png
new file mode 100644
index 0000000..496dcd4
Binary files /dev/null and b/docx/actions/type/images/12.png differ
diff --git a/docx/actions/type/images/13.png b/docx/actions/type/images/13.png
new file mode 100644
index 0000000..b52498c
Binary files /dev/null and b/docx/actions/type/images/13.png differ
diff --git a/docx/actions/type/images/14.png b/docx/actions/type/images/14.png
new file mode 100644
index 0000000..92699bc
Binary files /dev/null and b/docx/actions/type/images/14.png differ
diff --git a/docx/actions/type/images/15.png b/docx/actions/type/images/15.png
new file mode 100644
index 0000000..ff0452c
Binary files /dev/null and b/docx/actions/type/images/15.png differ
diff --git a/docx/actions/type/images/16.png b/docx/actions/type/images/16.png
new file mode 100644
index 0000000..ab74e9d
Binary files /dev/null and b/docx/actions/type/images/16.png differ
diff --git a/docx/actions/type/images/17.png b/docx/actions/type/images/17.png
new file mode 100644
index 0000000..2eb5bb3
Binary files /dev/null and b/docx/actions/type/images/17.png differ
diff --git a/docx/actions/type/images/18.png b/docx/actions/type/images/18.png
new file mode 100644
index 0000000..a0612c6
Binary files /dev/null and b/docx/actions/type/images/18.png differ
diff --git a/docx/actions/type/images/19.png b/docx/actions/type/images/19.png
new file mode 100644
index 0000000..2d7f945
Binary files /dev/null and b/docx/actions/type/images/19.png differ
diff --git a/docx/actions/type/images/20.png b/docx/actions/type/images/20.png
new file mode 100644
index 0000000..21ad6e6
Binary files /dev/null and b/docx/actions/type/images/20.png differ
diff --git a/docx/actions/type/images/21.png b/docx/actions/type/images/21.png
new file mode 100644
index 0000000..ccbe59c
Binary files /dev/null and b/docx/actions/type/images/21.png differ
diff --git a/docx/actions/type/images/22.png b/docx/actions/type/images/22.png
new file mode 100644
index 0000000..5260102
Binary files /dev/null and b/docx/actions/type/images/22.png differ
diff --git a/docx/enums/MouseButtons.md b/docx/enums/MouseButtons.md
index d3c0cfb..f4c61c9 100644
--- a/docx/enums/MouseButtons.md
+++ b/docx/enums/MouseButtons.md
@@ -1 +1,10 @@
-# MouseButtons
\ No newline at end of file
+# MouseButtons
+
+* Left
+> 鼠标左键
+* Middle
+> 鼠标中键
+* Right
+> 鼠标右键
+* XButton
+> 鼠标侧键
\ No newline at end of file
diff --git a/docx/introduction/workflow/images/08.png b/docx/introduction/workflow/images/08.png
new file mode 100644
index 0000000..bbc6c72
Binary files /dev/null and b/docx/introduction/workflow/images/08.png differ
diff --git a/docx/introduction/workflow/images/09.png b/docx/introduction/workflow/images/09.png
new file mode 100644
index 0000000..c2370e3
Binary files /dev/null and b/docx/introduction/workflow/images/09.png differ
diff --git a/docx/introduction/workflow/resources.md b/docx/introduction/workflow/resources.md
new file mode 100644
index 0000000..8e102c1
--- /dev/null
+++ b/docx/introduction/workflow/resources.md
@@ -0,0 +1,35 @@
+# 资源
+
+流程在分发的时候,往往会碰到缺少资源问题,比如图片、文件等,导致流程在其它电脑上无法执行。要解决此种问题,可以把相应的资源或者文件嵌入流程当中使用,这样可以避免依赖本地资源文件。
+
+![Resources](./images/08.png)
+
+
+* 添加
+> 添加本地资源。
+* 删除
+> 删除已经存在资源。
+
+
+## 右键菜单
+
+![menu](./images/09.png)
+
+
+* 删除
+
+* 添加文件
+
+* 重命名
+
+* 替换
+
+> 从本地文件替换当前选中的图像。
+
+* 替换图像
+
+> 从剪切板替换当前选中的图像。
+
+* 粘贴
+
+> 从剪切板粘贴图像。
\ No newline at end of file
diff --git a/docx/types/Bytes.md b/docx/types/Bytes.md
new file mode 100644
index 0000000..b93a08f
--- /dev/null
+++ b/docx/types/Bytes.md
@@ -0,0 +1,3 @@
+# Bytes
+
+Class `Bytes`. 字节序列。
\ No newline at end of file
diff --git a/docx/types/Dict.md b/docx/types/Dict.md
index f872add..9fc86cd 100644
--- a/docx/types/Dict.md
+++ b/docx/types/Dict.md
@@ -1 +1,16 @@
-# Dict
\ No newline at end of file
+# Dict
+
+字典是另一种可变容器模型,且可存储任意类型对象。
+
+* 键(key)必须是唯一的,可以用数字,字符串或元组充当,而用列表就不行。
+
+* 同一个键出现两次,最后出现的会更新前一个的值。
+
+## 常用方式
+
+字典的每个键值 `key:value` 对用冒号`:`分割,每个键值对之间用逗号`,`分割,整个字典包括在花括号 `{}` 中 ,格式如下所示:
+
+````python
+
+tel = {'jack': 4098, 'sape': 4139}
+````
\ No newline at end of file
diff --git a/docx/types/KeySequence.md b/docx/types/KeySequence.md
index f052fde..6ccaeb0 100644
--- a/docx/types/KeySequence.md
+++ b/docx/types/KeySequence.md
@@ -1 +1,3 @@
-# KeySequence
\ No newline at end of file
+# KeySequence
+
+Class `KeySequence`, 快捷键。
\ No newline at end of file
diff --git a/docx/types/List.md b/docx/types/List.md
new file mode 100644
index 0000000..2ac8b42
--- /dev/null
+++ b/docx/types/List.md
@@ -0,0 +1,13 @@
+# List
+
+*Python* 列表可以存储不同类型的项目或元素的有序集合。它们通常用于将多个项目编译为单个可变变量,这有助于快速检索项目、指定输出或执行计算。列表也是 *Python* 中的一种内置数据结构(与元组、集合和字典一起),它是一种存储和格式化数据的特定方式。
+
+
+要在 Python 中创建列表,请在方括号 ([]) 内写入一组项目,并用逗号分隔每个项目。列表中的项目可以是 *Python* 中的任何基本对象类型,包括整数、字符串、浮点值或布尔值。
+
+例如,要创建一个名为“z”的列表,其中包含整数 3、7、4 和 2,您可以写道:
+
+````python
+# Define a list
+z = [3, 7, 4, 2]
+````
\ No newline at end of file
diff --git a/docx/types/Path.md b/docx/types/Path.md
index 966439b..336590e 100644
--- a/docx/types/Path.md
+++ b/docx/types/Path.md
@@ -1,9 +1,11 @@
# Path
-表示文件系统路径的类型
+表示文件系统路径的类型。
```python
+p = 'c:/windows'
+
```
# Paths
\ No newline at end of file
diff --git a/docx/types/Slice.md b/docx/types/Slice.md
new file mode 100644
index 0000000..dc163b9
--- /dev/null
+++ b/docx/types/Slice.md
@@ -0,0 +1,26 @@
+# Slice
+
+Python 内置函数 slice() 返回一个切片对象,用于切取任何序列(字符串、元组、列表、range 或字节序列)等。
+
+
+````python
+text = 'Hello, winui++!'
+
+sliced = slice(3)
+
+sliced
+# slice(None, 3, None)
+
+type(sliced)
+# slice
+
+text[sliced]
+# 'hel'
+
+````
+* start -- 切片开始位置。如果未提供,则默认为 `None`。
+* stop -- 结束位置,切片在索引 `stop - 1`(最后一个元素)处停止。
+* step -- 步长,用于确定切片的每个索引之间的增量。如果未提供,则默认为 `None`。
+
+因此,*slice* 对象有以上三个信息,没有指定的会为 `None`。如果 *start* 为 `None`,则从 `0` 开始。如果 *step* 为 `None` ,步长缺省为 `1`。
+
diff --git a/docx/types/Tuple.md b/docx/types/Tuple.md
index 8dcee2f..dfa5c7f 100644
--- a/docx/types/Tuple.md
+++ b/docx/types/Tuple.md
@@ -1,3 +1,8 @@
# Tuple
-Class `Tuple`, 元组。
\ No newline at end of file
+元组(tuple)是不可变的 *Python* 对象。元组是一种序列,就像列表一样,都可以描述一组数据的集合,它们都是容器,是一系列组合的对象。元组和列表之间的主要区别是元组不能像列表那样改变元素的值,可以简单地理解为 "只读列表"。 元组使用小括号: `()`,而列表使用方括号:`[]` 。
+
+
+````python
+num = (7, 14, 21, 28, 35)
+````
\ No newline at end of file
diff --git a/docx/types/Url.md b/docx/types/Url.md
index 7964ab2..c344cfc 100644
--- a/docx/types/Url.md
+++ b/docx/types/Url.md
@@ -1,7 +1,19 @@
# Url
-Class `# Url`, 网址
+Class `Url`, 定义表示统一资源标识符 (URL) 值的对象,简称:网址。
## 属性
+
+
+
+## 示例
+
+此示例创建一个 Url 对象,该对象表示使用`http`协议访问网站 。
+
+````python
+
+url = Url("http://www.winui.net")
+
+````
\ No newline at end of file
diff --git a/mouse/CellMove.simple b/mouse/CellMove.simple
new file mode 100644
index 0000000..42a7a2a
Binary files /dev/null and b/mouse/CellMove.simple differ
diff --git a/mouse/list.simple b/mouse/list.simple
new file mode 100644
index 0000000..5db260c
Binary files /dev/null and b/mouse/list.simple differ
diff --git a/mouse/strings.simple b/mouse/strings.simple
new file mode 100644
index 0000000..a17d293
Binary files /dev/null and b/mouse/strings.simple differ
diff --git a/system/AttachProcess.simple b/system/AttachProcess.simple
new file mode 100644
index 0000000..1f48126
Binary files /dev/null and b/system/AttachProcess.simple differ
diff --git a/system/ReadMemory.simple b/system/ReadMemory.simple
new file mode 100644
index 0000000..11b4825
Binary files /dev/null and b/system/ReadMemory.simple differ
diff --git a/system/WriteMemory.simple b/system/WriteMemory.simple
new file mode 100644
index 0000000..fb709b7
Binary files /dev/null and b/system/WriteMemory.simple differ
diff --git a/type/boolean.simple b/type/boolean.simple
new file mode 100644
index 0000000..df8113f
Binary files /dev/null and b/type/boolean.simple differ
diff --git a/type/camera.simple b/type/camera.simple
new file mode 100644
index 0000000..7812843
Binary files /dev/null and b/type/camera.simple differ
diff --git a/type/color.simple b/type/color.simple
new file mode 100644
index 0000000..4441505
Binary files /dev/null and b/type/color.simple differ
diff --git a/type/dict.simple b/type/dict.simple
new file mode 100644
index 0000000..41ca028
Binary files /dev/null and b/type/dict.simple differ
diff --git a/type/dir.simple b/type/dir.simple
new file mode 100644
index 0000000..bec4dd4
Binary files /dev/null and b/type/dir.simple differ
diff --git a/type/file.simple b/type/file.simple
new file mode 100644
index 0000000..7d98f1f
Binary files /dev/null and b/type/file.simple differ
diff --git a/type/host.simple b/type/host.simple
new file mode 100644
index 0000000..0878ca5
Binary files /dev/null and b/type/host.simple differ
diff --git a/type/model.simple b/type/model.simple
new file mode 100644
index 0000000..1bdc4f8
Binary files /dev/null and b/type/model.simple differ
diff --git a/type/num.simple b/type/num.simple
new file mode 100644
index 0000000..3bf048d
Binary files /dev/null and b/type/num.simple differ
diff --git a/type/password.simple b/type/password.simple
new file mode 100644
index 0000000..9644524
Binary files /dev/null and b/type/password.simple differ
diff --git a/type/point.simple b/type/point.simple
new file mode 100644
index 0000000..9f5dc2a
Binary files /dev/null and b/type/point.simple differ
diff --git a/type/ptr.simple b/type/ptr.simple
new file mode 100644
index 0000000..1cbab87
Binary files /dev/null and b/type/ptr.simple differ
diff --git a/type/rect.simple b/type/rect.simple
new file mode 100644
index 0000000..5f20f85
Binary files /dev/null and b/type/rect.simple differ
diff --git a/type/resource.simple b/type/resource.simple
new file mode 100644
index 0000000..93d8614
Binary files /dev/null and b/type/resource.simple differ
diff --git a/type/scalar.simple b/type/scalar.simple
new file mode 100644
index 0000000..1996986
Binary files /dev/null and b/type/scalar.simple differ
diff --git a/type/shortcut.simple b/type/shortcut.simple
new file mode 100644
index 0000000..2d261cf
Binary files /dev/null and b/type/shortcut.simple differ
diff --git a/type/slice.simple b/type/slice.simple
new file mode 100644
index 0000000..2c7dc15
Binary files /dev/null and b/type/slice.simple differ
diff --git a/type/string.simple b/type/string.simple
new file mode 100644
index 0000000..9e8467e
Binary files /dev/null and b/type/string.simple differ
diff --git a/type/tuple.simple b/type/tuple.simple
new file mode 100644
index 0000000..22e1e4e
Binary files /dev/null and b/type/tuple.simple differ
diff --git a/type/url.simple b/type/url.simple
new file mode 100644
index 0000000..1fb0b6f
Binary files /dev/null and b/type/url.simple differ