como executar programa externo no delphi?
quero executar um programa externo e esperar que ele termine sua execuçao para seguir a execuçao da minha aplicação. Tem como fazer isso?
Bacharelcomputer
Curtidas 0
Melhor post
Beto_martini
03/11/2004
Olá.
Um exemplo utilizando a função ShellExecute;
Para executar o programa: teste.exe em c:\
procedure xxxxx
var sCaminho:string;
begin
sCaminho := ´c:\teste.exe´;
ShellExecute(Handle,´open´,pchar(caminho),nil,nil,sw_show)
end;
p.s.: não esqueça de inserir a unit shellapi em uses.
Um exemplo utilizando a função ShellExecute;
Para executar o programa: teste.exe em c:\
procedure xxxxx
var sCaminho:string;
begin
sCaminho := ´c:\teste.exe´;
ShellExecute(Handle,´open´,pchar(caminho),nil,nil,sw_show)
end;
p.s.: não esqueça de inserir a unit shellapi em uses.
GOSTEI 1
Mais Respostas
Gandalf.nho
03/11/2004
Dê uma pesquisada no fórum sobre ShellExecute ou CreateProcess
GOSTEI 0
Cebikyn
03/11/2004
Você pode encontrar seis formas diferentes de se fazer isso em:
http://swissdelphicenter.ch/en/showcode.php?id=93
http://swissdelphicenter.ch/en/showcode.php?id=93
GOSTEI 0
Eduardo.buffara
03/11/2004
Use WinExec(´Caminho Completo do Programa´, Tamanho da Janela)
Tamanho da Janela = SW_SHOW ou SW_SHOWMAXIMAZED ou SW_SHOWMINIMIZED etc...
qq duvida me mande um email
Tamanho da Janela = SW_SHOW ou SW_SHOWMAXIMAZED ou SW_SHOWMINIMIZED etc...
qq duvida me mande um email
GOSTEI 0
Cebikyn
03/11/2004
As duas dicas a cima não esperam o término do programa, como solicitado pelo colega. Além do mais, WinExec é uma função obsoleta e mantida no sistema operacional apenas por motivos de compatibilidade.
GOSTEI 0
Eduardo.buffara
03/11/2004
Caro amigo cebikyn...se usar o Shell do windows como acima foi proposto ele executa o programa mais naum espera a sua finalização entaum para poder esperar a sua finalização é necessário usar uma função especifica...naum percebi que o nosso caro amigo tinha solicitado isto..
Use esta funçãoa para executar um aplicativo e espera sua finalização...
Inclua na seção uses: Windows
{ Esta função faz isto. }
function ExecAndWait(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;
- Exemplo de uso:
ExecAndWait(´c:\windows\notepad.exe´, ´´, SW_SHOW);
Observações
Não se esqueça de informar o caminho (path) do arquivo completo. Esta função foi desenvolvida para Delphi 32 bits (2, 3, 4,...).
Use esta funçãoa para executar um aplicativo e espera sua finalização...
Inclua na seção uses: Windows
{ Esta função faz isto. }
function ExecAndWait(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;
- Exemplo de uso:
ExecAndWait(´c:\windows\notepad.exe´, ´´, SW_SHOW);
Observações
Não se esqueça de informar o caminho (path) do arquivo completo. Esta função foi desenvolvida para Delphi 32 bits (2, 3, 4,...).
GOSTEI 0
Cesar Peixoto
03/11/2004
A função acima funciona perfeitamente.
Pergunto, seria possivel adicionar uma tecla específica para forçar a finalização do programa executado?
Exemplo: Executo o notepad, e o programa em delphi aguarda ele ser finalizado para prosseguir. Porém, se aperto a tecla F12, ele interrompe a execução do notepad e prossegue com o programa.
Como seria esta incrementação na função acima?
Agradeço a atenção
Pergunto, seria possivel adicionar uma tecla específica para forçar a finalização do programa executado?
Exemplo: Executo o notepad, e o programa em delphi aguarda ele ser finalizado para prosseguir. Porém, se aperto a tecla F12, ele interrompe a execução do notepad e prossegue com o programa.
Como seria esta incrementação na função acima?
Agradeço a atenção
GOSTEI 0