Fórum como saber se um programa fechou? #319491
19/04/2006
0
e gostaria de saber quando a pessoa no caso o usuário terminou de usá-lo tem como saber isso?
agradecendo desde já
Piaum3
Curtir tópico
+ 0Posts
19/04/2006
Rafael Gomes
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
19/04/2006
Piaum3
mais qual seria a linha de comando para executar essa função?
agradecendo desde já
Gostei + 0
19/04/2006
Rafael Gomes
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
12/04/2007
Raserafim
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
Clique aqui para fazer login e interagir na Comunidade :)