AutoCAD2013 以上利用AccoreConsole+ c# NetApi Windows Froms 封装
1# 封装类
public static class CmdHelper
{
/// <summary>
/// 调用AutoCAD 安装目录下的AccoreConsole.exe来实现批量处理图纸(Net Api dll)
/// </summary>
/// <param name="cmsStr">NetApi中注册的命令(commandmethod中写的命令)</param>
/// <param name="dllPath">AutoCAD Net Api的程序集的全路径</param>
/// <param name="dwgfn">dwg文件的全路径</param>
/// <param name="AccoreconsolePath">AutoCAD 安装目录下的AccoreConsole.exe的全路径</param>
public static void ExecuteCmd(string cmsStr,string dllPath,string dwgfn)
{
var acadInstallPath = string.Empty;
for (int i = ; i < DateTime.Now.Year + ; i++)
{
if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD " + i + "\\Accoreconsole.exe"))
{
acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";
break;
}
}
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo()
{
FileName = "cmd.exe",
UseShellExecute=false,
CreateNoWindow=true,
RedirectStandardInput=true,
RedirectStandardOutput=true
};
Process pro = new Process() { StartInfo = psi };
pro.Start();
pro.StandardInput.WriteLine("\"" + acadInstallPath + "Accoreconsole.exe" + "\" /i " + "\"" + dwgfn + "\"");
pro.StandardInput.WriteLine("secureload");
pro.StandardInput.WriteLine("");
pro.StandardInput.WriteLine("netload");
pro.StandardInput.WriteLine("\""+ dllPath + "\"");
pro.StandardInput.WriteLine("filedia");
pro.StandardInput.WriteLine("");
pro.StandardInput.WriteLine(cmsStr);
pro.StandardInput.WriteLine("qsave");
pro.StandardInput.WriteLine("quit");
pro.StandardInput.WriteLine("exit");
}
/// <summary>
/// 调用AutoCAD 安装目录下的AccoreConsole.exe来实现批量处理图纸(scr 文件)
/// </summary>
/// <param name="scrFileName">scr 文件的全路径</param>
/// <param name="dwgfn">dwg文件的全路径</param>
/// <param name="AccoreconsolePath">AutoCAD 安装目录下的AccoreConsole.exe的全路径</param>
public static void ExecuteCmd(string scrFileName, string dwgfn)
{
var acadInstallPath = string.Empty;
for (int i = ; i < DateTime.Now.Year + ; i++)
{
if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD " + i + "\\Accoreconsole.exe"))
{
acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";
break;
}
}
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo()
{
FileName = acadInstallPath+"Accoreconsole.exe",
Arguments = " /i " + "\"" + dwgfn + "\" /s "+"\"" + scrFileName + "\"",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardInput = true,
RedirectStandardOutput = true
};
Process pro = new Process() { StartInfo = psi };
pro.Start();
pro.StandardInput.WriteLine("filedia");
pro.StandardInput.WriteLine("");
pro.StandardInput.WriteLine("exit");
} public static List<String> GetOutNetApiCmd(string dllPath)
{
List<String> strCmd = new List<string>();
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Assembly ass = Assembly.LoadFrom(dllPath);
foreach (var t in ass.GetTypes())
{
if (t.IsClass && t.IsPublic)
{
foreach (MethodInfo m in t.GetMethods())
{
if (m.IsPublic && m.GetCustomAttributes(true)!=null)
{
Attribute att = null;
foreach (var item in m.GetCustomAttributes(true))
{
if (item.GetType().Name == "CommandMethodAttribute") att = item as Attribute;
}
if (att!=null) strCmd.Add(m.CustomAttributes.ToList()[].ConstructorArguments[].Value.ToString());
}
}
}
}
return strCmd;
} private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
AssemblyName assName = new AssemblyName(args.Name);
var acadInstallPath = string.Empty;
for (int i = ; i < DateTime.Now.Year+; i++)
{
if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD "+i+"\\Accoreconsole.exe"))
{
acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";
break;
}
}
return Assembly.LoadFile(acadInstallPath + args.Name+".dll");
}
}
2# 准备autocad的sdk放入文件夹,这个sdk的dll不要高于你的netapi的dll的版本,最好一致

3# 在program.cs中做如下调整
提前加入netapi的dll的依赖项,此处为了到处netapi的自定义命令的名称“GetOutNetApiCmd”方法可以成功执行,否则无法执行
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var acadInstallPath = string.Empty;
for (int i = ; i < DateTime.Now.Year + ; i++)
{
if (File.Exists(@"C:\Program Files\Autodesk\AutoCAD " + i + "\\Accoreconsole.exe"))
{
acadInstallPath = @"C:\Program Files\Autodesk\AutoCAD " + i + "\\";
break;
}
}
if (acadInstallPath != string.Empty)
{
var location = Application.StartupPath;
Assembly.LoadFrom(location + "\\NetApiDll\\AcDbMgd.dll");
Assembly.LoadFrom(location + "\\NetApiDll\\AcCoreMgd.dll");
Application.Run(new Form1());
}
else MessageBox.Show("本机没有安装AutoCAD2013-"+DateTime.Now.Year + +"中的任意一个版本, 无法启动本程序!");
}
4# 绘制用户界面

5# 写完程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace MyAccoreConsole
{
public partial class Form1 : Form
{
public List<string> ListDwgFileNames { get; set; }
public string SelectedDllName { get; set; }
public string SelectedScrName { get; set; }
public string SelectedCmdName { get; set; }
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
this.ListDwgFileNames = new List<string>();
OpenFileDialog ofd = new OpenFileDialog() {
Filter="AutoCAD DwgFile *.dwg|*.dwg",
Multiselect=true,
ReadOnlyChecked=true
};
if (ofd.ShowDialog()== DialogResult.OK) this.ListDwgFileNames.AddRange(ofd.FileNames);
foreach (var item in this.ListDwgFileNames) this.listBox1.Items.Add(item);
} private void button3_Click(object sender, EventArgs e)
{
this.label2.Text = string.Empty;
OpenFileDialog ofd = new OpenFileDialog()
{
Filter = "AutoCAD NetApi Dll *.dll|*.dll",
Multiselect = false
};
if (ofd.ShowDialog() == DialogResult.OK) this.SelectedDllName = ofd.FileName;
this.label2.Text = this.SelectedDllName;
} private void button2_Click(object sender, EventArgs e)
{
this.label1.Text = string.Empty;
OpenFileDialog ofd = new OpenFileDialog()
{
Filter = "AutoCAD Scr File *.scr|*.scr",
Multiselect = false
};
if (ofd.ShowDialog() == DialogResult.OK) this.SelectedScrName = ofd.FileName;
this.label1.Text = this.SelectedScrName;
}
private void comboBox1_DropDown(object sender, EventArgs e)
{
this.comboBox1.Items.Clear();
var cms = CmdHelper.GetOutNetApiCmd(this.SelectedDllName);
if (cms.Count>) this.comboBox1.Items.AddRange(cms.ToArray());
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
this.SelectedCmdName = this.comboBox1.Text;
}
private void button5_Click(object sender, EventArgs e)
{
foreach (var item in this.ListDwgFileNames)
{
CmdHelper.ExecuteCmd(this.SelectedCmdName, this.SelectedDllName,item);
}
MessageBox.Show("Net Api 执行完成!!!!");
} private void button4_Click(object sender, EventArgs e)
{
foreach (var item in this.ListDwgFileNames)
{
CmdHelper.ExecuteCmd(this.SelectedScrName,item);
}
MessageBox.Show("SCR 批处理文件执行完成!!!!");
}
}
}
AutoCAD2013 以上利用AccoreConsole+ c# NetApi Windows Froms 封装的更多相关文章
- AutoCAD2013 以上利用AccoreConsole+ c# NetApi 批量处理图纸
AccoreConsole听起来有点拗口,其中文名可以叫做AutoCAD控制台或者无头AutoCAD.一句话概括,它是快速启动AutoCAD运行微环境,高效的处理图纸.你可以如同DOS命令行一样操作命 ...
- AUTOCAD2013 以上利用ACCORECONSOLE+ SCR后台批量清理图纸
无意中浏览到南胜大神的博客,https://www.cnblogs.com/NanShengBlogs/p/10957489.html 受此启发,特意改装此方法用于批量清理图纸,效果极佳. 详细介绍详 ...
- 利用SSH协议在Windows下使用PuTTY连接Ubuntu
利用SSH协议在Windows下使用PuTTY连接Ubuntu Ubuntu部分 首先我们要为Ubuntu配置一下环境,让它支持ssh服务,我们要做的其实也很简单,就一下两步: 安装OpenSSH软件 ...
- frp服务利用云主机实现Windows远程连接
frp服务利用云主机实现Windows远程连接 1.下载所需要的安装包 https://github.com/fatedier/frp/releases 下载 frp_0.44.0_linux_amd ...
- Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘
Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...
- Windows 7 封装与定制不完全教程
Windows 7 封装与定制不完全教程 从定制Win7母盘到封装详细教程 手把手教你定制WIN7小母盘 Windows 7 封装与定制不完全教程 [教程] Windows 7 封装与定制不完全教程( ...
- Windows系统封装教程
Windows系统封装教程
- 如何定位Release 版本中程序崩溃的位置 ---利用map文件 拦截windows崩溃函数
1 案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名 ...
- 利用cwRsync客户端将Windows下文件同步到Linux
这里不描述Linux服务端安装配置rsync服务的过程,有需要可以在网络上查找相关教程. 1.安装cwRsync客户端下载地址:http://itefix.no/cwrsync/下载文件cwRsync ...
随机推荐
- nginx 部署前端项目(vue)
前提:安装好nginx 打开nginx目录,一般是(/usr/local/nginx) npm run build 打好vue包 一般放到(/usr/local/nginx/html/)目录下 配置: ...
- Echarts4+EchartsGL 3D迁徙图(附源码)
最近遇到些Echarts迁徙图问题,在实现二维地图的迁徙图后开始开发3D迁徙图,在网上一查,发现3D版本迁徙图资料较少,自己研究并借鉴一些资料后写了一个小demo,希望能帮大家少走些弯路,共同学习. ...
- Qt控制台输出QString
有时候想在控制台输出我们想要的QString变量. 1.qDebug可以实现在控制台终端打印,但我们还是想使用C++中的std::cout<<variable This function ...
- HearthBuddy版本收集
Hearthbuddy-20190811-010-0b563c92.exe 20190810-003 SHA-256: b2a03c10124b038d2c48279cc50947907a55c8 ...
- Linux CentOS 7修改内核启动默认顺序
1.查看系统有几个内核 a.进入grub2.cfg文件中进行查看 b.通过grub界面查看 3.设置默认启动内核 grub2-set-default "内核版本" 配置默认内核4. ...
- Thinkphp5 的sesssion在同一个控制器不同的方法无法获取session的原因和对策
这一段在用thinkPHP5开发微信小程序接口的时候,在同一个控制器一个方法中存入session,在另一个方法中取出session,一直都是无法取出. 查阅各种资料得到原因:thinkPHP5里面的s ...
- Django Model模型
Model简介 模型准确且唯一的描述了数据.它包含您储存的数据的重要字段和行为.一般来说,每一个模型都映射一张数据库表. 每个模型都是一个 Python 的类,这些类继承 django.db.mode ...
- charles重发网络请求&模拟慢速网络&过滤网络请求
重发网络请求&模拟慢速网络&过滤网络请求 重发网络请求:后端调试的过程中,一直在客户端进行点点点比较麻烦,此时直接发送请求比较方便查看调试后的结果 模拟慢速网络:用户的网络不能一直是快 ...
- python基础知识(函数)
创建函数 def 函数名(可以选参数): 可选参数 ''' ''' 用三引号括起来的注释 说明功能和参数信息 可选参数指定函数体 执行函数程序代码 创建一个空函数 def empty(): p ...
- Crunch黑客神器-创造个性字典
先来看第一个命令: crunch 6 7 123456 -o pass.txt 是什么意思呢?我们打开终端,输入这个命令之后,crunch代表使用crunch这个工具,6代表生成的密码最小是6位数,7 ...