INFO: Prevenir a janela de consola a partir de que desaparece

Traduções de Artigos Traduções de Artigos
Artigo: 99115 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Quando uma aplicação de consola é iniciada ou a partir do Explorador do Windows NT File Manager, o Gestor de programas, ou escrevendo início <progname> na linha de comandos, executar na respectiva consola. Esta consola desaparece assim que a aplicação terminar e, por isso, o utilizador não é possível ler nada escrito para o ecrã entre o último interromper e sair do programa. Existem duas abordagens para impedir que a janela da consola que desaparece.

Mais Informação

Método 1: Parar se o processo está em execução na consola separado

O primeiro método é para implementar uma aplicação de consola não terminar imediatamente quando executado numa janela separada da consola. Não é provável que poderá uma aplicação para sempre interromper após visualizar informação para a janela de consola quando iniciou a partir da linha de comandos. No entanto, não existe nenhum API (application programming interface) que directamente determina se a aplicação partilha uma consola com cmd.exe. Este método procura na localização actual do cursor da consola e, se for (0,0), em seguida, o programa assume que está a ser executado numa janela separada da consola.

Código de exemplo

   #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();
      }
   }
				
NOTA: Este método não funciona se o utilizador combina um ecrã de limpar (CLS) e execução da aplicação para uma só vez (por exemplo, [C:\] CLS & <progname>), uma vez que coloque o cursor irá ser (0, 0), mas a aplicação está a utilizar a consola, que pertence ao cmd.exe.

Método 2: Iniciar a consola com cmd.exe /K

Este método é para iniciar uma aplicação de consola numa janela separada e forçar a janela para permanecer após a aplicação terminou. Uma aplicação pode utilizar a seguinte linha de comandos com WinExec(), CreateProcess(), ou num ficheiro batch:
CMD /K consoleapp.exe
Depois de consoleapp.exe terminou, o parâmetro /K efectua a janela de consola permanecer no ecrã. O utilizador da aplicação pode escreva o comando exit para fechar a janela da consola.

Propriedades

Artigo: 99115 - Última revisão: 21 de novembro de 2006 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Microsoft Win32 Application Programming Interface nas seguintes plataformas
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Palavras-chave: 
kbmt kbconsole kbinfo kbkernbase kbprogramming KB99115 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 99115

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com