明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6712|回复: 8

第十一章 注册表函数

  [复制链接]
发表于 2012-11-28 22:04:03 | 显示全部楼层 |阅读模式
第十一章 注册表函数
Visual LISP提供了专门的函数用于访问和修改Windows注册表。你可以用这些函数在本地注册表的HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER单元中查询和修改注册表项。你不能使用Visual LISP注册表函数来访问远程注册表,也不能用Visual LISP来访问HKEY_USERS和HKEY_CLASSES_ROOT以及HKEY_CURRENT_CONFIG注册表单元。

注意,即使在Visual LISP可以访问的注册表单元,你仍会受限于进程所有者的安全环境以致限制了你的访问。换句话说,如果Visual LISP应用程序是被一个对这台机器权限有限的用户使用时,有些注册表项可能无法访问或不能被Visual LISP修改。这个问题在网络环境中需要重点考虑,因为它的组策略会修改注册表的访问许可。

(vl-registry-read regkey [value-name])
如果注册表中有定义注册表项或注册表值名(符号),则返回值指定给一个明确的注册表项或注册表值名(符号)的值。如果未找到该注册表项或值名,则结果就为nil。

参数:
RegKey 在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER单元中的注册表项名称。
Value-Name (可选项)在指定注册表项下方的从属值名(符号)的名称。

示例:
(vl-registry-write “HKEY_CURRENT_USER\\Example1” “FOO” “123”)
“123”
(vl-registry-read "HKEY_CURRENT_USER\\Example1" “FOO”)
“123”
(vl-registry-read “HKEY_CURRENT_USER\\Example1”)
nil
(vl-registry-write "HKEY_CURRENT_USER\\Example2" "" "ABCDEF")
"ABCDEF"
(vl-registry-read "HKEY_CURRENT_USER\\Example2")
"ABCDEF"


(vl-registry-write regkey [value-name] value)
将值写入注册表项或注册表项的值名中去,如果成功返回值。如果不成功则返回nil。

参数:
RegKey
注册表项的名称。
Value-Name (可选项)在指定注册表项下方的从属值名(符号)的名称。
Value 写入到指定的注册表项或值名的值。

示例:
(vl-registry-write “HKEY_CURRENT_USER\\Example1” “TEST1” “123”)
“123”
(vl-registry-write “HKEY_CURRENT_USER\\Example1” “” “456”)
“456”

(vl-registry-delete regkey [value-name])
删除注册表中指定位置的注册表项及其相关的值,成功时返回T,如果失败则返回nil。如果提供了value-name且不为nil,指定的值将被从注册表中清除。如果没有value-name或为nil,该函数将删除指定注册表项及它的所有值。如果注册表中下面有子注册表项存在,该注册表项将不能被删除。要删除含有子注册表项的注册表项,你必须先用(vl-registry-descendents)来收集子注册表项并先将它们删除。

参数:
RegKey
注册表项的名称。
Value-Name (可选项)在指定注册表项下方的从属值名(符号)的名称。

示例:
(vl-registry-write "HKEY_CURRENT_USER\\Example1" "TEST1" "123")
"123"
(vl-registry-delete "HKEY_CURRENT_USER\\Example1")
T

(vl-registry-descendents regkey [value-names])
返回指定注册表项下属的子项或值名的表。如果提供了value-names且不为nil,将从注册表中列出指定的值名。如果没有value-names或为nil,该函数则显示注册表项的所有子项。还要注意到,返回的值经常是按倒序排列。

参数:
RegKey 注册表项名称。
Value-Names 包含regkey入口的数值的字符串。

示例:
(vl-registry-descendents "HKEY_LOCAL_MACHINE\\SOFTWARE")
("WexTech Systems" "Voice" "Synaptics" "Symantec" "Secure" "Program Groups" "Policies" "ODBC" "Nico Mak Computing" "MicroVision" "Microsoft" "MetaStream" "McNeel" "McAfee" "JavaSoft" "Intel Corporation" "INTEL" "InstalledOptions" "Helios" "DOSLib" "Dell Computers" "Dell Computer Corporation" "Dell Computer" "DameWare Development" "Clients" "Classes" "BVRP Software" "BigFix" "Autodesk" "ATI Technologies" "Apple Computer, Inc." "America Online" "Adobe" "Adaptec" "3Com")

你可打开AutoCAD安装程序的Visual LISP样板目录下的RegDump.LSP文件,可看到注册表函数的更多例子。在这个文件中,你可以找到一个名为(registry-tree-dump)的有用函数,它对指定注册表项执行递归来搜索到其下级的所有子项和值名。

提示:你可以创建一对Get和Set函数来保存和恢复注册表值,用于控制标准位置和错误捕获。你应该会发现以下两个函数是很有用的:

(setq G$REGROOT "HKEY_CURRENT_USER\\Software\\MyApplication\\")
(defun RegGet (key default / val)
  (if (= nil (setq val (vl-registry-read (strcat G$REGROOT key))))
    (progn
      (regset key default)
(setq val (vl-registry-read (strcat G$REGROOT key)))
    )
  )
  (if val val default)
)
(defun RegSet (key val)
  (vl-registry-write (strcat G$REGROOT key) "" val)
)




该贴已经同步到 明经通道的微博
发表于 2012-11-29 07:55:02 | 显示全部楼层
老大辛苦了。
发表于 2012-11-29 09:09:27 | 显示全部楼层
老大辛苦了!这一章常用,要好好学习下!
发表于 2013-4-10 01:57:40 | 显示全部楼层
注册表的键值有三种,字符串值、DWORD值、二进制值
vl-registry-read 只能读出前两种,二进制的读不出来?
发表于 2013-5-31 10:20:56 | 显示全部楼层
老大辛苦了!这一章常用,要好好学习下!
发表于 2013-8-6 22:33:26 | 显示全部楼层
支持
发表于 2014-6-8 21:34:29 | 显示全部楼层
增长了知识,多谢!
发表于 2014-7-25 13:49:48 | 显示全部楼层
vbs中
WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey", cClipBoard, "REG_SZ"
如果改成lisp?

            (vl-registry-write "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey" ""(getstring))
            (vl-registry-write "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey" (getstring))
注册键名称错误
发表于 2015-10-30 14:42:21 | 显示全部楼层
学习一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-27 12:28 , Processed in 0.345171 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表