首页 > 编程语言 >【c#】使用Win32API控制台程序的显示和隐藏

【c#】使用Win32API控制台程序的显示和隐藏

时间:2024-09-06 16:35:37浏览次数:13  
标签:IntPtr c# hWnd static 控制台 ConsoleTitle 隐藏 Win32API

大家好,又见面了,我是你们的朋友全栈君。

在项目开发的过程中,为了方便调试,利用控制台打印出一些提示信息,当安装到现场的时候,我们担心工作人员手误关掉了程序,所以将控制台隐藏,让程序在后台跑。下面是具体的显示和隐藏的代码:

代码语言:C# 复制
        /// <summary>  
        /// 控制台帮助类  
        /// </summary>  
        public static class ConsoleHelper
        {
            /// <summary>  
            /// 获取窗口句柄  
            /// </summary>  
            /// <param name="lpClassName"></param>  
            /// <param name="lpWindowName"></param>  
            /// <returns></returns>  
            [DllImport("user32.dll", SetLastError = true)]
            private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

            /// <summary>  
            /// 设置窗体的显示与隐藏  
            /// </summary>  
            /// <param name="hWnd"></param>  
            /// <param name="nCmdShow"></param>  
            /// <returns></returns>  
            [DllImport("user32.dll", SetLastError = true)]
            private static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);

            /// <summary>  
            /// 隐藏控制台  
            /// </summary>  
            /// <param name="ConsoleTitle">控制台标题(可为空,为空则取默认值)</param>  
            public static void hideConsole(string ConsoleTitle = "")
            {
                ConsoleTitle = String.IsNullOrEmpty(ConsoleTitle) ? Console.Title : ConsoleTitle;
                IntPtr hWnd = FindWindow("ConsoleWindowClass", ConsoleTitle);
                if (hWnd != IntPtr.Zero)
                {
                    ShowWindow(hWnd, 0);
                }
            }

            /// <summary>  
            /// 显示控制台  
            /// </summary>  
            /// <param name="ConsoleTitle">控制台标题(可为空,为空则去默认值)</param>  
            public static void showConsole(string ConsoleTitle = "")
            {
                ConsoleTitle = String.IsNullOrEmpty(ConsoleTitle) ? Console.Title : ConsoleTitle;
                IntPtr hWnd = FindWindow("ConsoleWindowClass", ConsoleTitle);
                if (hWnd != IntPtr.Zero)
                {
                    ShowWindow(hWnd, 1);
                }
            }
        }

分析代码我们可以看出,控制显示和隐藏的关键代码是

代码语言:C# 复制
ShowWindow(hWnd, 0);

参数为0:隐藏;为1:显示;为2:最小化。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105675.html原文链接:https://javaforall.cn

 

出处:https://javaforall.cn/105675.html

标签:IntPtr,c#,hWnd,static,控制台,ConsoleTitle,隐藏,Win32API
From: https://www.cnblogs.com/mq0036/p/18400534

相关文章

  • PbootCMS实现数字条分页样式效果
    <!--分页-->{pboot:if({page:rows}>0)}<divclass="pagebar"><divclass="pagination"><aclass="page-itempage-linkhidden-sm"href="{page:index}"title="首页">首页</a&......
  • pbootcms站点信息调用
    {pboot:siteindex}站点入口地址,一般用于站内链接跳转设置地址前置,实现自适应URL模式{pboot:sitepath}站点路径,根目录时值为空,为适应部署到二级目录时建议链接前面带上{pboot:sitelanguage}站点语言{pboot:sitetitle}站点标题{pboot:sitesubtitle}站点副标题......
  • LeetCode刷题-栈
    一:栈1、栈的特性:栈和队列不一样;队列是先进先出;而队列是先进后出;后进后出!2、栈的常见操作defcreate_stack():stack=[]#在python中;通常用列表实现栈的操作returnstackdefpush(stack,data):stack.append(data)#将data压入栈中defpeek(stack):returnsta......
  • 国产芯片CW32L010兼容代替STM8S003
     CW32L010是基于eFlash的单芯片低功耗微控制器,集成了主频高达48MHz的ARM®Cortex®-M0+内核,ZUI高主频能够达到48MHz、高速嵌入式存储器(多至64K字节FLASH和多至4K字节SRAM)以及一系列全面的增强型外设和I/O口,并且集成高精度模拟数字转换器(ADC)。 所有型号都提供全套的通信接口(二......
  • Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装
    七、Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装一、calicoCalico是一个开源的虚拟化网络方案,支持基础的Pod网络通信和网络策略功能。官方文档:https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart1、calico安装###在Master控......
  • WPF Generic eventhandler for various event
    publicMainWindow(){InitializeComponent();this.AddHandler(ListBox.SelectionChangedEvent,newSelectionChangedEventHandler(GenericHandler));this.AddHandler(Button.ClickEvent,newRoutedEventHandler(GenericHandler));}......
  • 了解CSS布局——WEB开发系列29
    CSS页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。一、正常布局流(NormalFlow)CSS的布局基础是“正常流”,也就是页面元素在没有特别指定布局方式时的默认排列方式。正常流分为两种主要类型:块级元素:默认情况下,块级元素......
  • JavaScript中的Object.freeze()和Object.seal()
    一、Object.freeze()1.简介:Object.freeze()是一个可以将对象冻结的方法。一旦对象被冻结,就不能添加、删除或修改其属性。这在需要确保对象完整性、防止任何意外或故意更改的场景中非常有用constperson={name:'Alice',age:30};Object.freeze(person);p......
  • JavaScript 循环语句
    1. for 循环for循环是最常用的循环结构之一,它适合在循环开始前就知道循环次数的情况。基本语法for(初始化表达式;条件表达式;迭代后表达式){//循环体//这里的代码会在每次迭代时执行}如何工作初始化:首先执行初始化表达式,通常用来设置循环控制变量。条件......
  • 【Canvas与数学】圆在直线上滚动形成的三种摆线轨迹
    【说明】一个圆盘在地面上匀速滚动,圆盘上一点所形成的轨迹称为摆线。摆线对于机械有着非常重要的意义,从它的实用价值来说,摆线是可以和椭圆、抛物线和弹道线相提并论的。【摆线图像】控制点在圆周上形成的标准摆线:控制点在圆外形成的自交化变形摆线:控制点在圆内形成的平缓化变形摆线......