Incorporação de um console DOS em um formulário do windows

votos
16

É possível incorporar um console DOS em um formulário do Windows ou de Controle do Usuário em C # 2.0?

Temos um produto DOS legado que meu aplicativo Windows tem de interagir com, e tem sido solicitado que uma instância do produto legado deve ser executado dentro do aplicativo do Windows.

No momento, eu estou usando o user32.dll para localizar a janela que o produto DOS está sendo executado em, minimizando, em seguida, maximizar a janela e digitar os caracteres na janela. Esta não é uma boa solução para o problema, pois significa que a minha candidatura tem de armazenar o nome da janela em configurações do aplicativo, e exige que o usuário retorna para a página correta do aplicativo DOS antes de usar a função de interação.

EDIT: Alguns mais informações

O aplicativo legado precisa estar visível para o usuário, mas não em uma janela separada.

Eu tentei a resposta de TimothyP e ele funciona muito bem, mas é possível obter a mesma funcionalidade, mas com a janela do DOS visualmente incorporado em um formulário do windows ou controle de usuário em vez de aparecendo em sua própria janela? De preferência de uma forma ShowDialog () para que o usuário não pode interagir com o wile aplicativo eles estão em 'modo antigo', por assim dizer.

Publicado 10/12/2008 em 12:14
fonte usuário
Em outras línguas...                            


3 respostas

votos
22

É possível redirecionar o padrão de entrada / saída da consola / DOS aplicações usando a classe Process. Pode parecer algo como isto:

var processStartInfo = new ProcessStartInfo("someoldapp.exe", "-p someparameters");

processStartInfo.UseShellExecute = false;
processStartInfo.ErrorDialog = false;

processStartInfo.RedirectStandardError = true;
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.CreateNoWindow = true;

Process process = new Process();
process.StartInfo = processStartInfo;
bool processStarted = process.Start();

StreamWriter inputWriter = process.StandardInput;
StreamReader outputReader = process.StandardOutput;
StreamReader errorReader = process.StandardError;
process.WaitForExit();

Agora você pode usar os fluxos de interagir com o aplicativo. Ao definir processStartInfo.CreateNoWindow para true a aplicação original será escondido.

Eu espero que isso ajude.

Respondeu 10/12/2008 em 12:26
fonte usuário

votos
4

No que diz respeito à sua pergunta sobre como exibir o aplicativo DOS dentro do aplicativo do Windows.

Existem algumas soluções.

  • O primeiro é simplesmente não exibir o aplicativo DOS (com CreateNoWindow) e "simular" a interface do usuário do aplicativo DOS no seu aplicativo do Windows através da leitura e escrita para os córregos.

  • A outra solução seria usar o Win32API, obter o identificador do Windows (Whnd) da janela do aplicativo Console / DOS e defina seu pai ao seu formulário. Actualmente, eu não estou em casa e uma vez que tem sido idades desde que eu fiz isso, eu não me lembro de coração como ele é feito. Se não me engano você vai precisar usar as seguintes chamadas de API Win32:

Se eu tiver algum tempo à esquerda mais tarde hoje, eu vou ver se eu posso encontrar melhores amostras.

Respondeu 11/12/2008 em 14:16
fonte usuário

votos
1

Você pode usar a função CreateProcess eo hStdInput, de saída, e os membros de erro do argumento STARTUPINFO, isso permitirá que você para interceptar a entrada e saída do aplicativo padrão.

Respondeu 10/12/2008 em 12:24
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more