C# 当前进程是否有控制台窗口
WPF应用程序,在VS的项目属性中,可以设置输出类型:

那我们在代码中,如何判断应用的类型呢。有没有控制台?是否Windows应用程序还是控制台应用程序?
Kernel32下函数GetConsoleWindow可以解决这个问题:
[DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();
1 var consoleWindowHandle = GetConsoleWindow();
2 if (consoleWindowHandle == IntPtr.Zero)
3 {
4 Debug.WriteLine("输出类型为 Windows应用程序");
5 }
6 else
7 {
8 Debug.WriteLine("输出类型为 控制台应用程序");
9 }
另外,如果需要判断控制台应用程序内,主窗口是否为控制台,可以根据窗口句柄来确认:
1 var consoleWindowHandle = GetConsoleWindow();
2 var mainWindowHandle = Process.GetCurrentProcess().MainWindowHandle;
3
4 if (consoleWindowHandle == IntPtr.Zero)
5 {
6 Debug.WriteLine("输出类型为 Windows应用程序");
7 }
8 else if (consoleWindowHandle == mainWindowHandle)
9 {
10 Debug.WriteLine("输出类型为 控制台应用程序,主窗口也是控制台窗口");
11 }
12 else
13 {
14 Debug.WriteLine("输出类型为 控制台应用程序,但主窗口为Windows窗口");
15 }
我们设置输出类型为控制台应用,并在ShowMainWindow前后,输出结果,验证okay:
注:这里输出到VS控制台,是因为使用了Debug类型。如果是Console.Write,程序会优先输出到控制台窗口内。
如果需要在Windows应用程序下,使用控制台窗口输出日志。可以使用AllocConsole:
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
AllocConsole,可以创建控制台窗口。bool返回值,true表示之前没有控制台窗口、创建成功,false表示已经有控制台窗口、创建失败。
C# 当前进程是否有控制台窗口的更多相关文章
- C#使用Process启动exe程序,不弹出控制台窗口的方法
背景:使用wkhtmltopdf工具将html转换成pdf时,这个工具在进行转换时会弹出命令行窗口显示转换过程,但是在项目运行时弹出服务器突然弹出控制台窗口会很奇怪,尤其是当转换多个时.解决这个问题 ...
- 用CMake屏蔽Release运行时的控制台窗口
在默认情况下,CMake构建的VS工程运行时会弹出控制台窗口,可以通过手动方式进行屏蔽,也可以通过CMake命令进行屏蔽. 手动方式:分为两步 第一步:右击VS项目,选择"属性"- ...
- C# 在winform或者wpf中显示控制台窗口
这儿需要使用两个系统函数: BOOL WINAPI FreeConsole(void); //// 关闭控制台窗口,参考:http://msdn.microsoft.com/en-us/library ...
- WinForm程序启动控制台窗口Console
本文转载:http://blog.csdn.net/oyi319/article/details/5753311 2.WinForm程序和控制台窗口Console 如果你调试过SharpDevelop ...
- C/C++ 控制台窗口暂停
为什么我看不到控制台的输出结果? 在编写C++程序中,经常会出现,控制台窗口一闪就消失了的情况 为什么会这样? 原因简单到有点可笑:因为程序运行结束了 对于控制台程序,操作系统让它开始运行前会为它造一 ...
- 给Win32 GUI程序增加控制台窗口的方法
给Win32 GUI程序增加控制台窗口的方法 2008年10月11日 星期六 下午 04:43 在Win32的GUI程序中,没有控制台窗口,我们输出调试信息时有些不方便,以往我的做法是使用Messag ...
- MFC如何在有界面的应用程序中开启控制台窗口
在有界面的应用程序中开启控制台窗口有时候非常有用,尤其是在调试多线程应用程序中,由于通过断点的方式调试程序时会导致线程挂起从而导致各种难于预料的结果.这时候就可以通过开启控制台窗口往窗口输出信息来查看 ...
- windows中控制台窗口和普通窗口有什么区别?
1. 窗口都是windows标准窗口,有窗口句柄,但是console window没有消息循环,直接从缓冲区读数据,显示数据. windows中普通窗口都有自己的窗口过程, 我可以使用SetWindo ...
- c# 控制台程序 隐藏控制台窗口
在某些项目中,需要采用控制台程序,但是又不需要通过dos窗口进行交互,同时打算隐藏掉难看的控制台窗口.实现的方法很多,有的是修改链接命令.我采用的方法略有些麻烦,首先是给窗口命名,之后找到该窗口指针, ...
随机推荐
- spring-boot-devtools热部署揭秘
前言 在开发项目过程中,当修改了某些代码后需要本地验证时,需要重启本地服务进行验证,启动这个项目,如果项目庞大的话还是需要较长时间的,spring开发团队为我们带来了一个插件:spring-boot- ...
- 小程序使用svga
svga 是一种动画格式.不仅可以在 ios,android,flutter,web 上使用,小程序也支持.设计师使用 after effects 或是 animate 进行动画设计.设计师导出工具 ...
- 西电oj135题 拼数字并排序
类别综合 时间限制 1S 内存限制 1000Kb 问题描述 对于输入的字符串(只包含字母和数字),将其中的连续数字拼接成整数,然后将这些整数按从大到小顺序输出.例如字符串"abc123d5e ...
- python+appium拉起APP
1.首先需要完成环境配置: JDK:https://www.cnblogs.com/wenlongma/p/17103062.html: SDK:https://www.cnblogs.com/w ...
- ADOStoredProc动态调用存储过程
有些用ADOStoredProc进行操作时,要动态创建输入输出参数,一定要用 ADOStoredProc1.Parameters.Refresh;将参数进行刷新一下.
- HTTP通信基础
1. HTTP通信流程: 1)输入www.baidu.com2)解析成IP地址:192.168.0.13)浏览器通过该IP访问web服务器获取web资源4)再返回给客户端5)最后呈现在用户面前 2. ...
- 总项目的pom文件
注意修改子模块名称!!!!!!!!!!!!!!!!!!<?xml version="1.0" encoding="UTF-8"?> <proj ...
- IntelliJ IDEA常用插件
Mybatis Log Plugin安装好插件后,在Tools工具栏中可以看到安装好的插件,点击即可打开相应窗口,在Debug时,相应的Sql语句即可输出到此窗口,方便查看.此插件相当好用,提升开发效 ...
- DevOps|研发效能不是老板工程,是开发者服务
有人说研发效能是老板工程.不是的,研发效能不是老板工程,它不直接服务于老板(虽然老板可能看一些报表),反而是服务于广大产研运(产品+研发+质量+运维)的同学,所以有的公司也把研发效能叫做基础中台,平台 ...
- RHCE服务---Web
网站需求:请给openlab搭建web网站 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资 ...