Peço por favor, vejam minha dúvida!
23/02/2003
0
: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:
Espero retorno!
:wink: Obrigado! :wink:
Anonymous
Curtir tópico
+ 0
Responder
Posts
23/02/2003
Anonymous
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´;
(*
* 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
&&
&&
&&
&&
&&
begin
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
&&
end;
No Delphi, faça algo como:
Label1.Caption := ´Executando tal programa...´;
WinExecAndWait32( SeuPrograma,SW_HIDE );
Label1.Caption := ´Programa tal finalizado´;
Responder
Clique aqui para fazer login e interagir na Comunidade :)