首页 > 其他分享 >CAD Revit 二次开发开启控制台打印调试信息

CAD Revit 二次开发开启控制台打印调试信息

时间:2023-10-27 12:55:17浏览次数:31  
标签:int DllImport private dll 调试信息 二次开发 static 控制台 Revit

第一步:编写控制台帮助类,调用kernel32.dll中控制台API

控制台帮助类
public class ConsoleHelper
    {

        private const uint STD_INPUT_HANDLE = 0xfffffff6;
        private const uint STD_OUTPUT_HANDLE = 0xfffffff5;
        private const uint STD_ERROR_HANDLE = 0xfffffff4;
        private const uint ATTACH_PARENT_PROCESS = 0xffffffff;
        private const int HWND_TOPMOST = -1;
        private const int SWP_NOMOVE = 0x0002;
        private const int SWP_NOSIZE = 0x0001;
        private static int stdin;
        private static int stdout;

        [DllImport("kernel32.dll")]
        private static extern bool AttachConsole(uint dwProcessId);
        [DllImport("kernel32.dll")]
        private static extern bool AllocConsole();
        [DllImport("kernel32.dll")]
        private static extern bool FreeConsole();
        [DllImport("kernel32.dll")]
        private static extern int GetStdHandle(uint nStdHandle);
        [DllImport("kernel32.dll")]
        private static extern IntPtr GetConsoleWindow();
        [DllImport("kernel32.dll")]
        private static extern bool WriteConsole(int hConsoleOutput,
        string lpBuffer,
        int nNumberOfCharsToWrite,
        ref int
        lpNumberOfCharsWritten,
        int lpReserved);
        [DllImport("kernel32.dll")]
        public static extern bool ReadConsole(int hConsoleInput,
        StringBuilder lpBuffer,
        int nNumberOfCharsToRead,
        ref int lpNumberOfCharsRead,
        int lpReserved);
        [DllImport("user32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool SetWindowPos(
          IntPtr hWnd,
          IntPtr hWndInsertAfter,
          int x,
          int y,
          int cx,
          int cy,
          int uFlags);

        /// <summary>
        /// 打开控制台,程序初始化时调用一次
        /// </summary>
        public static void OpenConsole() {
            //创建控制台
            AllocConsole();
            //将控制台浮于窗体最上层
            IntPtr hWnd = GetConsoleWindow();
            if (hWnd != null) {
                SetWindowPos(hWnd, new IntPtr(HWND_TOPMOST), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
            }
            //获取控制台输入输出流句柄
            stdin = GetStdHandle(STD_INPUT_HANDLE);
            stdout = GetStdHandle(STD_OUTPUT_HANDLE);
        }
        /// <summary>
        /// 关闭控制台
        /// </summary>
        public static void CloseConsole() {
            FreeConsole();
        }
        /// <summary>
        /// 控制台打印
        /// </summary>
        /// <param name="s"></param>
        public static void WriteLine(string s)
        {
            int len = 0;
            WriteConsole(stdout, s + "\r\n", s.Length + 2, ref len, 0);
        }
        /// <summary>
        /// 读取控制台数据
        /// </summary>
        /// <returns></returns>
        public static string ReadLine()
        {
            int len = 0;
            StringBuilder sb = new StringBuilder();
            ReadConsole(stdin, sb, 256, ref len, 0);
            return sb.ToString(0, sb.Length - 2);
        }
    }

第二步:初始化控制台帮助类,构建控制台并将其浮于所有窗体之上

(注意:一个进程只需要初始化一次即可)

控制台初始化
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    class RegistryCmd : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            try
            {
                //ApplicationRegistry.Register(commandData.Application);
#if DEBUG
                //控制台初始化
                ConsoleHelper.OpenConsole();
                //控制台打印
                ConsoleHelper.WriteLine("测试");
#endif
                return Result.Succeeded;
            }
            catch (Exception ex) {
                message = ex.Message;
                return Result.Failed;
            }
        }
    }

第三步:控制台打印,在需要打印位置调用静态打印函数即可

ConsoleHelper.WriteLine("测试");

效果演示

image

标签:int,DllImport,private,dll,调试信息,二次开发,static,控制台,Revit
From: https://www.cnblogs.com/chenshuangjian/p/17792103.html

相关文章

  • 【UCHome二次开发】UCHome模板语法…
    UCHome二次开发时,了解模板的语法是必须的,下面对其中的语法做一一介绍。至于模板的解析过程请参考《UCHome二次开发之模板解析》。1、调用其他模板<!--{templatefooter}-->说明:将以模板header.htm来替换此处的代码2、调用头像模板代码:<!--{avatar($value[uid],small)}-->解......
  • 电子签章安装、部署、二次开发、应用
    系统环境:win10开发电子签章第三方服务:契约锁1、第三方私有云安装说明(具体说明查看《安装指南PDF》):   安装jdk1.8MySQL数据库启动第三方服务,启动路径为/bin/start.bat启动服务后http://localhost:9180登陆后进行私有云license申请,申请完成需要企业认证,认证完成后,生......
  • 「Revit2023最新版下载」Autodesk Revit 2023汉化版附安装教程
    Revit是Autodesk公司著名的3D建模软件,是建筑行业BIM系统中应用最广泛的软件之一。其核心功能是三维建筑模型的参数化设计、渲染效果图、计算、土建建模、机电建模,用于帮助工程师在施工前的精确仿真阶段。软件地址:看置顶贴AutodeskRevit2023的软件特点过滤器中的OR条件。创建一个......
  • 医院多维度综合绩效考核系统源码,支持二次开发
    医院多维度综合绩效考核系统源码 商业项目源码,支持二次开发采用多维度综合绩效考核的形式,针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求,对考核方案中各维度进行灵活配置,对各维度的权重、衡量标准、数据统计方式进行自定义维护。医......
  • Revit 二次开发 C# 添加配置 Add-In Manager
    第一步:安装SDK,在SDK目录下获取Add-InManager插件第二步:将Add-InManager文件夹整个拷贝到C:\ProgramData\Autodesk\Revit\Addins\2022目录下;(注意:不是Revit安装目录,而是Revit的ProgramData目录,默认:C:\ProgramData\Autodesk\Revit\Addins\2022)第三步:将Add-InManager目录下Auto......
  • 网页CAD二次开发(WEB CAD SDK)实现单行和多行文字的绘制
    前言今天讲一下如何利用WEBCADSDK来绘制单行文字和多行文字,在使用mxcad绘制文字之前请先按照mxcad文档,将cad图纸在网页上渲染出来,如果没有阅读mxcad文档可能无法理解后续代码。在线CAD功能测试:https://demo.mxdraw3d.com:3000/mxcad/   绘制文字和多行文字单行文字代......
  • C# AVEVA MARINE 二次开发 读取分段
    快速读取和筛选分段元素[MyAmFunctionAtt(nameof(测试功能),nameof(读取分段))]publicvoid读取分段(WindowManagerwm){try{foreach(variteminwm.Windows){if(ite......
  • destoon运行流程二次开发必看
    <?php代码首先包含common.inc.php文件在common.inc.php文件中,首先定义常量。define('IN_DESTOON',true);define('IN_ADMIN',defined('DT_ADMIN')?true:false);define('DT_ROOT',str_replace("\",'/',dirname(__F......
  • Revit二次开发之 GeometryObject分析
    Revit包含了一套完整的几何库,这些几何对象都继承自GeometryObject对象,根据分类,我们可以知道,图形元素的集成关系如下: 1、Autodesk.Revit.DB.Arc对象,当前主要用于一些标尺对象GeometryElement这个是比较核心的元素,Element通过get_Geometry函数,能够获取的元素就是这个元素,这......
  • SOLIDWORKS二次开发——拓展设计能力与定制化解决方案
    SOLIDWORKS是一款广泛应用于机械设计行业的三维CAD软件,它提供了丰富的功能和工具,满足了企业的基本设计需求。然而,有时候标准软件的功能无法满足特定的要求,这就需要进行二次开发来扩展SOLIDWORKS的功能,制定定制化的解决方案。 1.什么是SOLIDWORKS二次开发?SOLIDWORKS二次开发是......