论坛风格切换切换到宽版
  • 2968阅读
  • 7回复

【已解决】虎版:请教这个注册表怎么提取。 [复制链接]

上一主题 下一主题
离线kwana
 

发帖
20
金钱
200
威望
20
只看楼主 倒序阅读 0 发表于: 2014-05-21
function CADPath(Param:string): String;
var
  filePath: String;
  subkeynames1, subkeynames2: TArrayOfString;
begin
   if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD', subkeynames1) then
     if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[0], subkeynames2) then
       if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[0]+'\'+subkeynames2[0], 'AcadLocation', filepath) then
        begin
        Result:=filePath;
        end else
        Result:='{pf}\';
end;

以前用这个脚本可以提取HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD下面子键名可能不同的路径,但是只能在AutoCAD下面只有一个子键的时候,如果AutoCAD下面有两个子键呢??
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2014-05-23
下面的代码可以用于有多个子键的情形。

  1. function CADPath(Param:string): String;
  2. var
  3.   i, j: Integer;
  4.   filePath: String;
  5.   subkeynames1, subkeynames2: TArrayOfString;
  6. begin
  7.   Result:=ExpandConstant('{pf}');
  8.    if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD', subkeynames1) then
  9.     for i:= 0 to GetArrayLength(subkeynames1)-1 do
  10.      if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[i], subkeynames2) then
  11.         for j:= 0 to  GetArrayLength(subkeynames2)-1 do
  12.           if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[i]+'\'+subkeynames2[j], 'AcadLocation', filepath) then
  13.             Result:=filePath;
  14. end;



离线kwana

发帖
20
金钱
200
威望
20
只看该作者 2 发表于: 2014-05-23
回 1楼(gnatix) 的帖子
为什么编译出错呢。


离线kwana

发帖
20
金钱
200
威望
20
只看该作者 3 发表于: 2014-05-23
回 2楼(kwana) 的帖子
kwana:为什么编译出错呢。  (2014-05-23 12:43) 

哦,我改成
if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[0], subkeynames2) then
这样就不错了。
离线kwana

发帖
20
金钱
200
威望
20
只看该作者 4 发表于: 2014-05-23
回 1楼(gnatix) 的帖子
gnatix:下面的代码可以用于有多个子键的情形。function CADPath(Param:string): String;var....... (2014-05-23 02:33) 

谢谢虎版了,如果我新建一个TLabel,文字值就是这个CADPath该怎么表达呢??
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 5 发表于: 2014-05-23
我给出的代码通常都会先测试过的,一般不会有编译错误。上面出现的问题的原因是,论坛把代码文本中的某些符号转换了,比如把方括号和字母i 解释为了斜体。我现在把上面的代码作为代码给出了,这样就没有问题了。

上面问题的答案是:
xxxLabel.Caption := CADPath(''):
离线kwana

发帖
20
金钱
200
威望
20
只看该作者 6 发表于: 2014-05-23
回 5楼(gnatix) 的帖子
gnatix:我给出的代码通常都会先测试过的,一般不会有编译错误。上面出现的问题的原因是,论坛把代码文本中的某些符号转换了,比如把方括号和字母i 解释为了斜体。我现在把上面的代码作为代码给 .. (2014-05-23 19:01) 

谢谢热心的虎版。。
离线fielero

发帖
20
金钱
200
威望
20
只看该作者 7 发表于: 2015-02-11
回 1楼(gnatix) 的帖子
gnatix:下面的代码可以用于有多个子键的情形。 function CADPath(Param:string): String;var  i, j: Integer;....... (2014-05-23 02:33) 

终于注册成功啦!除了来学习之外,很大成分都是来瞻仰虎大的!!!