创建控制台

  当系统启动一个控制台程序时就会创建一个新的控制台,这个控制台程序的入口点为main函数。例如,系统在启动命令处理器(命令提示符)时就会创建一个新的控制台。一旦命令处理器启动了一个新的控制台程序,用户就可以指定系统是否为新的程序创建一个新的控制台,还是继承当前的命令处理器的控制台。

  程序可以通过以下方法创建一个控制台:

  • 一个GUI程序或控制台程序可以以CREATE_NEW_CONSOLE调用CreateProcess函数在一个新的控制台执行控制台程序。(通常,一个控制台程序会继承其父的控制台,并且其接收到的输入可能出乎意料。)
  • 一个当前没有处在控制台中的图形界面(GUI)程序或控制台程序可以通过调用AllocConsole函数来创建一个新的控制台。(GUI一旦创建就不会处于控制台中,控制台程序如果是通过向CreateProcess函数传递DETACHED_PROCESS创建的话,也不处于控制台中.)

  典型的,程序出现错误并需要用户交互时,就会使用AllocConsole创建一个控制台。如当GUI程序出现不能正常使用图形接口时,就会创建一个控制台;或者控制台程序不能与用户正常交互时,就会创建一个控制台提示错误产生。

  当然,程序也可以调用CreateProcess时指定CREATE_NEW_CONSOLE标志来创建一个控制台。该方法创建的控制台可以访问其子程序,但不能访问父程序。父子控制台都可以单独同用户交互,而不产生任何冲突。如果控制台程序创建时没有指定该标志,两个程序就会同时使用一个控制台,而且,其中某个程序所需要的输入不能担保被正确接收。应用程序可以通过创建子程序以避免产生混淆,并且不要继承输入缓冲区的处理;或者同一时间仅允许子程序继承输入缓冲区处理,并阻止父程序读取输入直到子程序结束,也可以避免不必要的错误产生。

  创建一个新控制台将产生一个新的控制台窗口,并使用单独的I/O屏幕缓冲区。程序通过GetStdHandle函数与新的控制台关联,以得到新控制台输入及屏幕缓冲区的句柄,通过这些句柄可以访问控制台。

  使用CreateProcess,可以指定一个STARTUPINFO结构,该结构的成员控制着为子程序创建的第一个新控制台(如果有许多的话)。如果调用CreateProcess时指定了CREATE_NEW_CONSOLE标志,STARTUPINFO结构将影响控制台特性,同样也会影响子程序调用AllocConsole所创建的控制台。如下控制台特性可以被指定:

  • 新控制台窗体的大小,按字符单元计
  • 新控制台窗体的位置,按屏幕像素坐标计
  • 新的控制台屏幕缓冲区的大小,按字符单元计
  • 新控制台屏幕缓冲区的文本及背景色属性
  • 新控制台窗体标题栏的显示名

  如果STARTUPINFO的值未指定,系统将使用默认值。一个子程序可用通过调用GetStartupInfo函数确定STARTUPINFO的值。

  程序不能改变本身的控制台窗口位置,但以下函数可以用来设置或获得STARTUPINFO结构的其他属性值。

函数描述
GetConsoleScreenBufferInfo获取窗体大小,屏幕缓冲区大小及颜色属性。
SetConsoleWindowInfo变更控制台窗体大小
SetConsoleScreenBufferSize变更控制台屏幕缓冲区大小
SetConsoleTextAttribute设置颜色属性。
SetConsoleTitle设置控制台窗口标题栏。
GetConsoleTitle得到控制台窗口标题栏。

 

  一个程序可以通过调用FreeConsole函数与一个被继承的控制台分离,或者与通过调用AllocConsole创建的控制台分离。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Python可以用来创建控制台程序。Python的设计具有很强的可读性,相比其他语言经常使用英文关键字和一些特殊的语法结构,使得Python在编写控制台程序时更加简洁明了。Python是一种解释型语言,不需要编译的环节,可以直接在控制台中运行代码。你可以通过命令行参数来读取输入,例如使用"python3 main.py"的方式调用程序并传入参数。输入可以包括数字、小数点和运算符,可以支持空格。在控制台程序中,你可以使用Python的内置函数和库来实现各种功能,比如使用enumerate()函数来遍历可遍历的数据对象并同时获取数据和数据下标。总之,Python是一个非常适合用来创建控制台程序的语言。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Python基于控制台的输入与输出](https://blog.csdn.net/weixin_39572794/article/details/110191697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用Python3编写一个计算器的控制台程序](https://blog.csdn.net/Nan__You/article/details/129483761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值