今天一个童鞋问到如何在AutoCAD插件中获取AutoCAD 启动时的参数。用户故事是这样的,AutoCAD启动之前先由自己写的一个winform程序进行用户验证,如果验证通过则通过Process.Start启动AutoCAD,并给他传递一个token作为参数。这个token当然最好的加密的。然后在自己的插件中获取这个Token,如果能获取token,那么这个用户是合法用户,下面的功能可以正常执行;如果没有取到token,那这个用户还没经过用户验证就直接使用插件功能了,多半是非法用户或者盗版的, 那对不起,你就先别用我的插件了。 思路很好,关键是获取AutoCAD在启动时的参数。
这个可以通过Environment.GetCommandLineArgs()实现,下面是一段测试代码:
[CommandMethod("Args")]
public void GetAcadArguments()
{
Document dwg = Application.DocumentManager.MdiActiveDocument;
Editor ed = dwg.Editor;
int i = 0;
foreach (string arg in Environment.GetCommandLineArgs())
{
ed.WriteMessage("\n Arg{0}=\"{1}\"", i++, arg);
}
}
在启动调试时添加几个参数来做测试,比如我加了 /myArg1 和 nologo:
看一下输出结果:
这个答案来自AutoCAD论坛,大家遇到什么问题,先在论坛上看一下,说不定已经有其他人问过了。没有的话在论坛上发个贴,n多牛人帮忙:)
http://forums.autodesk.com/t5/NET/Getting-command-line-parameters/td-p/3534742
再继续讨论一下,上面提到启动AutoCAD的方法是通过Process.Start来启动进程的方式,如果要通过COM调用的方式启动AutoCAD呢,这种方法就不行了,不过这就演变为进程间通信问题了。这个有很多办法,大家可以自己搜一下。大家还可以参考Kean的博客,介绍了一种办法,并有代码示例:
另外,上面提到那个插件的用户验证问题,还可以看一下这个博客,利用Windows Azure云平台进行用户验证,比在本地弄token更可靠些。