|
.版本 2
.程序集 桌面右键菜单
.程序集变量 注册表, 注册表操作Ex
.子程序 桌面右键菜单_创建SP, 整数型, 公开, 成功返回空,失败返回失败原因
.参数 主菜单名, 文本型, , 桌面右键显示的菜单名
.参数 主菜单软件路径, 文本型, 可空, 创建一级菜单如不填写,点击菜单会报错,创建二级菜单时此参数无效
.参数 二级菜单名称, 文本型, 可空 数组, 二级菜单的显示名称数组
.参数 二级软件路径, 文本型, 可空 数组, 二级菜单点击后打开的软件路径,数组最大长度为二级菜单的数量
.参数 主菜单图标, 字节集, 可空, 菜单的图标
.参数 二级菜单图标, 字节集, 可空 数组, 二级菜单的图标
.局部变量 i, 整数型
.局部变量 二级菜单数量, 整数型
.局部变量 SubCommands关联项, 文本型, , , SubCommands项的字符串值,以分号“;”隔开,用于主菜单与二级菜单相关联
.判断开始 (取数组成员数 (二级菜单名称) = 0) ' 只创建一级
注册表.写入键值Ex_文本 (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名, “Icon”, 主菜单图标, #REG_SZ, 真) ' //菜单图标
返回 (注册表.写入键值Ex_文本 (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名 + “\command\”, “”, 到字节集 (主菜单软件路径), #REG_SZ, 真)) ' //菜单点击后打开的软件路径
.默认
.判断开始 (取数组成员数 (二级菜单名称) ≠ 取数组成员数 (二级软件路径))
返回 (110) ' 二级菜单软件路径与二级菜单名称 的 数组长度不一致!!
.默认
二级菜单数量 = 取数组成员数 (二级菜单名称)
重定义数组 (二级菜单图标, 真, 二级菜单数量)
.变量循环首 (1, 二级菜单数量, 1, i)
' //第一步
注册表.写入键值Ex_文本 (#HKEY_LOCAL_MACHINE, “SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\desm_MyMenu” + 到文本 (i), “Icon”, 二级菜单图标 [i], #REG_SZ, 真) ' //二级菜单图标
注册表.写入键值Ex_文本 (#HKEY_LOCAL_MACHINE, “SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\desm_MyMenu” + 到文本 (i), “”, 到字节集 (二级菜单名称 [i]), #REG_SZ, 真) ' //二级菜单名称(默认项)
注册表.写入键值Ex_文本 (#HKEY_LOCAL_MACHINE, “SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\desm_MyMenu” + 到文本 (i) + “\command”, “”, 到字节集 (二级软件路径 [i]), #REG_SZ, 真) ' //二级菜单点击后打开的软件路径
SubCommands关联项 = SubCommands关联项 + “desm_MyMenu” + 到文本 (i) + “;”
.变量循环尾 ()
' //第二步
注册表.写入键值Ex_文本 (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名, “Icon”, 主菜单图标, #REG_SZ, 真) ' //首级菜单图标
返回 (注册表.写入键值Ex_文本 (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名, “SubCommands”, 到字节集 (SubCommands关联项), #REG_SZ, 真)) ' //二级菜单链接(单个:mune1; 多个:menu1;menu2;menu3;...)
.判断结束
.判断结束
.子程序 桌面右键菜单_删除, , 公开, 用户删除桌面右键菜单,会同时删除主菜单名关联的二级菜单
.参数 主菜单名, 文本型, , 桌面右键显示的菜单名
.局部变量 rev, 注册表_键
.局部变量 关联的二级菜单项目, 文本型, , "0"
.局部变量 i, 整数型
注册表.打开键Ex (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名)
注册表.读取键值Ex (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名, “SubCommands”, rev)
注册表.关闭键Ex ()
关联的二级菜单项目 = 分割文本 (字节集_到文本 (rev.键值), “;”, ) ' 二级菜单名称数组
.如果真 (取数组成员数 (关联的二级菜单项目) > 0) ' SubCommands有值,说明是二级菜单
.变量循环首 (1, 取数组成员数 (关联的二级菜单项目), 1, i)
注册表.删除注册表项 (#HKEY_LOCAL_MACHINE, “SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\” + 关联的二级菜单项目 [i] + “\command”) ' 经实测,需先删除commad,不然无法删除键值
注册表.删除注册表项 (#HKEY_LOCAL_MACHINE, “SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\” + 关联的二级菜单项目 [i])
.变量循环尾 ()
注册表.关闭键Ex ()
.如果真结束
注册表.删除注册表项 (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名 + “\command”)
注册表.删除注册表项 (#HKEY_CLASSES_ROOT, “Directory\Background\shell\” + 主菜单名) |
|