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窗口进行交互,同时打算隐藏掉难看的控制台窗口.实现的方法很多,有的是修改链接命令.我采用的方法略有些麻烦,首先是给窗口命名,之后找到该窗口指针, ...
随机推荐
- [.Net]Framwork WebAPI添加接口请求监控
思路: 通过重写 ActionFilterAttribute 拦截Action的请求及返回信息,实现对接口请求的监听. 最终效果如下: 全局启用需配置如下: 局部启用需配置如下: 源码如下: 1 // ...
- iphone 熄屏黑屏录像方法-取证拍摄-自带功能
iphone 有个旁白模式是为了残疾盲人的只听模式. 1.在 设置 - 辅助功能 - 辅助功能快捷键 - 选旁白 ,这样按三下电源键进入/退出旁白模式. 2.把声音调没,这样旁白就不会发出朗读. 3. ...
- decay_rate, decay_steps ,batchsize,iteration,epoch
(96条消息) decay_rate, decay_steps ,batchsize,iteration,epoch_hellocsz的博客-CSDN博客_decay_steps (1)batchsi ...
- 容器之beanfactory抽丝剥茧系列一
1.总所周知,spring ioc功能实现的顶层接口就是BeanFactory.如下面类结构图 这张更加全面: 还有更加变态的 2.BeanFactory为最顶层接口,定义了最核心的需要实现的接口 p ...
- ffmpeg+nginx+hls(低延迟)
先看一下我参考的原文实现: 实现方案 https://zhuanlan.zhihu.com/p/87225094 流媒体服务器环境搭建 https://blog.csdn.net/impingo/ar ...
- mongodb定时备份
1. https://www.jianshu.com/p/a9352e28e2d6 (未测试) 通过centos 脚步来执行备份操作,使用crontab实现定时功能,并删除指定天数前的备份 具体操 ...
- 使用Jmeter进行https接口测试时,如何导入证书?
转载:https://www.cnblogs.com/tester-zhangxiaona/p/12295473.html
- SpringBoot整合RocketMQ案例实战
一.概念 rocketMQ是一款典型的分布式架构下的中间件产品,使用异步通信方式和发布订阅的消息传输模型,具备异步通信的优势,系统拓扑简单,上下游耦合较弱,主要应用于异步解耦,流量削峰填谷等场景 二. ...
- Spring--AOP简介+入门案例
AOP简介 面向切面编程:在不惊动原始设计的基础上,进行功能增强 各个要应用该功能的对象叫做连接点,那个功能叫做通知,表面上的代码没有发生变化,私下里发生变化的连接点,会出现切入点,切入点与通知通过切 ...
- 2023 年最新最全的 React 面试题
React 作为前端使用最多的框架,必然是面试的重点.我们接下来主要从 React 的使用方式.源码层面和周边生态(如 redux, react-router 等)等几个方便来进行总结. 1. 使用方 ...