Peço por favor, vejam minha dúvida!

Delphi

23/02/2003

:arrow: Olá, eu queria saber se tem como saber se uma linha da procedure como ´WincExec(...)´ terminou de executar, por exemplo, se enquanto a execução do programa dentro do WinExec estiver sendo executada, dá uma mensagem num Label que o programa está sendo executado, qdo. terminar a execução aí dá uma outra mensagem no Label que terminou a execução do programa.

Espero retorno!

:wink: Obrigado! :wink:


Anonymous

Anonymous

Curtidas 0

Respostas

Anonymous

Anonymous

23/02/2003

Utilize esta 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;


No Delphi, faça algo como:


Label1.Caption := ´Executando tal programa...´;
WinExecAndWait32( SeuPrograma,SW_HIDE );
Label1.Caption := ´Programa tal finalizado´;


GOSTEI 0
Anonymous

Anonymous

23/02/2003

Ôpa! Valeu! Obrigado aí pela atenção!


GOSTEI 0
POSTAR