AutoCAD.net 插件中获取AutoCAD 启动命令行的参数

今天一个童鞋问到如何在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:

image

 

看一下输出结果:

image

这个答案来自AutoCAD论坛,大家遇到什么问题,先在论坛上看一下,说不定已经有其他人问过了。没有的话在论坛上发个贴,n多牛人帮忙:)

http://forums.autodesk.com/t5/NET/Getting-command-line-parameters/td-p/3534742

 

再继续讨论一下,上面提到启动AutoCAD的方法是通过Process.Start来启动进程的方式,如果要通过COM调用的方式启动AutoCAD呢,这种方法就不行了,不过这就演变为进程间通信问题了。这个有很多办法,大家可以自己搜一下。大家还可以参考Kean的博客,介绍了一种办法,并有代码示例:

http://through-the-interface.typepad.com/through_the_interface/2009/05/interfacing-an-external-com-application-with-a-net-module-in-process-to-autocad-redux.html

 

 

另外,上面提到那个插件的用户验证问题,还可以看一下这个博客,利用Windows Azure云平台进行用户验证,比在本地弄token更可靠些。

http://adndevblog.typepad.com/autocad/2012/10/trial-licensing-and-usage-metrics-gathering-for-autocad-plugin-using-azure-cloud.html


Related Posts Plugin for WordPress, Blogger...