加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

注册表设置AutoCAD2010启动加载菜单

(2017-06-15 09:23:02)
标签:

vs2008开发cad2008

vs2010开发cad2010

杂谈

分类: 软件工具
VS2010注册表设置AutoCAD2010自动加载自定义菜单
 早期在Win XP 下使用VS2008 C#开发的AutoCAD2008项目,在注册表中设置CAD 启动时自动加载自定义菜单,一直正常使用;
而系统升级到Win7 64位系统,项目也用VS2010升级CAD2010,生成后注册表项目无法启动加载菜单等。为此需要更改如下的若干的地方 :

一 更改框架版本,目标平台

依次 右击 其中的工程文件夹 比如:AutoStart --属性 ,统一改为  .NET Framework 3.5,
实际上还是在 2.0方式下运行, 只不过不这样选择,有时候编译提示找不到引用的动态库


1 在"应用程序"中, "目标框架" 选择为 .NET Framework 3.5

注册表设置AutoCAD2010启动加载菜单


2 在"生成"中, "目标平台" 选择为 x64

注册表设置AutoCAD2010启动加载菜单

3 下面的只是调试使用,可以不增加
在"调试"中, "启动外部程序" 选择为 C:\Program Files\Autodesk\ACADM 2010\acad.exe

注册表设置AutoCAD2010启动加载菜单


二 更改 相应的引用, 从mcad2008 -- mcad2010

 1 删除旧版本AutoCAD2008的四个引用acdbmgd,acmgd,AutoCAD,AXDBLib对应为:

C:\Program Files (x86)\Autodesk\MDT 2008\acdbmgd.dll
C:\Program Files (x86)\Autodesk\MDT 2008\acmgd.dll
C:\Windows\assembly\GAC_MSIL\Autodesk.AutoCAD.Interop\17.1.51.0__eed84259d7cbf30b
\Autodesk.AutoCAD.Interop.dll

C:\Windows\assembly\GAC_MSIL\Autodesk.AutoCAD.Interop.Common\17.1.51.0__eed84259d7cbf30b
\Autodesk.AutoCAD.Interop.Common.dll

2 重新添加引用新版本AutoCAD2010四个引用acdbmgd, acmgd, Autodesk.AutoCAD.Interop, Autodesk.AutoCAD.Interop.Common对应为:
C:\Program Files\Autodesk\ACADM 2010\acdbmgd.dll
C:\Program Files\Autodesk\ACADM 2010\acmgd.dll
C:\Windows\assembly\GAC_MSIL\Autodesk.AutoCAD.Interop\18.0.0.0__eed84259d7cbf30b
\Autodesk.AutoCAD.Interop.dll

C:\Windows\assembly\GAC_MSIL\Autodesk.AutoCAD.Interop.Common\18.0.0.0__eed84259d7cbf30b
\Autodesk.AutoCAD.Interop.Common.dll

注册表设置AutoCAD2010启动加载菜单

注册表设置AutoCAD2010启动加载菜单


2 以下还保持2.0:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll

3 如果还有其它引用,仿照改变即可


三  更改 安装 部署项目   目标版本
如果程序中,使用了 部署项目,则还需要 更改其 目标版本。

从解决方案中,选择 部署项目 MY_CAD,
右击--属性, 将TargetPlatform,改为x64 即可
否则会出现 :
错误 2 面向“AMD64”的文件“AutoStart.dll”与项目的目标平台“x86”不兼容
D:\CAD2010\CAD.vdproj  
注册表设置AutoCAD2010启动加载菜单


四 解决方案中的 安装 部署项目  涉及到注册表 项目

1 安装程序 注册表的使用
 1) 在 开发环境下, 点击 选择解决方案中的  部署项目 TWXY-CAD, 
 2) 然后在 解决方案上部 的工具条 就会多出若干 按钮 
 3) 点击其中的 散点状的 注册表 按钮, 
 4) 左侧会出现 注册表编辑窗口 从中增加需要的项目

2 增加如下的东西:
(1) cad2008:
HKLM\Software\Autodesk\AutoCAD\R17.1\ACAD-6013:804\Applications\TWXY

(2) cad2010:
HKLM\Software\Autodesk\AutoCAD\R18.0\ACAD-8005:804\Applications\TWXY

TWXY设置的都是:

DESCRIPTION     REG_SZ       "TWXY"
LOADCTRLS       REG_DWORD    14  
LOADER          REG_SZ       "[ProgramFilesFolder]TWXY\AutoStart.dll"
MANAGED         REG_DWORD    1

(3)  TWXY下还可以有 Commands
HKLM\Software\Autodesk\AutoCAD\R17.1\ACAD-6013:804\Applications\TWXY\Commands
  commands    属性值   BTLMXL   "BTLMXL"

HKLM\Software\Autodesk\AutoCAD\R18.0\ACAD-8005:804\Applications\TWXY\Commands
  commands    属性值   BTLMXL   "BTLMXL"

注册表设置AutoCAD2010启动加载菜单



3 在实际的注册表中,看到的是:

(1)cad2008:
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6013:804\Applications\TWXY

(2)cad2010:
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R18.0\ACAD-8005:804\Applications\TWXY

其值都是:
DESCRIPTION     REG_SZ       TWXY
LOADCTRLS       REG_DWORD    14  
LOADER          REG_SZ       C:\Program Files (x86)\TWXY\AutoStart.dll
MANAGED         REG_DWORD    1
注册表设置AutoCAD2010启动加载菜单



五 顺次编译生成以上各个项目
  右击--重新生成,
 先重新生成其它项目,最后生成 部署项目
 直到所有的都成功为止


六 生成后,到部署项目的文件夹
  转到Debug 文件夹下,找到 setup.exe,右击 -- 以管理员方式执行,来安装本项目
注册表设置AutoCAD2010启动加载菜单



七  启动AutoCAD  
  启动完成后将会看到,自己的菜单已经加载成功。

注册表设置AutoCAD2010启动加载菜单



八 c#AutoCAD 加载菜单的主要代码如下:



using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Data;
//CAD引用
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.GraphicsSystem;
using Autodesk.AutoCAD.LayerManager;
using Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.Publishing;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;
using System.Data.SqlClient;
//CAD引用
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
//提取BOM
using SymBBAuto;
using GEAuto;
using BRepAuto;
using McadAuto;
//读取配置文件
using System.IO;
using System.Reflection;
using System.Xml;
[assembly: CommandClass(typeof(TWXY.Class))]
namespace TWXY
{
    public class Class : Autodesk.AutoCAD.Runtime.IExtensionApplication
    {
        public Class()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        #region 程序初始化
        public void Initialize()
        {
            ed.WriteMessage("正在进行初始化!\n");
            try
            {
                LoadMenu();
                ed.WriteMessage("加载菜单成功!\n");
            }
            catch(System.Exception ex)
            {
                ed.WriteMessage("加载菜单失败!请联系开发人员\n"+ex.Message);
                return;
            }


        public void Terminate()
        {
            Console.WriteLine("清理!");
        }
        #endregion


        #region 菜单加载
        ///
        /// 加载自定义菜单
        ///
        public static  void LoadMenu()
        {
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            try
            {
                Autodesk.AutoCAD.Interop.AcadPopupMenu popMenu;
                Autodesk.AutoCAD.Interop.AcadApplication acadApp = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as AcadApplication;
                try
                {
                    bool exist = false;
                    if (acadApp.MenuGroups.Count > 0)
                    {
                        AcadMenuGroup menugroup = acadApp.MenuGroups.Item(0);
                        for (int i = 0; i < menugroup.Menus.Count; i++)
                        {
                            AcadPopupMenu popmenu = menugroup.Menus.Item(i);
                            if (popmenu.Name == "我的菜单")
                            {
                                exist = true;
                                break;
                            }
                        }
                        if (!exist)
                        {
                            popMenu = menugroup.Menus.Add("我的菜单");
                            Autodesk.AutoCAD.Interop.AcadPopupMenuItem popItem0 = popMenu.AddMenuItem(0, "用户登录", "_userlogin1 ");
                            Autodesk.AutoCAD.Interop.AcadPopupMenuItem popItem1 = popMenu.AddMenuItem(1, "图号注册", "_thzhuce1 ");
                            Autodesk.AutoCAD.Interop.AcadPopupMenuItem popItem2 = popMenu.AddMenuItem(2, "提取标题栏信息", "_btlmxl1 ");
                            Autodesk.AutoCAD.Interop.AcadPopupMenuItem popItem3 = popMenu.AddMenuItem(3, "提取标题栏并设置发放范围", "_btlmxlff1 ");
                            Autodesk.AutoCAD.Interop.AcadPopupMenuItem popItem4 = popMenu.AddMenuItem(4, "BOM表数据检测", "_bomyzh1 ");
                            Autodesk.AutoCAD.Interop.AcadPopupMenuItem popItem5 = popMenu.AddMenuItem(5, "BOM表数据检测并保存", "_bomtqu1 ");
                            Autodesk.AutoCAD.Interop.AcadPopupMenuItem popItem6 = popMenu.AddMenuItem(6, "显示/隐藏快捷面板", "_palette1 ");
                            popMenu.InsertInMenuBar(menugroup.Menus.Count - 1);
                        }
                    }
                    else
                    {
                        ed.WriteMessage("您的系统没有加载菜单组,请输入命令 ‘MENU’加载菜单组后重新启动CAD程序。");
                    }
                }
                catch (Autodesk.AutoCAD.Runtime.Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage(ex.Message);
            }
        }
        #endregion

    }
}








0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有