Fórum Reiniciar aplicativo Externo automatico #425670
06/10/2012
0
To precizando de mais uma ajudinha aqui, preciso de um codigo para quando meu aplicativo executar um outro externo oculto ou não oculto, ae se este aplicativo externo for fechado por alguem ou até mesmo fechar sozinho, atomaticamente meu aplicativo renicie ele
Cgm2k7 2013
Curtir tópico
+ 0Posts
06/10/2012
Rafael Encinas
O que tu podes fazer é o seguinte: Se o aplicativo estiver no mesmo computador, você pode colocar um Timer, que de tempos em tempos verifica nos Processos do Windows se o aplicativo está executando.
O nome do processo é igual ao nome do executável;
A mesma coisa que fazemos quando queremos que o aplicativo execute somente uma vez, porém adaptando-se algumas coisas;
Grato
Gostei + 0
07/10/2012
Cgm2k7 2013
O que tu podes fazer é o seguinte: Se o aplicativo estiver no mesmo computador, você pode colocar um Timer, que de tempos em tempos verifica nos Processos do Windows se o aplicativo está executando.
O nome do processo é igual ao nome do executável;
A mesma coisa que fazemos quando queremos que o aplicativo execute somente uma vez, porém adaptando-se algumas coisas;
Grato
Ae amigo! voce poderia coloca um exemplo ?!
sou novo em delphi não to conseguindo adapitar este codigo:
procedure TForm1.VerificarExecucao;
var
MutexHandle: THandle;
hwind: HWND;
begin
MutexHandle := CreateMutex(nil, TRUE, 'MysampleAppMutex');
if MutexHandle <> 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
MessageBox(0, 'Este programa já está em execução!', '', mb_IconHand);
CloseHandle(MutexHandle);
hwind := 0;
repeat
hwind := Windows.FindWindowEx(0, hwind, 'TApplication', 'appexterno');
until (hwind <> Application.Handle);
if (hwind <> 0) then
begin
Windows.ShowWindow(hwind, SW_SHOWNORMAL);
Windows.SetForegroundWindow(hwind);
end;
Halt;
end;
end;
end;
Gostei + 0
10/10/2012
Cgm2k7 2013
consegui resolver parte da minha duvida...
achei um fonte q verifica se um aplicativo .exe esta em execução entam como o amigo ai em cima disse coloquei um ttime
q ferifica de 30 em 30 segundos se o aplicativo esta em execução se não estiver ele executa novante mas se tiver ele não fanada.
O fonte para verificar se um aplicativo esta em execução no gerenciador de tarefas é:
procedure TAutoStart_frm.CreateWin9xProcessList(List: TstringList);
var
hSnapShot: THandle;
ProcInfo: TProcessEntry32;
begin
if List = nil then Exit;
hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot <> THandle(-1)) then
begin
ProcInfo.dwSize := SizeOf(ProcInfo);
if (Process32First(hSnapshot, ProcInfo)) then
begin
List.Add(ProcInfo.szExeFile);
while (Process32Next(hSnapShot, ProcInfo)) do
List.Add(ProcInfo.szExeFile);
end;
CloseHandle(hSnapShot);
end;
end;
procedure TAutoStart_frm.GetProcessList(var List: TstringList);
var
ovi: TOSVersionInfo;
begin
if List = nil then Exit;
ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(ovi);
case ovi.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List);
VER_PLATFORM_WIN32_NT: CreateWin9xProcessList(List);
end
end;
function TAutoStart_frm.EXE_Running(FileName: string; bFullpath: Boolean): Boolean;
var
i: Integer;
MyProcList: TstringList;
begin
MyProcList := TStringList.Create;
try
GetProcessList(MyProcList);
Result := False;
if MyProcList = nil then Exit;
for i := 0 to MyProcList.Count - 1 do
begin
if not bFullpath then
begin
if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then
Result := True
end
else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True;
if Result then Break;
end;
finally
MyProcList.Free;
end;
{exemplo de com usar}
procedure TAutoStart_frm.sBitBtn3Click(Sender: TObject);
begin
if apache.Checked then
if EXE_Running('apache.exe', False) then
else
ShellExecute(handle, 'open', 'Apache.bat', pchar(''),'Apache_Server', SW_SHOWNORMAL);
end;
Só falta o possal ae me ajudar com o outro topico q criei aqui
https://www.devmedia.com.br/forum/executar-aplicativo-em-delphi-oculto/425314
a minha duvida de como executar um aplicativo externo oculta me encinaram de tantas maneiras q fiquei até em duvida de qual usar em meu projeto mas já a duvida de como mostrar um aplicativo q já esta oculto ninguem consegui me ajudar.
Sera de alguem aqui poderia me ajudar?!
vou repetira a duvida :
tenho um form1 com dois botões
botão1 : executa um aplicativo externo em oculto
botão2 : mostra este aplicativo q esta oculto sem reiniciar ele.
não sei se me exprecei bem mas ta ae minha duvida ainda não resolvida...
agradeço a todos pela a teção
pesso desculpa pelos erro de portugues, era poque nas aula de português eu pulava o muro da escola para ir namorar "KKKK"...
Gostei + 0
11/10/2012
Thiago Schnell
se vc tem familiaridade com comobj vc pode usar vbscript fazer o mesmo processo porém menos trabalhoso.
Gostei + 0
11/10/2012
Cgm2k7 2013
se vc tem familiaridade com comobj vc pode usar vbscript fazer o mesmo processo porém menos trabalhoso.
Sou aprediz ainda não sei nada se vc postar ae um pequeno exemplo me ajudaria muito
vlw...
Gostei + 0
12/10/2012
Thiago Schnell
function RunAndWait(Filename:String): BOOL;
var
ProcessInfo: TProcessInformation;
StartupInfo: TStartupInfo;
ExitCode: DWORD;
begin
try
Result:= False;
Assert(FileExists(FileName));
GetStartupInfo(StartupInfo);
UniqueString(FileName);
if CreateProcess(nil, pChar(filename), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo) then
try
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
Assert(Win32Check(GetExitCodeProcess(ProcessInfo.hProcess, ExitCode ) ));
if ExitCode = NO_ERROR then
Result:= True
finally
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread );
end;
except
end;
end;
//declaracao do ponto inicio
label inicio;
begin
//desliga o timer para nao ter que repetir o codigo continuamente
TTimer(Sender).Enabled:=false;
//marcamos aqui um ponto chamado de inicio
INICIO:
showmessage('o programa sera executado');
//coloque aqui o caminho do programa que vc quer chamar
if RunAndWait('C:\windows\system32\calc.exe') then
//volta ao ponto que marcamos como inicio
goto inicio
else showmessage('algum erro aconteceu')
end;
Gostei + 0
13/10/2012
Cgm2k7 2013
function RunAndWait(Filename:String): BOOL;
var
ProcessInfo: TProcessInformation;
StartupInfo: TStartupInfo;
ExitCode: DWORD;
begin
try
Result:= False;
Assert(FileExists(FileName));
GetStartupInfo(StartupInfo);
UniqueString(FileName);
if CreateProcess(nil, pChar(filename), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo) then
try
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
Assert(Win32Check(GetExitCodeProcess(ProcessInfo.hProcess, ExitCode ) ));
if ExitCode = NO_ERROR then
Result:= True
finally
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread );
end;
except
end;
end;
//declaracao do ponto inicio
label inicio;
begin
//desliga o timer para nao ter que repetir o codigo continuamente
TTimer(Sender).Enabled:=false;
//marcamos aqui um ponto chamado de inicio
INICIO:
showmessage('o programa sera executado');
//coloque aqui o caminho do programa que vc quer chamar
if RunAndWait('C:\windows\system32\calc.exe') then
//volta ao ponto que marcamos como inicio
goto inicio
else showmessage('algum erro aconteceu')
end;
valeu mano
este vai servi pra meu projeto vlw mesmo ajudou muito grato...
Ma tenhum duvida se vc poder me ajudar?!
sempre q ele executa o aplicativo externo não poço mecher no meu form, tipo em qunado o aplicativo esta em execução não poço mechar em da no programa
Gostei + 0
14/10/2012
Thiago Schnell
coloque um button e dê 2x clique encima dele
troque o código por esse abaixo:
function ThreadProc(Param: Pointer): DWORD; stdcall; begin // coloque o codigo que vc uso dentro da timer aqui... form1.Timer1Timer(form1.Timer1); end; procedure TForm1.Button1Click(Sender: TObject); var Handle, Id: DWORD; begin Handle:= CreateThread(nil, 0, @ThreadProc, Self, 0, ID); end;
Gostei + 0
15/10/2012
Alisson Santos
Gostei + 0
15/10/2012
Mysql_2013
coloque um button e dê 2x clique encima dele
troque o código por esse abaixo:
function ThreadProc(Param: Pointer): DWORD; stdcall; begin // coloque o codigo que vc uso dentro da timer aqui... form1.Timer1Timer(form1.Timer1); end; procedure TForm1.Button1Click(Sender: TObject); var Handle, Id: DWORD; begin Handle:= CreateThread(nil, 0, @ThreadProc, Self, 0, ID); end;
Valeu mano muito obrigado mesmo deu serto aqui para o q eu queria vlw...
depois vou colocar o fote do programinha aqui pra galera iniciante q tiver a mesmas duvidas
Este programa q estou fazendo e pra executar um serve de wow q são 4 aplicativos "WorldServer.exe, AuthServer.exe, MySql_server.bat e Apache2.2_server.bat" com ajuda do amigo ae consegui fazer com que se algun deste alicativos for fechado ou der erro e se fechar automaticamente o programinha q criei executa eles novamente.
Só faltou a duvida de como mostrar aplicativo oculto.
mas tudo bem desisti vou finalizar sem este mesmo , agradeço atodos q me ajudaram..
Poblema resolvido...
Gostei + 0
15/10/2012
Mysql_2013
Sim vlw mano
só a duvida de como executar um aplicativo externo oculto q ninguem consegui resolver
Executar oculto ja consegui de varias maneira mas mostrar o aplicativo oculto q não consegui
Gostei + 0
16/10/2012
Alisson Santos
Gostei + 0
16/10/2012
Mysql_2013
é este q estou querendo saber mano
Gostei + 0
17/10/2012
Alisson Santos
formulario.show
Gostei + 0
17/10/2012
Mysql_2013
formulario.show
não é minha propria aplicação e ssim um aplicação externa
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)