aguandando execução de um outro programa.

16/03/2006

boa tarde a todos,

bom gostaria que quando a rotina a seguir:

  
    if (cFormaPgto = ´Cartao Credito´) then
        begin
          SetLength(cNumeroCupom, 6);
          iRetorno := Bematech_FI_NumeroCupom(cNumeroCupom);
          RetornoECF(iRetorno);

          comando := ´C:\TEF\SNCATEF2006.exe´ + ´1´ + ´ ´ + NumeroCupom + ´ ´ + cSubtotal;
          WinExec(Pchar(comando), 0);
        end;


chamar o programa SNCATEF2006 de alguma forma o meu sistema ficasse parado aguardando o fim da execução desse programa ´SNCATEF2006´, alguem tem uma luz, que seja pegando um parametro de retorno do programa chamado ou outra coisa qualquer.


Tronbr

Respostas

16/03/2006

Paullsoftware

use essa função...
function ExecExterno(const FileName, Params: string; const WindowState: Word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Coloca o nome do arquivo entre aspas. Isto é necessário devido aos espaços contidos em nomes longos }
  CmdLine := ´"´ + Filename + ´"´ + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
  cb := SizeOf(SUInfo);
  dwFlags := STARTF_USESHOWWINDOW;
  wShowWindow := WindowState;
  end;
  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
  CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
  PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
  { Aguarda até ser finalizado }
  if Result then begin
  WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  { Libera os Handles }
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
  end;
end;


espero ter ajudado! :wink:


Responder Citar