论坛风格切换切换到宽版
  • 2057阅读
  • 2回复

请教老虎版主,提取注册表路径问题 [复制链接]

上一主题 下一主题
离线546242502
 

发帖
332
金钱
-3060
威望
-306
只看楼主 倒序阅读 0 发表于: 2015-08-21
下面是一个帖子的内容,搜不到了,想请问下它这种情况,是不是这样?
Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SOFTWARE\Rime]


[HKEY_LOCAL_MACHINE\SOFTWARE\Rime\me]
"Server"="Weasel"


[HKEY_LOCAL_MACHINE\SOFTWARE\Rime\Weasel]
"InstallDir"="C:\\Program Files (x86)\\Rime"

"ServerExecutable"="WeaselServer.exe"


HKEY_LOCAL_MACHINE\SOFTWARE\Rime 下游两个或多个项,其中有一个项一中含有路径,为什么我套用一直不成功?
还有想请问下老虎版主,您有没有汉化 SDL Passolo 2011 Pro 11.9.0.247 SP9,能否发布出来啊

  1. 请教这个注册表怎么提取:
  2. function CADPath(Param:string): String;
  3. var
  4.   filePath: String;
  5.   subkeynames1, subkeynames2: TArrayOfString;
  6. begin
  7.    if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD', subkeynames1) then
  8.      if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[0], subkeynames2) then
  9.        if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[0]+'\'+subkeynames2[0], 'AcadLocation', filepath) then
  10.         begin
  11.         Result:=filePath;
  12.         end else
  13.         Result:='{pf}\';
  14. end;
  15. 以前用这个脚本可以提取HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD下面子键名可能不同的路径,但是只能在AutoCAD下面只有一个子键的时候,如果AutoCAD下面有两个子键呢??
  16. --------------------->
  17. 下面的代码可以用于有多个子键的情形
  18. function CADPath(Param:string): String;
  19. var
  20.   i, j: Integer;
  21.   filePath: String;
  22.   subkeynames1, subkeynames2: TArrayOfString;
  23. begin
  24.   Result:=ExpandConstant('{pf}');
  25.    if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD', subkeynames1) then
  26.     for i:= 0 to GetArrayLength(subkeynames1)-1 do
  27.      if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[i], subkeynames2) then
  28.         for j:= 0 to  GetArrayLength(subkeynames2)-1 do
  29.           if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[i]+'\'+subkeynames2[j], 'AcadLocation', filepath) then
  30.             Result:=filePath;
  31. end;


离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-08-22
第一:上面的代码中用了 i 作为计数变量,所以部分代码被吃掉了。先把正确的代码恢复出了,而且不要用 i 作为变量!!!
function CADPath(Param:string): String;
var
  n, j: Integer;
  filePath: String;
  subkeynames1, subkeynames2: TArrayOfString;
begin
  Result:=ExpandConstant('{pf}');
   if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD', subkeynames1) then
    for n:= 0 to GetArrayLength(subkeynames1)-1 do
     if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[n], subkeynames2) then
        for j:= 0 to  GetArrayLength(subkeynames2)-1 do
          if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Autodesk\AutoCAD\'+subkeynames1[n]+'\'+subkeynames2[j], 'AcadLocation', filepath) then
            Result:=filePath;
end;

第二:上面的代码本身应该没有问题。如果效果不是你预期的,原因可能是在 64位系统上运行的缘故,而应用程序是 32位的,其注册表位置也相应地在 WOW6432NODE 下。常量 HKEY_LOCAL_MACHINE 或者 HKLM 在 32 位 和 64 位系统下所指的内容是不同的。具体参看帮助文件。

第三:你说的 Passolo 版本我没有汉化。
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 2 发表于: 2015-08-22
回 1楼(gnatix) 的帖子
gnatix:第一:上面的代码中用了 i 作为计数变量,所以部分代码被吃掉了。先把正确的代码恢复出了,而且不要用 i 作为变量!!!function CADPath(Param:string): String;var  n, j: Integer;  filePath:  .. (2015-08-22 03:54)

第一,不好意思,老虎版主,忘记贴入代码里了

第二,不知道,我在 WOW6432NODE 下,非WOW6432NODE 下都测试了,没有效果,所以拿上来问问;

第三,最近想汉化一个软件,2015 版本用不惯,汉化新世纪上面您发布的汉化版本存在很多问题,对 64 位支持不好,SDL Passolo 2011 Pro 11.9.0.247 SP9 版本对 64 支持比较好,但英文版用不惯;