你目前正处于脱机状态,正在等待 Internet 重新连接

信息: 从消失避免控制台窗口

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 99115
概要
从程序管理器上的文件管理器 Windows NT 资源管理器,或通过键入 开始 <progname>一个控制台应用程序启动时 执行其自己的控制台中从命令提示。一旦将终止该应用程序,因此用户不能读取写入到最后一次暂停和程序退出之间屏幕的任何内容,就会消失此控制台。 有两种方法,以使控制台窗口中消失。
更多信息

如果进程正在运行在单独的控制台中的方法 1: 暂停

第一种方法是实现一个控制台应用程序不终止运行在单独的控制台窗口时立即。不可能是您希望应用程序始终后显示到控制台窗口的信息,在提示符下启动时暂停。 但是,直接确定该应用程序与 CMD.EXE 共享一个控制台没有 API (应用程序编程接口)。 此方法查找在控制台游标的当前位置,并且它是否 (0,0) 然后该程序假定它在单独的控制台窗口中运行。

示例代码

   #include <windows.h>   #include <stdio.h>   #include <conio.h>   CONSOLE_SCREEN_BUFFER_INFO csbi;   HANDLE hStdOutput;   BOOL bUsePause;   void main(void)   {      hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);      if (!GetConsoleScreenBufferInfo(hStdOutput, &csbi))      {         printf("GetConsoleScreenBufferInfo failed: %d\n", GetLastError());         return;      }      // if cursor position is (0,0) then use pause      bUsePause = ((!csbi.dwCursorPosition.X) &&                   (!csbi.dwCursorPosition.Y));      printf("Interesting information to read.\n");      printf("More interesting information to read.\n");      // only pause if running in separate console window.      if (bUsePause)      {         int ch;         printf("\n\tPress any key to exit...\n");         ch = getch();      }   }				
注: 此方法将不起作用如果用户将合并清除屏幕 (CLS) 和应用程序分成两部分 (例如对于 [C:\] CLS &amp; <progname>) 的一个步骤的执行,因为光标的位置将是 (0,0),但应用程序使用属于 CMD.EXE 控制台。

方法 2: 从控制台开始 cmd.exe/K

此方法是在一个单独的窗口中启动一个控制台应用程序,并强制保持后已终止该应用程序窗口。使用 WinExec(),CreateProcess(),或在一个批处理文件中,应用程序可以使用下面的命令行:
cmd/K consoleapp.exe
已终止 consoleapp.exe 后,/K 开关将使控制台窗口保持在屏幕上。应用程序用户可以键入以关闭控制台窗口的 退出 命令。

警告:本文已自动翻译

属性

文章 ID:99115 - 上次审阅时间:11/21/2006 15:46:16 - 修订版本: 4.1

Microsoft Win32 Application Programming Interface

  • kbmt kbconsole kbinfo kbkernbase kbprogramming KB99115 KbMtzh
反馈