[✔️] 打开关闭应用程序的控制台

简介: [✔️] 打开关闭应用程序的控制台

调用 AllocConsole() 函数可以创建一个新的控制台窗口,而 FreeConsole() 函数则用于释放该控制台窗口的资源。


但是,在实际使用时,FreeConsole() 函数并不一定会关闭控制台窗口。


这是因为控制台窗口可能被其他进程或线程共享。如果当前进程拥有的控制台窗口正在被其他进程或线程使用,那么调用 FreeConsole() 函数并不会关闭该窗口。


相反,它只会将当前进程与控制台窗口的关联解除,使其他进程或线程可以继续使用该窗口。


如果要彻底关闭控制台窗口,需要保证它没有被其他进程或线程使用,并调用如下代码:


FreeConsole();
PostMessage(GetConsoleWindow(), WM_QUIT, 0, 0);


WM_CLOSE / WM_QUIT / WM_DESTROY


这三个消息都是 Windows 消息,用于操作控件或窗口。


它们的作用如下:


WM_CLOSE


当用户单击窗口的关闭按钮时,Windows 发送 WM_CLOSE 消息给该窗口。


如果窗口处理了这个消息,说明窗口已经准备好关闭,并且可以调用 DestroyWindow() 函数来销毁该窗口。


当收到WM_CLOSE消息,你可以做两件事儿。一件是你接受默认的处理并返回一个值,你若这样做了,应用程序或窗口按照计划关闭,或者返回0,应用程序或窗口将保持原样。


WM_QUIT


当调用 PostQuitMessage() 函数时,将发送 WM_QUIT 消息到该线程的消息队列中。

Windows 会在此消息被处理后从该线程的消息循环中退出,因此 WM_QUIT 通常用于正常地退出 GUI 程序。


当一个用户关闭了主窗口,并希望这意味着是要结束应用程序时,如果你希望真的这么做,那么在收到WM_DESTROY消息的时候,你必须发出一个WM_QUIT消息。


WM_QUIT是应用程序结束发出的消息,一般可以看成进程被kill掉的情况。


WM_DESTROY


当一个窗口被销毁时,Windows 发送 WM_DESTROY 消息给该窗口。


如果处理了这个消息,说明窗口已经被销毁,并且可以做一些清理工作。


当收到WM_DESTROY消息的时候,窗口已经从视觉上被删除,但一个主窗口被关闭,并不意味着应用程序结束了,因为它可以在没有窗口的条件下继续运行。



目录
相关文章
|
2月前
|
开发框架 .NET C#
C# 一分钟浅谈:第一个 C# 控制台应用程序
【9月更文挑战第1天】C# 是一种现代化的、面向对象的编程语言,广泛应用于桌面应用、Web 应用和游戏开发等领域。本文详细介绍如何创建第一个 C# 控制台应用程序,包括使用 Visual Studio 和 .NET SDK 的步骤,并解析常见问题及其解决方法,如控制台窗口立即关闭、编译错误和运行时错误等。通过实践,你将掌握 C# 控制台应用的基础知识,为进一步学习打下坚实基础。
258 48
|
6月前
|
C#
一个库帮你轻松的创建漂亮的.NET控制台应用程序
一个库帮你轻松的创建漂亮的.NET控制台应用程序
118 6
|
5月前
|
存储 IDE C#
C#入门:在JetBrains Rider中创建.Net Framework控制台应用程序,输出“Hello, World!”
C#入门:在JetBrains Rider中创建.Net Framework控制台应用程序,输出“Hello, World!”
635 0
.Net Core控制台应用程序使用定时器
.Net Core控制台应用程序使用定时器
300 0
.Net Core控制台应用程序使用定时器
|
网络协议 安全 Windows
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
|
C# C++
.NET Core 控制台应用程序使用异步(Async)Main方法
C# 7.1 及以上的版本允许我们使用异步的Main方法
7556 0
|
Windows
windows下的vs2017新建win32控制台应用程序项目如何调出程序向导选项?
windows下的vs2017新建win32控制台应用程序项目如何调出程序向导选项? 如下图所示: 我的GitHub地址:https://github.com/heizemingjun 我的博客园地址:http://www.
1389 0

热门文章

最新文章