c# autocad 通过进程向cad发送command
主要的过程,日后操作autocad lt也应该可以用此方法
1 var pros = Process.GetProcessesByName("acad"); 2 if (pros.Length == 0) 3 { 4 MessageBox.Show("没有找到acad进程,请检查后再运行本程序!"); 5 return; 6 } 7 SendCommandToAutoCAD("_circle 0,0,0 300 ", pros.First().MainWindowHandle); 8 SetForegroundWindow(pros.First().MainWindowHandle);
导入win32的api的函数
1 [DllImport("user32.dll")] 2 public static extern bool SetForegroundWindow(IntPtr hWnd); 3 4 [DllImport("user32.dll", EntryPoint = "FindWindow")] 5 public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 6 7 [DllImport("user32.dll")] 8 private static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, ref COPYDATASTRUCT lParam);
1 private struct COPYDATASTRUCT 2 { 3 public IntPtr dwData; 4 5 public int cbData; 6 7 public IntPtr lpData; 8 9 }
kean大神提供的向autocad 命令行发送命令的函数
1 private void SendCommandToAutoCAD(string toSend, IntPtr hwnd) 2 { 3 const int WM_COPYDATA = 0x4A; 4 COPYDATASTRUCT cds = new COPYDATASTRUCT(); 5 cds.dwData = new IntPtr(1); 6 string data = toSend + "\0"; 7 cds.cbData = data.Length * Marshal.SystemDefaultCharSize; 8 cds.lpData = Marshal.StringToCoTaskMemAuto(data); 9 SendMessageW(hwnd, WM_COPYDATA, IntPtr.Zero, ref cds); 10 Marshal.FreeCoTaskMem(cds.lpData); 11 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具