程序与控制台的关系

语言:C/C++
本文有许多个人观点,仅供参考

基本定义

所谓的控制台就是DOS窗口(命令行窗口),那个黑框框.

“所谓的控制台应用程序,就是能够运行在MS-DOS环境中的程序。控制台应用程序通常没有可视化的界面,只是通过字符串来显示或者监控程序。控制台程序常常被应用在测试、监控等用途,用户往往只关心数据,不在乎界面。” ——来自百度百科

conhost.exe

conhost, Console Host Process, 即命令行程序的宿主进程。就是它控制控制台的。

最基础的程序运行出现的窗口就是控制台。

程序运行后,会调用conhost申请一个控制台窗口。
run_conhost.exe此时程序仍然进行。

程序中的函数

程序会进行字符的输出,使用cout,printf,putchar等语句。这些语句会将字符串发送到conhost上,conhost将字符输出。
print

输入语句scanf,cin,getchar,gets,getc等,先让键盘的字符经过控制台进入缓冲区,当按下回车时进行读取,然后从conhost将字符串发送回程序中。
scan

来自conio.h/curses.h的getch()则是直接从控制台摘去字符返回,不经过缓冲区也不显示到屏幕上;
kbhit()则可以检测控制台键盘是否被按下。

system()

system是调用dos命令的函数之一,在程序中有时会使用。
cls,color,mode con…,title,pause等都是系统自带的针对控制台设置的程序,分别进行 清屏、设置颜色、设置控制台属性、设置标题、暂停 等功能。
wincon.h里的一些函数,如SetConsoleTitle,SetConsoleTextAttribute等,也可以达到相应的效果。
color

调整程序与控制台的函数

wincon.h里的函数

FreeConsole()
直接让conhost退出,脱离并退出控制台。

AllocConsole()
调用conhost,申请一个新的控制台窗口。

AttachConsole(pid)
参数填进程ID
BOOL WINAPI AttachConsole(__in DWORD dwProcessId);

让单独的程序进程附加指定进程的控制台,达到共用的目的。

注意
ShowConsole(GetConsoleWindow(),SW_HIDE);
这一句只能让控制台窗口隐藏,并不能释放conhost,所以控制台仍占据内存。如果你的程序不用控制台,最好要么用FreeConsole(),要么直接不要申请控制台.
(虽然我以前经常隐藏控制台)

项目工程都不会使用控制台,因为控制台不再满足人们的需要。他们自己注册窗口。
一个叫做subsystem的链接,可以让exe明白运行它的方式。将它调为windows则必须注册自己的窗口;将它调为console则会申请控制台。这也就是下面这条语句的用意所在。

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值