乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 123|回复: 10

在启动套件中插入程序文件。

[复制链接]

29

主题

94

帖子

14

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
198
发表于 2015-10-19 21:12:43 | 显示全部楼层 |阅读模式
通过代码将程序文件插入启动套件内容列表


rsrrarsozcq.png

rsrrarsozcq.png

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

29

主题

94

帖子

14

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
198
发表于 2015-10-20 07:42:43 | 显示全部楼层

我认为你不能这样做。
因此,自动加载程序,注册表项等的原因。
但是,您可以通过编程方式自动执行对话框,并以这种方式将文件添加到启动菜单。 然而,问题是为什么? 还有其他方法可以自动加载lisp,.net,arx文件,这样会更好。
**编辑,因为它是一个错误的答案**
回复

使用道具 举报

9

主题

30

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-10-20 08:47:22 | 显示全部楼层

我想可能是Windows注册表。
我需要的是运行VLX来加载菜单。
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2015-10-20 08:49:51 | 显示全部楼层
你应该试试这个链接。
http://www.lee-mac.com/autoloading.html
回复

使用道具 举报

9

主题

30

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-11-4 09:38:08 | 显示全部楼层
试试这个。
  1. (Setq reg      (strcat "HKEY_CURRENT_USER\"  (vlax-product-key) "\\Profiles\" (getvar "cprofile"))
  2.        regstar  (strcat reg  "\\Dialogs\\Appload\\Startup\"))
  3.   (if (not (vl-registry-descendents regstar ""))
  4.     (Setq regstar  (strcat reg "\\UserInterfaceSettings\\Appload\\History")
  5.           local    "History")
  6.     (setq local "Startup"))
  7.   
  8.   (setq start    (mapcar '(lambda (x)
  9.                             (setq x (strcase (vl-registry-read regstar x) t))
  10.                             (list (strcat (vl-filename-base x) (vl-filename-extension x))
  11.                                   (vl-filename-directory x)))
  12.                          (vl-remove "NumHistory" (vl-remove "NumStartup" (vl-registry-descendents regstar "")))))
  13. (setq tbdir "c:\\teste"
  14.       vlx "teste.vlx")
  15. (if (not (assoc vlx start)) ;se não está na startup suite, carrega
  16.           (progn
  17.             (vl-registry-write regstar (strcat (itoa (length start)) local) (strcat tbdir "\" vlx ))
  18.             (vl-registry-write regstar (strcat "Num" local) (itoa (length start)))))

注意,加载此代码后必须重新启动Autocad,才能做到效果
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2015-11-4 15:12:29 | 显示全部楼层

有人能把胡言乱语翻译成C#吗?
回复

使用道具 举报

29

主题

94

帖子

14

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
198
发表于 2015-11-4 15:44:29 | 显示全部楼层

有人能把胡言乱语翻译成C#吗?

(乱码)
(乱码)
写入注册表
回复

使用道具 举报

29

主题

94

帖子

14

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
198
发表于 2015-11-5 07:16:23 | 显示全部楼层
您需要在此注册表项中写入:
HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\R20.1\ACAD-F000:409\Profiles\
>\Dialogs\Appload\Startup
for 2013 或更高版本,use:
HostApplicationServices.Current.UserRegistryProductRootKey
for 2012 或波纹管,use:
Runtime.SystemObjects.DynamicLinker.ProductKey
要检索此字符串(取决于 autocad 版本):
“HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\R20.1\ACAD-F000:409\

>“是当前的 autocad 配置文件
Use:
Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable(”cprofile“)
您需要 add:
1Startup = ”c:\teste.vlx“
NumStartup = 1
如果您添加多个项目:
1Startup = ”c:\teste1.vlx“
2Startup = ”c:\teste2.vlx“
3Startup = ”c:\teste3.vlx“
4Startup = ”c:\teste4.vlx“
...
NStartup = “c:\testeN.vlx”
NumStartup = N
其中 N 是项
回复

使用道具 举报

9

主题

30

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2015-11-5 10:51:06 | 显示全部楼层
尼顿,谢谢你的翻译。 由于这是在.NET论坛上发布的,我想确保有一个.NET答案。如果您不需要验证启动文件夹中是否已经存在文件名,那么:private static void AddStartupApplication(字符串文件名)。
{。
var config = Application.UserConfigurationManager.OpenCurrentProfile();。
如果 (!配置,包含子部分(“对话框\\应用加载\\启动”))。
返回;。

var startup = config.OpenSubsection(“Dialogs\\Appload\\Startup”);。
如果 (!启动,Contains(“NumStartup”))。
返回;。

var number = (int)startup.ReadProperty(“NumStartup”, 0) + 1;。
启动,WriteProperty(“NumStartup”, number);。
启动,WriteProperty($“{number}Startup”, filename);。
}如果需要验证启动文件夹中的文件是否存在:private static void AddStartupApplication(字符串文件名)。
{。
var autocad = Registry.CurrentUser.OpenSubKey(“Software\\Autodesk\\AutoCAD\\”);。
var curVersion = autocad?.GetValue(“CurVer”);。
if (curVersion == null)。
返回;。

var release = autocad.OpenSubKey(curVersion.ToString());。
curVersion = release?.GetValue(“CurVer”);。
if (curVersion == null)。
返回;。

var 版本 = 发布,OpenSubKey(curVersion.ToString());。
var 配置文件 = 版本?,OpenSubKey(“Profiles”);。
if (profiles == null)。
返回;。

var profileName = profiles.GetValue(“”);。
var profile = profiles,OpenSubKey(profileName.ToString());。
var startup = profile?.OpenSubKey(“Dialogs\\Appload\\Startup”);。
如果(启动 == 空)。
返回;。

var exists = startup.GetValueNames()。
,Where(n => n != “NumStartup”)。
,选择(n =>(字符串)启动,GetValue(n))。
,Any(v => v == 文件名);。
如果(存在)。
返回;。

var number = (int) startup.GetValue(“NumStartup”) + 1;。
启动,SetValue(“NumStartup”, number);。
启动,SetValue($“{number}Startup”, filename);。
}RegistryKey 类是一次性的,因此您可以/可能应该将所有键包装在 using 语句中。
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2015-11-6 22:45:45 | 显示全部楼层
非常好!我们快到了。但理想的不是一个DLL,对于用户来说除了要加载程序来配置AutoCAD还得重新启动。理想的是一个可执行的EXE程序,它可以配置AutoCAD,而不必运行和重启。一个安装程序/ qu.e configurator也搜索所有已安装的AutoCADs
我放下一个程序,我正在VB.NET开发,但由于我没有这种语言的技能,修改注册表。
我请求您指导我完成并改进它。
  1. Imports Microsoft.Win32
  2. Partial Public Class ConfiguraCADForm
  3.     Public Sub New()
  4.         Me.InitializeComponent()
  5.     End Sub
  6.     Sub MainFormLoad(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  7.         Dim VERKEY As String = ""
  8.         Dim CURVER As String = ""
  9.         Dim PROFILE As String = ""
  10.         '
  11.         Dim K_ACADUSER As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\\Autodesk\\AutoCAD")
  12.         Dim VERKEYS As String() = K_ACADUSER.GetSubKeyNames()
  13.         For Each VERKEY In VERKEYS
  14.             MsgBox(VERKEY)
  15.             Dim K_VERKEY As RegistryKey = K_ACADUSER.OpenSubKey(VERKEY)
  16.             Dim CURVERS As String() = K_VERKEY.GetSubKeyNames()
  17.             For Each CURVER In CURVERS
  18.                 MsgBox(VERKEY + "" + CURVER)
  19.                 Dim K_PROFILES As RegistryKey = K_ACADUSER.OpenSubKey(VERKEY + "" + CURVER + "" + "Profiles")
  20.                 Dim PROFILES As String() = K_PROFILES.GetSubKeyNames()
  21.                 For Each PROFILE In PROFILES
  22.                     MsgBox(VERKEY + "" + CURVER + "" + PROFILE)
  23.                     Dim K_PROFILE As RegistryKey = K_PROFILES.OpenSubKey(PROFILE)
  24.                     Dim K_STARTUP As RegistryKey = K_PROFILE.OpenSubKey("Dialogs\Appload\Startup", RegistryKeyPermissionCheck.ReadWriteSubTree)
  25.                     Dim NUMBER As String = K_STARTUP.GetValue("NumStartup").ToString
  26.                     MsgBox(NUMBER)
  27.                     '...
  28.                     '...ADD "C:\TEST.VLX" IF NOT EXIST
  29.                     '...
  30.                     K_STARTUP.Close()
  31.                     K_PROFILE.Close()
  32.                 Next PROFILE
  33.                 K_PROFILES.Close()
  34.             Next CURVER
  35.             K_VERKEY.Close()
  36.         Next VERKEY
  37.         K_ACADUSER.Close()
  38.         Me.Close()
  39.     End Sub
  40. End Class

回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 22:06 , Processed in 0.173898 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表