您的位置:首页 > 其它

[翻译]Kean' Blog 在一个.NET应用程序中调用AutoCAD(续)

2008-01-05 10:48 736 查看
这篇文章应该算是上篇文章的续,跟上个一样,不过是利用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 ");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐