- 积分
- 1991
- 明经币
- 个
- 注册时间
- 2004-7-21
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2005-6-9 22:59:00
|
显示全部楼层
秋枫发表于2005-5-30 21:06:00我系统中没有安装2002,无法详细说明,以2006为例,这个与2002的注册表结构是差不多的。
遍历的Innosetup源代码你可以参考本主题的4楼。
如图所示:...
我试者做了,但整个注册表没有写进去啊
下面是我的源代码,请帮帮忙给看看 procedure AddAutoLoadLisp;
var i, j, k, n: integer; StartupToAdd, key, tmp: string; SupportedAcadKeys1,SupportedAcadKeys,profiles: TArrayOfString; StringList: TStringList; ApploadLoadCtrls: Cardinal; begin StartupToAdd := 'c:\lisp\menu\ks.mns'; RegGetValueNames(HKCU, 'Software\Autodesk\AuoCAD\',SupportedAcadKeys1) // 设置appload的loadctrls for i := 0 to GetArrayLength(SupportedAcadKeys) -1 do //GetArrayLength获取排列长度。 begin if RegQueryDWordValue(HKLM, SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls) then //询问指定的 REG_DWORD-type 注册表键/值,并返回值到 ResultDWord。如果成功返回 True。当返回 False 时,不修改 ResultDWord 值。
begin ApploadLoadCtrls := (ApploadLoadCtrls or 2); RegWriteDWordValue(HKLM, SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls); //写入指定的 REG_DWORD-type 注册表值,如果完成则返回 True,反之返回 False。 end; if RegQueryDWordValue(HKCU, SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls) then //询问指定的 REG_DWORD-type 注册表键/值,并返回值到 ResultDWord。如果成功返回 True。当返回 //False 时,不修改 ResultDWord 值。
begin ApploadLoadCtrls := (ApploadLoadCtrls or 2); RegWriteDWordValue(HKCU, SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls); end; end;
StringList := TStringList.Create; try for k:=0 to GetArrayLength(SupportedAcadKeys1)-1 do
if RegGetSubkeyNames(HKCU, SupportedAcadKeys1[k],SupportedAcadKeys) then for i := 0 to GetArrayLength(SupportedAcadKeys) -1 do if RegGetSubkeyNames(HKCU, SupportedAcadKeys+'\<<未命名配置>>', profiles) // 并且存在Profiles, 取得所有Profiles then for j := 0 to GetArrayLength(profiles)-1 do if regkeyExists(HKCU, SupportedAcadKeys+'\<<未命名配置>>\'+profiles[j]+'\Dialogs') then begin key := SupportedAcadKeys+'\<<未命名配置>>\'+profiles[j]+'\Dialogs\Appload\Startup'; if not regkeyExists(HKCU, key) then RegWriteStringValue(HKCU, key, 'NumStartup', '0'); RegQueryStringValue(HKCU, key, 'NumStartup', tmp); // 读入已有Startup列表 n := StrToIntDef(tmp, 0); //转换字符串到一个数字, StringList.Clear; for k := 1 to n do begin RegQueryStringValue(HKCU, key, IntToStr(k)+'Startup', tmp); StringList.Add(tmp); RegDeleteValue(HKCU, key, IntToStr(k)+'Startup'); end; // 去除重复文件与不存在的文件 for k := StringList.Count - 1 downto 0 do if (UpperCase(StringList[k])=UpperCase(startupToAdd)) or (not FileExists(StringList[k])) //UPPERCASE (s string)返回s中相同文字的字符串但所有字母都转换成大写字母 then StringList.Delete(k); // 添加要加的文件 StringList.Add(startupToAdd); // 重建键值 for k := 0 to StringList.Count - 1 do RegWriteStringValue(HKCU, key, IntToStr(k+1)+'Startup', StringList[k]); // 设置总数 RegWriteStringValue(HKCU, key, 'NumStartup', IntToStr(StringList.Count)); end; finally StringList.Free; end; end; end. 下面是我机子上的autocad注册表结构图
|
|