当前位置: 首页 > 编程语言 > C#

如何使用C#在Autocad中保持acad.exe运行并关闭文件?分享

时间:2023-04-10 21:02:02 C#

C#如何在Autocad中保持acad.exe运行以关闭文件?我使用的是visualstudio2010,我有一个要在autocad中打开的.DWG文件。我一直用到现在。Processp=newProcess();ProcessStartInfos=newProcessStartInfo("D:/测试文件/"+fileName);p.StartInfo=s;p.开始();但我想要的是关闭Autocad中的文件,而不是autocad本身。(表明atocad.exe应该继续运行)。到目前为止,我一直在使用它,但它关闭的是acad.exe而不是文件。foreach(ProcessProcinProcess.GetProcesses()){if(Proc.ProcessName.Equals("acad")){Proc.CloseMainWindow();Proc.Kill();从Autodesk站点(http://usa.autodesk.com/adsk/servlet/index?id=773204&siteID=123112)获取Autocad.NET库,然后您将能够使用应用程序和文档类。他们将使您完全控制在应用程序中打开和关闭文档。您可以找到很多文章,并可以提出更多问题。AutoCAD确实有API。4件装。两个用于进程内,两个用于COM。inprocess:acdbmgd.dllacmgd.dllCOMInterop:Autodesk.Autocad.Interop.dllAutodesk.Autocad.Interop.Common.dll这是一种打开AutoCAD新实例的方法,它将连接到AutoCAD的现有运行实例。您需要将这些.dll加载到您的项目引用中。使用Autodesk.AutoCAD.Interop;使用Autodesk.AutoCAD.Interop.Common;命名空间YourNameSpace{公共类YourClass{AcadApplicationAcApp;privateconststringprogID="AutoCAD.Application.18.2";//这是AutoCAD2012程序IDprivatestringprofileName=">";privateconststringacadPath=@"C:ProgramFilesAutodeskAutoCAD2012-Englishacad.exe";publicvoidGetAcApp(){try{AcApp=(AcadApplication)Marshal.GetActiveObject(progID);}catch{try{varacadProcess=newProcess();acadProcess.StartInfo.Arguments=string.Format("/nologo/p"{0}"",profileName);acadProcess.StartInfo.FileName=(@acadPath);acadProcess.开始();while(AcApp==null){try{AcApp=(AcadApplication)Marshal.GetActiveObject(progID);}catch{}}}catch(COMException){MessageBox.Show(String.Format("无法创建类型为"{0}"的对象",progID));}}尝试{inti=0;varappState=AcApp.GetAcadState();while(!appState.IsQuiescent){if(i==120){应用程序lication.Exit();}//等待.25sThread.Sleep(250);我++;}if(AcApp!=null){//设置可见性AcApp.Visible=true;}}catch(COMExceptionerr){if(err.ErrorCode.ToString()=="-2147417846"){Thread.Sleep(5000);}}}}}关闭它像Application.Exit();请原谅代码太糟糕了,这是我刚开始的开发时的第一种方法......我怀疑你是否能够做到这一点,除非AutoCAD有一个你可以挂钩的API并要求它关闭文件你。您的c#应用程序只能对进程(acad.exe)执行操作,它无权访问该进程的内部操作。此外,您不应该使用Kill,除非进程变得无响应,当然不应该在CloseMainWindow之后。CloseMainWindow是一种要求应用程序自行关闭的礼貌方式。杀人就像把电源线从插座里拔出来一样。您没有给它清理自身并干净退出的机会。还有另一种可能性-这仅在您的C#代码与AutoCAD进程在同一台计算机上运行时才有效,并且并不是真的推荐它,但是,如果您真的被困住了并准备好使用Windows切换切换的麻烦您可以使用SendKeys命令将击键发送到应用程序。MSDN文章:http://msdn.microsoft.com/EN-US/library/ms171548(v=VS.110,d=hv.2).aspxhttp://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx使用此功能,您可以使用菜单命令发送击键来模拟用户关闭文件。要执行文件关闭,最好的方法是按照c#中此ObjectARXSDK中的步骤进行操作,并将以下代码更改为以下内容。以上是C#学习教程:如何在Autocad中使用C#保持acad.exe运行并关闭文件?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——[CommandMethod("CD",CommandFlags.Session)]staticpublicvoidCloseDocuments(){应用。文档管理器;foreach(Documentdocindocs){//首先取消任何正在运行的命令if(doc.CommandInProgress!=""&&doc.CommandInProgress!="CD"){AcadDocumentoDoc=(AcadDocument)doc.AcadDocument;oDoc.SendCommand("x03x03");}if(doc.IsReadOnly){doc.CloseAndDiscard();}else{//激活文档,所以我们可以检查DBMODif(docs.MdiActiveDocument!=doc){docs.MdiActiveDocument=doc;}intisModified=System.Convert.ToInt32(Application.GetSystemVariable("DBMOD"));//没有修改不需要保存if(isModified==0){doc.CloseAndDiscard();}else{//这可能会在奇怪的地方创建文档doc.CloseAndSave(doc.Name);}}}本文收集自网络,不代表立场。如涉及侵权,请点击联系右侧管理员删除。如需转载请注明出处: