zoukankan      html  css  js  c++  java
  • cad.net 直接在exe发送绘图信息加载信息到cad,非com方式

    代码来自于南胜

    除了以下这个的方法还可以用端口通讯,不过端口通讯比这个还麻烦...

    虽然例子是发送绘图信息,但是也可以发送加载信息....

    重要的是这份代码解决了com通讯只能处理相同的两个cad,例如你打开了两个cad08,导致了只能处理第一个打开的....

    只不过发送信息是用明码发送,也就是你会在命令栏看见:

     

    端口通讯可以无码,两者在技术上面还有各自的优劣....

    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    
    namespace ConsoleApp1
    {
        public class exe发送到cad
        {
            static void Main(string[] args)
            {
                //获取所有acad的进程句柄
                var pros = Process.GetProcessesByName("acad");
    
                //通过进程句柄获取主窗口句柄
                foreach (var item in pros)
                {
                    //发送报文到主窗口实现数据传入
                    SendCad.SendAcadProcesses("_circle 0,0,0 300 ", item.MainWindowHandle);
                }
            }
        }
    
        public class SendCad
        {
            [DllImport("user32.dll", EntryPoint = "SendMessage")]
            static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref COPYDATASTRUCT lParam);
    
            /// <summary>
            /// 发送信息到进程
            /// </summary>
            /// <param name="toSend">报文</param>
            /// <param name="hwnd">主窗口的句柄</param>
            public static void SendAcadProcesses(string toSend, IntPtr hwnd)
            {
                string data = toSend + "";
                const int WM_COPYDATA = 0x4A;
                var cds = new COPYDATASTRUCT
                {
                    dwData = new IntPtr(1),
                    cbData = data.Length * Marshal.SystemDefaultCharSize,
                    lpData = Marshal.StringToCoTaskMemAuto(data)
                };
                SendMessage(hwnd, WM_COPYDATA, IntPtr.Zero, ref cds);
                Marshal.FreeCoTaskMem(cds.lpData);
            }
    
            /// <summary>
            /// 发送信息的结构
            /// </summary>
            private struct COPYDATASTRUCT
            {
                public IntPtr dwData;
                public int cbData;
                public IntPtr lpData;
            }
        }
    }
    View Code
  • 相关阅读:
    什么?Spring Boot CommandLineRunner 有坑!?
    关于 websocket 跨域的一个奇怪问题…
    电商金额计算的 4 个坑,千万注意了!
    微服务模块划分原则和接口定义原则
    tcp的三次握手(连接)与四次挥手(断开)
    二叉树遍历及算法实现
    elasticsearch搜索 倒排索引
    kubernetes落地-传统web服务迁移
    Docker核心技术-容器管理
    Docker核心技术-镜像管理
  • 原文地址:https://www.cnblogs.com/JJBox/p/13766772.html
Copyright © 2011-2022 走看看