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
  • 相关阅读:
    Linux系统下/tmp目录文件重启后自动删除,不重启自动删除10天前的/TMP的文件(转)
    Docker 镜像加速器
    RabbitMQ集群和高可用配置
    k8s如何管理Pod(rc、rs、deployment)
    微信开放平台开发(1) 语义理解
    微信开放平台开发(2) 微信登录
    微信电话
    微信支付开发(1) 微信支付URL配置
    微信支付开发(2) 微信支付账号体系
    微信支付开发(3) JS API支付
  • 原文地址:https://www.cnblogs.com/JJBox/p/13766772.html
Copyright © 2011-2022 走看看