这篇文章应该算是上篇文章的续,跟上个一样,不过是利用System.Diagnostics命名空间的类,实现启动CAD时候+上参数。
直接贴代码了,,呵呵~
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Interop;
const string progID = "AutoCAD.Application.17.1";
//在字符串前使用@字符,' /'不转义
const string exePath = @"c:/Program Files/Autodesk/AutoCAD 2008/acad.exe";
AcadApplication acApp = null;
// 首先确定没有AutoCAD进程在执行
try
{
acApp = (AcadApplication)Marshal.GetActiveObject(progID);
}
catch {}
if (acApp != null)
{
MessageBox.Show("An instance of AutoCAD is already running.");
}
else
{
try
{
// 使用System.Diagnostics命名空间的类,实现AutoCAD的带参数启动
ProcessStartInfo psi = new ProcessStartInfo(exePath, "/p myprofile");
psi.WorkingDirectory = @"c:/temp";
Process pr = Process.Start(psi);
// 等待AutoCAD准备好,貌似不用等CAD启动完成
pr.WaitForInputIdle();
// 使用COM方法连接到进程
// 无限循环直道捕捉到AutoCAD进程
// 如果不检查超时,或者让用户结束操作,就会有点危险
while (acApp == null)
{
try
{
acApp =
(AcadApplication)Marshal.GetActiveObject(progID);
}
catch
{
// 让应用程序检查自身的消息队列,以防用于取消操作或者退出
Application.DoEvents();
}
}
}
catch (Exception ex)
{
MessageBox.Show(
"Cannot create or attach to AutoCAD object: "
+ ex.Message
);
}
}
if (acApp != null)
{
acApp.Visible = true;
acApp.ActiveDocument.SendCommand("_MYCOMMAND ");
}
直接贴代码了,,呵呵~
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Interop;
const string progID = "AutoCAD.Application.17.1";
//在字符串前使用@字符,' /'不转义
const string exePath = @"c:/Program Files/Autodesk/AutoCAD 2008/acad.exe";
AcadApplication acApp = null;
// 首先确定没有AutoCAD进程在执行
try
{
acApp = (AcadApplication)Marshal.GetActiveObject(progID);
}
catch {}
if (acApp != null)
{
MessageBox.Show("An instance of AutoCAD is already running.");
}
else
{
try
{
// 使用System.Diagnostics命名空间的类,实现AutoCAD的带参数启动
ProcessStartInfo psi = new ProcessStartInfo(exePath, "/p myprofile");
psi.WorkingDirectory = @"c:/temp";
Process pr = Process.Start(psi);
// 等待AutoCAD准备好,貌似不用等CAD启动完成
pr.WaitForInputIdle();
// 使用COM方法连接到进程
// 无限循环直道捕捉到AutoCAD进程
// 如果不检查超时,或者让用户结束操作,就会有点危险
while (acApp == null)
{
try
{
acApp =
(AcadApplication)Marshal.GetActiveObject(progID);
}
catch
{
// 让应用程序检查自身的消息队列,以防用于取消操作或者退出
Application.DoEvents();
}
}
}
catch (Exception ex)
{
MessageBox.Show(
"Cannot create or attach to AutoCAD object: "
+ ex.Message
);
}
}
if (acApp != null)
{
acApp.Visible = true;
acApp.ActiveDocument.SendCommand("_MYCOMMAND ");
}