como saber se um programa fechou?
eu chamo um programa através do WinExec.
e gostaria de saber quando a pessoa no caso o usuário terminou de usá-lo tem como saber isso?
agradecendo desde já
e gostaria de saber quando a pessoa no caso o usuário terminou de usá-lo tem como saber isso?
agradecendo desde já
Piaum3
Curtidas 0
Respostas
Rafael Gomes
19/04/2006
apos chamar o programa pelo winexec vc pode verificar se o programa esta aberto localizando a janela atraves do comando
FindWindow
essa funcao retorna o Handle da janela se ela existir ...
caso ela nao exista a funcao retorna NULL ...
vc poderia fazer algo assim ...
existe uma outra maneira ... mais complexa ... se voce quiser que o seu programa só obtenha o controle depois que o aplicativo chamado pelo WinExec for encerrado utilize essa funcao ...
a funcao executa um aplicativo e espera ate ela ser terminada pra devolver o controle para sua aplicacao ....
espero ter ajudado ...
[..]s
FindWindow
essa funcao retorna o Handle da janela se ela existir ...
caso ela nao exista a funcao retorna NULL ...
vc poderia fazer algo assim ...
function VerificaJanela(classe: string): boolean; var H: THandle; begin result:= false; H:= FindWindow(PAnsiChar(classe), nil); if H <> 0 then result:= true; end;
existe uma outra maneira ... mais complexa ... se voce quiser que o seu programa só obtenha o controle depois que o aplicativo chamado pelo WinExec for encerrado utilize essa funcao ...
function ExecAndWait(const FileName, Params: ShortString; const WinState: Word): boolean; export; // executa um programa externo e espera ate o mesmo ser encerrado para devolver o controle ao programa
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: ShortString;
begin
{ Coloca o nome do arquivo entre aspas, devido a possibilidade de existir espaços nos nomes longos do Windows 9x }
CmdLine := ´"´ + FileName + ´" ´ + Params;
FillChar(StartInfo, SizeOf(StartInfo), #0);
with StartInfo do
begin
//cb := SizeOf(SUInfo); //erro aqui
cb := SizeOf(StartInfo); //essa linha está correta
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WinState;
end;
Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
{ Aguarda o encerramento do programa executado }
if Result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
{ Libera os Handles utilizados }
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;a funcao executa um aplicativo e espera ate ela ser terminada pra devolver o controle para sua aplicacao ....
espero ter ajudado ...
[..]s
GOSTEI 0
Piaum3
19/04/2006
pô cara ajudou bastante..
mais qual seria a linha de comando para executar essa função?
agradecendo desde já
mais qual seria a linha de comando para executar essa função?
agradecendo desde já
GOSTEI 0
Rafael Gomes
19/04/2006
para executar as duas funcoes chame assim
a funcao VerificaJanela voce pode adaptar para localizar a janela pelo titulo da janela ...
dessa forma a funcao ficaria assim ...
ExecAndWait(caminho do executavel, parametros se existirem, modo como a janela sera exeibida)
if VerificaJanela(´notepad´) then showmessage(´Notepad aberto´); ExecAndWait(path + ´\MDAC\MDAC_TYP.exe´,´/Q:A /C:"dasetup /Q:D /N"´,SW_HIDE)
a funcao VerificaJanela voce pode adaptar para localizar a janela pelo titulo da janela ...
dessa forma a funcao ficaria assim ...
function VerificaJanela(titulo: string): boolean; var H: THandle; begin result:= false; H:= FindWindow(nil, PAnsiChar(titulo)); if H <> 0 then result:= true; end;
ExecAndWait(caminho do executavel, parametros se existirem, modo como a janela sera exeibida)
GOSTEI 0
Raserafim
19/04/2006
rafael, tentei usar a sua sugestão ExecAndWait mas não consegui.
não tem erro de sintaxe pois a compilação tem sucesso, mas o programa que mando executar não abre.
vc poderia explicar um pouco mais detalhado e dar um exemplo?
não tem erro de sintaxe pois a compilação tem sucesso, mas o programa que mando executar não abre.
vc poderia explicar um pouco mais detalhado e dar um exemplo?
GOSTEI 0