Caro colega

Utilize a função abaixo. Encontrei em um site de um colega.

Chamar o programa externo.

WinExecAndWait32('SisAux',SW_SHOW);

Função

{
*  Executa um arquivo externo, e aguarda que ele seja encerrado
*  para continuar a execução normal }
function WinExecAndWait32(FileName: String; Visibility: integer): longword;
{
FileName: nome do arquivo (não requer a extensão, e faz a pesquisa
  na variável 'Path' do sistema
Visibility: use SW_SHOW ;-)
}
var
  zAppName: array[0..512] of char;
  zCurDir: array[0..255] of char;
  WorkDir: String;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  StrPCopy(zAppName,FileName);
  GetDir(0,WorkDir);
  StrPCopy(zCurDir,WorkDir);
  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  StartupInfo.cb := Sizeof(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if CreateProcess( nil,
  zAppName, { pointer to command line string }
  nil,      { pointer to process security attributes }
  nil,      { pointer to thread security attributes }
  false,    { handle inheritance flag }
  CREATE_NEW_CONSOLE or { creation flags }
  NORMAL_PRIORITY_CLASS,
  nil,      { pointer to new environment block }
  nil,      { pointer to current directory name }
  StartupInfo, { pointer to STARTUPINFO }
  ProcessInfo) then
  begin
    repeat
      GetExitCodeProcess(ProcessInfo.hProcess,result);
      {
        A linha abaixo (ProcessMessages) evita que o seu programa
        fique "travado" durante a execução do aplicativo.
      }
      Application.ProcessMessages;
      {
       Esta estrutura 'If' permite que seja implementado um botão de
       cancelamento dentro do programa. Se não utilizar, apague a estrutura
       inteira (o If e o TerminateProcess)
      }
//      if FormularioPrincipal.Cancelar then
//        TerminateProcess(ProcessInfo.hProcess,Result);
    until (Result = 0);
  end;
end;



Atenciosamente

Washington A. Müller da Silva

#####################
NextCorp Informática Ltda
www.nextcorp.com.br
[EMAIL PROTECTED]
0 xx (51)-3589-3690
####################
----- Original Message ----- 
From: "Vandinei Santos - Oi" <[EMAIL PROTECTED]>
To: "Delphi-Br" <delphi-br@yahoogrupos.com.br>
Sent: Monday, November 07, 2005 10:19 AM
Subject: [delphi-br] Executar e Esperar término de um aplicativo


Prezados Colegas,


Desenvolvi um sistema e para fazer a sua distribuição, criei um programa 
instalador para facilitar a instalação e importação dos
dados iniciais para a sua operação.

O programa instalador é executado pela autoreprodução do CD-ROM. Contudo, 
quando clico em cada uma das opções, antes que o
aplicativo da respectiva opção clicada seja finalizado, a mensagem de que o 
opção foi realizada com sucesso é emitida, mesmo até
quando um erro.

Eu preciso fazer com que a mensagem só seja emitida quando a opção seja 
realmente finalizada.
Tentei a função "ExecuteAndWait", mas ela no Win2000 está travando e não está 
realizando o que
se destina.

Alguém tem uma sugestão ou idéia de como eu contorno esse problema?

Agradeço desde já a coloboração.

Abraços cordiais,
Vandinei Santos



[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>



Links do Yahoo! Grupos










-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.362 / Virus Database: 267.12.8/162 - Release Date: 05/11/2005




-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a