Como aguardar o término do comando WinExec
Estou fazendo um bkp do meu banco de dados utilizando o comando WinExec ms eu preciso que o sistema aguarde este comando terminar para que depois continue executando os outros processos.
Como eu faço???
Como eu faço???
Paulo Cesar
Curtidas 0
Respostas
Rafael Heise
16/09/2003
Na revista ClubeDelphi deste mês na seção de perguntas e respostas tem a resposta...
mas não me lembro de cabeça....
e não tenho a revista aqui nas minhas mãos agora.. e nem tem como eu ir pegar agora.. então... você pode aguardar.. que quando eu puder eu pósto aqui no fórum....
abraços
mas não me lembro de cabeça....
e não tenho a revista aqui nas minhas mãos agora.. e nem tem como eu ir pegar agora.. então... você pode aguardar.. que quando eu puder eu pósto aqui no fórum....
abraços
GOSTEI 0
Sistemald
16/09/2003
Para executar um programa e esperar até esse programa finalizar, use a rotina abaixo:
[b:c097ffdc0d]function[/b:c097ffdc0d] Executa (Arquivo : String; Estado : Integer) : Integer;
[b:c097ffdc0d]var[/b:c097ffdc0d]
Programa : array [0..512] of char;
CurDir : array [0..255] of char;
WorkDir : String;
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
[b:c097ffdc0d]begin [/b:c097ffdc0d]
StrPCopy (Programa, Arquivo);
GetDir (0, WorkDir);
StrPCopy (CurDir, WorkDir);
FillChar (StartupInfo, Sizeof (StartupInfo), #0);
StartupInfo.cb := sizeof (StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Estado;
[b:c097ffdc0d]if[/b:c097ffdc0d] not CreateProcess (nil, Programa, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
Result := -1
else
[b:c097ffdc0d]begin[/b:c097ffdc0d]
WaitForSingleObject (ProcessInfo.hProcess, Infinite);
GetExitCodeProcess (ProcessInfo.hProcess, Result);
[b:c097ffdc0d]end; [/b:c097ffdc0d]
[b:c097ffdc0d]end; [/b:c097ffdc0d]
Estado é o tipo de janela que aparecerá, que pode ser:
SW_SHOWNORMAL
Janela em modo normal
SW_MAXIMIZE
Janela maximizada
SW_MINIMIZE
Janela minimizada
SW_HIDE
Janela Escondida
[b:c097ffdc0d]function[/b:c097ffdc0d] Executa (Arquivo : String; Estado : Integer) : Integer;
[b:c097ffdc0d]var[/b:c097ffdc0d]
Programa : array [0..512] of char;
CurDir : array [0..255] of char;
WorkDir : String;
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
[b:c097ffdc0d]begin [/b:c097ffdc0d]
StrPCopy (Programa, Arquivo);
GetDir (0, WorkDir);
StrPCopy (CurDir, WorkDir);
FillChar (StartupInfo, Sizeof (StartupInfo), #0);
StartupInfo.cb := sizeof (StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Estado;
[b:c097ffdc0d]if[/b:c097ffdc0d] not CreateProcess (nil, Programa, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
Result := -1
else
[b:c097ffdc0d]begin[/b:c097ffdc0d]
WaitForSingleObject (ProcessInfo.hProcess, Infinite);
GetExitCodeProcess (ProcessInfo.hProcess, Result);
[b:c097ffdc0d]end; [/b:c097ffdc0d]
[b:c097ffdc0d]end; [/b:c097ffdc0d]
Estado é o tipo de janela que aparecerá, que pode ser:
SW_SHOWNORMAL
Janela em modo normal
SW_MAXIMIZE
Janela maximizada
SW_MINIMIZE
Janela minimizada
SW_HIDE
Janela Escondida
GOSTEI 0
Paulo Cesar
16/09/2003
Obrigado Luciano Donato, eu fiz uma mesclagem entre a matéria da edição 43, sua dica e algumas alterações minhas e funcionou 100¬...
[]´s
Paulo Cesar Pedroso
[]´s
Paulo Cesar Pedroso
GOSTEI 0