xiwuchen@qq 发表于 2014-12-23 09:30:02

写“启动组”注册表成功,但CAD第一次启动不运行“启动组”内程序,求高手

我用C#写了注册表,添加了启动组注册表,但是运行CAD,并没有运行启动组里的lsp文件,这时,手动点一下“工具-加载应用程序-启动组“,(不需要更改任何设置),关闭窗口,关闭CAD,再重新开CAD,这个启动组就能自动加载了,这是为什么??如何解决

liuxu042 发表于 2014-12-23 15:56:22

说明你注册表操作失败或者错误

xiwuchen@qq 发表于 2014-12-23 16:14:51

打开注册表看了,注册表也是正确的

xgr 发表于 2014-12-23 19:30:07

第一次启动后是否可以子在CAD启动组里看到启动文件。
如果看不到,说明写注册表启动文件有问题。

以下是INNO SETUP写注册表启动组,供参考

//将启动文件加入到注册表
      RegWriteStringValue(HKEY_CURRENT_USER,'Software\Autodesk\AutoCAD\R18.2\ACAD-A001:804\Profiles\自定义配置\Dialogs\Appload\Startup','1Startup', '(全路径启动文件.LSP)');
      RegWriteStringValue(HKEY_CURRENT_USER,'Software\Autodesk\AutoCAD\R18.2\ACAD-A001:804\Profiles\自定义配置\Dialogs\Appload\Startup','NumStartup', '1');

      //这项必须,否则在启动组看不到加载的启动程序
      RegWriteDWordValue(HKEY_LOCAL_MACHINE,'Software\Autodesk\AutoCAD\R18.2\ACAD-A001:804\Applications\AcadAppload', 'LOADCTRLS', 15);
      RegWriteDWordValue(HKEY_CURRENT_USER, 'Software\Autodesk\AutoCAD\R18.2\ACAD-A001:804\Applications\AcadAppload', 'LOADCTRLS', 15);

xiwuchen@qq 发表于 2014-12-23 22:13:53

   //这项必须,否则在启动组看不到加载的启动程序
         RegWriteDWordValue(HKEY_LOCAL_MACHINE,'Software\Autodesk\AutoCAD\R18.2\ACAD-A001:804\Applications\AcadAppload', 'LOADCTRLS', 15);
      RegWriteDWordValue(HKEY_CURRENT_USER, 'Software\Autodesk\AutoCAD\R18.2\ACAD-A001:804\Applications\AcadAppload', 'LOADCTRLS', 15);          这个在我写的时候没有加进去,这个15是什么意思?

xiwuchen@qq 发表于 2014-12-24 10:27:02

xgr 发表于 2014-12-23 19:30 static/image/common/back.gif
第一次启动后是否可以子在CAD启动组里看到启动文件。
如果看不到,说明写注册表启动文件有问题。



问题解决了,加上上面两个注册表设置就行了。谢谢 xgr
我从另一个帖子上找到相关内容,也放在这里,供大家参考

0x01:Load the application upon detection of proxy object.
   当代理对像被控知时另载相应ARX程序.
0x02:Load the application upon AutoCAD startup.
   当AutoCAD启动时加载相应ARX程序.
0x04:Load the application upon invocation of a command.
   当输入命令时加载相应ARX程序.
0x08:Load the application upon request by the user or another application.
   当有用户或别的程序请求时加载相应ARX程序.
0x10:Do not load the application.
   从不加载该应用程序.
0x20:Load the application transparently.
   显式加载该应该程序.(不知该项译法是否有误)


这无疑对解决我的问题提供了一把最有效的钥匙。

也许你会问:注册表中的LOADCTRLS并不总是(其实可以说是很少)等于上面的几个值,这又作何解释呢?
其实懂编程的都知道是怎么回事,不懂的我就试着替你解释解释:

如果一个ARX只有上面列出的一种加载方式,那它的LOADCTRLS肯定会等于上面的其中一个值,
如果加载方式不止一种,那就把各种加载方式对应的值相加,如既可以当从命令行输入时加载,
又可以从另一个应用程序中加载,那它的LOADCTRLS值就是0x04+0x08=0x0c(十进制的12),这样应该明白了吧?

看一个ARX被设置成哪几种启动方式,就看ARX的LOADCTRLS值是上面哪几个值相加得来的,上面所列的值一个只能用一次。

但是无论如何,一个ARX的LOADCTRLS值不会等于0x11(17d)、0x12((18d))、0x13(19d)、0x14(20d)、0x17(23d)、0x18(24d)。

因为0x10是从不加载,瞧,多可爱呀!只要它的LOADCTRLS值等于0x10(十进制的16),这个ARX就永远不会被加载了。

摘自网友xshrimp的发言

jyzas 发表于 2015-4-2 14:32:03

xiwuchen@qq 发表于 2014-12-24 10:27 static/image/common/back.gif
问题解决了,加上上面两个注册表设置就行了。谢谢 xgr
我从另一个帖子上找到相关内容,也放在这里,供大 ...

朋友,写入注册表前要不要关闭CAD,打开CAD状态写入失败,关闭状态就可以。

sieben 发表于 2015-4-2 15:40:31

注册表和CAD状态没有关系,不过写入注册表后应该在下一次CAD启动才生效

ivde 发表于 2015-4-3 08:03:01

sieben 发表于 2015-4-2 15:40
注册表和CAD状态没有关系,不过写入注册表后应该在下一次CAD启动才生效

写入 加载 启用 是三个不同过程,自动加载不一定是立即启用
页: [1]
查看完整版本: 写“启动组”注册表成功,但CAD第一次启动不运行“启动组”内程序,求高手