Fórum Socorro, Executar Programa Externo.. Como? #222694

26/03/2004

0

Marcelo, estou com um pequeno problema, tenho um programa externo e tenho que executar ele varias vezes seguida, mas quando uso o winexec, ele executa a primeira e logo em seguida ja executa a sengunda vez mas da pau poque antes de fechar o programa externo ele nao pode executar a segunda vez, entendeu?, então tenho que informar para o programa o seguinte, olha enquanto ele nao finalizar a primeira execução por favor nao execute a segunda blz.
se nao entender por favor me ajude.
EXEMPLO:

Como Faco isso

Winexec(´C:\asjdflaksd\asdfasdf.exe´)
//mas enquanto nao finalizar a linha de cima nao passe para a de baixo
Winexec(´C:\asjdflaksd\asdfasdf.exe´)
//mas enquanto nao finalizar a linha de cima nao passe para a de baixo
Winexec(´C:\asjdflaksd\asdfasdf.exe´)
//mas enquanto nao finalizar a linha de cima nao passe para a de baixo
Winexec(´C:\asjdflaksd\asdfasdf.exe´)
//mas enquanto nao finalizar a linha de cima nao passe para a de baixo
Winexec(´C:\asjdflaksd\asdfasdf.exe´)
//mas enquanto nao finalizar a linha de cima nao passe para a de baixo


Recadi

Recadi

Responder

Posts

26/03/2004

Sremulador

WinExec(´command.com /c programa.exe´,sw_ShowNormal);

Modifique o sw_ShowNormal até que você consiga o esperado.


Responder

Gostei + 0

26/03/2004

Nildo

Acrescente esta função no seu formulário:

function WinExecAndWait32(FileName: string; Visibility: integer): integer;
 { returns -1 if the Exec failed, otherwise returns the process´ exit
   code when the process terminates }
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 not 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 { pointer to PROCESS_INF }
    Result := -1
  else
  begin
    WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
  end;
end;


Para utilizar é assim:

WinExecAndWait32( ´c:\seuprograma.exe´, sw_show );



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar