秋枫
发表于 2005-6-11 13:15:00
To 孤独客:
因为时间关系,大致看了一下:
StartupToAdd是要加载的LISP、VBA、ARX程序,你的MNS不是程序,只是一个菜单定义文件。
你如果要加载菜单,就不要在Appload中加载了,你需要研究一下AutoCAD的MENUS键值下的东东。大致的方法与这写法差不多,我注意到你把所有的函数都注释出来了,既然明白这些函数的功能,应该可以举一反三写出在MENUS中添加MNS的代码。
秋枫
发表于 2005-6-11 13:17:00
另,你提供的图片是链接至你的本地硬盘的,所以除了你别人都看不到。
孤独客
发表于 2005-6-13 20:42:00
本帖最后由 作者 于 2005-6-13 22:29:11 编辑
我改成LISP文件也没有写进注册表,
那些解释是我从网上下载的
我对函数解释中的排列不怎么明白?
如果依你的AUTOCAD2006为例
RegGetSubkeyNames(HKCU, Software\Autodesk\AuoCAD\R16.2',SupportedAcadKeys1)
SupportedAcadKeys1值应改是什么呢
孤独客
发表于 2005-6-13 22:36:00
秋枫发表于2005-6-11 13:17:00static/image/common/back.gif另,你提供的图片是链接至你的本地硬盘的,所以除了你别人都看不到。
我怎么才能让大家都看到呢?<BR>
bh5280
发表于 2005-6-16 11:36:00
秋大侠:我用那个旧版就是能支持r14版本的那个已经有一段时间了,有个问题今天想问一下,就是每当我运行一次CAD2004后,R14里那个菜单就不自动加载了,需要点一次修复,怎么能解决这个问题呢?
秋枫
发表于 2005-6-26 15:24:00
bh5280发表于2005-6-16 11:36:00static/image/common/back.gif秋大侠:我用那个旧版就是能支持r14版本的那个已经有一段时间了,有个问题今天想问一下,就是每当我运行一次CAD2004后,R14里那个菜单就不自动加载了,需要点一...
这个无法解决。因为2004与14的菜单文件MNC格式不同。
针对不同的AutoCAD版本使用不同的MNU文件即可。新版的可以通用LSP实现这点,但不支持R14了。<BR>
秋枫
发表于 2005-6-26 15:26:00
孤独客发表于2005-6-13 20:42:00static/image/common/back.gif我改成LISP文件也没有写进注册表,
那些解释是我从网上下载的
我对函数解释中的排列不怎么明白?
如果依你的AUTOCAD2006为例
Re...
<BR>那个是用于返回结果用的。不需要你给它值,只需要提供一个变量名就行了。这个变量中会存储返回的结果。
孤独客
发表于 2005-6-27 22:17:00
小弟急用,先谢谢了!
var i, j, k, n: integer;<BR> StartupToAdd, key, tmp: string;<BR> SupportedAcadKeys,profiles: TArrayOfString;<BR> StringList: TStringList;<BR> ApploadLoadCtrls: Cardinal;<BR> BEGIN<BR> StartupToAdd := 'c:\lispsetup\lisp\cttsetup.lsp';<BR>RegGetSubkeyNames(HKCU, 'Software\Autodesk\AuoCAD\R15.0',SupportedAcadKeys)<BR> // 设置appload的loadctrls<BR> for i := 0 to GetArrayLength(SupportedAcadKeys) -1 do //GetArrayLength获取排列长度。<BR> begin<BR> if RegQueryDWordValue(HKLM, 'Software\Autodesk\AuoCAD\R15.0'+SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls) then //询问指定的 REG_DWORD-type 注册表键/值,并返回值到 ResultDWord。如果成功返回 True。当返回 False 时,不修改 ResultDWord 值。
begin<BR> ApploadLoadCtrls := (ApploadLoadCtrls or 2);<BR> RegWriteDWordValue(HKLM, 'Software\Autodesk\AuoCAD\R15.0'+SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls); //写入指定的 REG_DWORD-type 注册表值,如果完成则返回 True,反之返回 False。<BR> end;<BR> if RegQueryDWordValue(HKCU, 'Software\Autodesk\AuoCAD\R15.0'+SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls) then //询问指定的 REG_DWORD-type 注册表键/值,并返回值到 ResultDWord。如果成功返回 True。当返回 //False 时,不修改 ResultDWord 值。
begin<BR> ApploadLoadCtrls := (ApploadLoadCtrls or 2);<BR> RegWriteDWordValue(HKCU, 'Software\Autodesk\AuoCAD\R15.0'+SupportedAcadKeys+'\Applications\AcadAppload', 'LOADCTRLS', ApploadLoadCtrls);<BR> end;<BR> end;<BR> StringList := TStringList.Create;<BR> try<BR> for i := 0 to GetArrayLength(SupportedAcadKeys) -1 do<BR> if RegGetSubkeyNames(HKCU, 'Software\Autodesk\AuoCAD\R15.0'+SupportedAcadKeys+'\Profiles\', profiles) // 并且存在Profiles, 取得所有Profiles<BR> then<BR> for j := 0 to GetArrayLength(profiles)-1 do<BR> if regkeyExists(HKCU, 'Software\Autodesk\AuoCAD\R15.0'+SupportedAcadKeys+'\Profiles\'+profiles+'\Dialogs') then<BR> begin<BR> key := 'Software\Autodesk\AuoCAD\R15.0'+SupportedAcadKeys+'\profiles\'+profiles+'\Dialogs\Appload\Startup';<BR> if not regkeyExists(HKCU, key) then RegWriteStringValue(HKCU, key, 'NumStartup', '0');<BR> RegQueryStringValue(HKCU, key, 'NumStartup', tmp);<BR> // 读入已有Startup列表<BR> n := StrToIntDef(tmp, 0); //转换字符串到一个数字,<BR> StringList.Clear;<BR> for k := 1 to n do<BR> begin<BR> RegQueryStringValue(HKCU, key, IntToStr(k)+'Startup', tmp);<BR> StringList.Add(tmp);<BR> RegDeleteValue(HKCU, key, IntToStr(k)+'Startup');<BR> end;<BR> // 去除重复文件与不存在的文件<BR> for k := StringList.Count - 1 downto 0 do<BR> if (UpperCase(StringList)=UpperCase(startupToAdd)) or (not FileExists(StringList)) //UPPERCASE (s string)返回s中相同文字的字符串但所有字母都转换成大写字母<BR> then StringList.Delete(k);<BR> // 添加要加的文件<BR> StringList.Add(startupToAdd);<BR> // 重建键值<BR> for k := 0 to StringList.Count - 1 do<BR> RegWriteStringValue(HKCU, key, IntToStr(k+1)+'Startup', StringList);<BR> // 设置总数<BR> RegWriteStringValue(HKCU, key, 'NumStartup', IntToStr(StringList.Count));<BR> end;<BR> finally<BR> StringList.Free;<BR> end;<BR> END.
sandy2002
发表于 2005-7-7 16:03:00
请教版主:如果我要将不同的文件安装复制到不同的目录下,该怎么办
秋枫
发表于 2005-7-9 17:33:00
将不同的文件安装复制到不同的目录下,只能你自己写安装程序了。我这个不是万能的。
页:
1
2
3
4
5
[6]
7
8
9
10
11
12
13
14
15