创建控制台

【勇芳软件工作室】汉化HomePreviousNext

Microsoft Windows在启动【控制台进程】(一个入口点为主要)的字符模式进程时创建一个新的控制台。例如,Windows在启动命令处理器时创建一个新的控制台。当命令处理器启动新的控制台进程时,用户可以指定系统是否为新进程创建新的控制台,还是继承命令处理器的控制台。进程可以使用以下方法之一创建控制台:

*当前未连接到控制台的图形用户界面(GUI)或控制台进程可以使用AllocConsole功能创建新的控制台。

* GUI或控制台进程可以使用CreateProcess函数创建一个新的控制台进程,并指定一个标志来告诉系统创建一个新的控制台。

通常,当出现错误需要与用户交互时,进程使用AllocConsole创建控制台。例如,GUI过程可以在发生错误时创建控制台,从而阻止其使用其正常的图形界面,或者通常不会与用户交互的控制台进程可以在出现错误时创建控制台。调用AllocConsole的过程不能附加到现有控制台。GUI进程在创建时不附加到任何控制台。如果在创建进程时调用CreateProcess中指定了DETACHED_PROCESS标志,则控制台进程未附加到控制台。一个进程可以使用FreeConsole函数将其从继承的控制台或由AllocConsole创建的控制台中分离出来。

进程也可以通过在调用CreateProcess中指定CREATE_NEW_CONSOLE标志来创建控制台。此方法创建一个可由子进程访问的新控制台,但不创建父进程。独立的控制台使父进程和子进程都能够与用户进行交互而不会发生冲突。如果在创建控制台进程时未指定此标志,则两个进程都附加到相同的控制台,并且不能保证正确的进程将接收到它的输入。应用程序可以通过创建不继承输入缓冲区的句柄的子进程来避免混淆,或者一次仅允许一个子进程继承输入缓冲区句柄,同时防止父进程读取控制台输入,直到子程序完成为止。

创建一个新的控制台会导致一个新的控制台窗口,以及单独的I / O屏幕缓冲区。与新控制台关联的进程使用GetStdHandle功能获取新控制台的输入和屏幕缓冲区的句柄。这些句柄使进程能够访问控制台。

当进程使用CreateProcess时,它可以指定STARTUPINFO结构,其成员控制为子进程创建的第一个新控制台(如果有)的特性。如果指定了CREATE_NEW_CONSOLE标志,则调用CreateProcess中指定的STARTUPINFO结构会影响创建的控制台。如果子进程随后使用AllocConsole,它也会影响创建的控制台。可以指定以下控制台特性:

*新的控制台窗口的大小,字符单元格以及屏幕像素坐标中的位置

*新控制台屏幕缓冲区的大小(以字符单元格表示)

*新控制台屏幕缓冲区的文本和背景颜色属性

*名称显示在新控制台窗口的标题栏中

如果未指定STARTUPINFO值,系统将使用默认值。子进程可以使用GetStartupInfo函数来确定其STARTUPINFO结构中的值。

进程无法更改屏幕上其控制台窗口的位置,但以下控制台功能可用于设置或检索STARTUPINFO结构中指定的其他属性。

功能描述
GetConsoleScreenBufferInfo检索窗口大小,屏幕缓冲区大小和颜色属性。
SetConsoleWindowInfo更改控制台窗口的大小。
SetConsoleScreenBufferSize更改屏幕缓冲区的大小。
SetConsoleTextAttribute设置颜色属性。
SetConsoleTitle设置控制台窗口标题。
GetConsoleTitle检索控制台窗口标题。