创建控制台

来源:互联网 发布:js生成6位位邀请码 编辑:程序博客网 时间:2024/04/29 02:52
  当系统启动一个控制台程序时就会创建一个新的控制台,这个控制台程序的入口点为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创建的控制台分离。

原创粉丝点击