Fórum Verificar se um determinado programa está aberto #278331
21/04/2005
0
Eu tenho visto neste fórum algumas rotinas que permitem descobrir quais os programas que estão abertos, existe até uma maneira de fechar os mesmos programas caso que estejam abertos. Mas o que eu preciso saber se um determinado executável está em execução. Exemplo: Eu tenho uma aplicação que o nome dela é Módulo Gestor de Material, o nome do executável MGM.EXE. Existe alguma maneira verificar essa aplicação está em execução pelo nome executável? Alguma que eu pudesse checar pelo nome do executável? Semelhando ao que aparece no gerenciador de tarefas do windows na aba Processos.
Agradeço a quem puder, me ajudar.
Chmeireles
Curtir tópico
+ 0Posts
21/04/2005
Antoniologica
Você pode tentar renomear o executável, se o Windows permitir é porque o programa não está sendo executado no momento, e depois volta o nome dele novamente.
Gostei + 0
21/04/2005
Rodc
[url]http://forum.devmedia.com.br/viewtopic.php?t=49290&highlight=execut¬E1vel+handle&sid=89ed27d44514588c753c8b214ea7909e[/url]
Gostei + 0
21/04/2005
Marco Salles
http://forum.devmedia.com.br/viewtopic.php?t=60180&highlight=handle&sid=e75d156eec7714716ca7ebfd11415faf
Function VerficarSeAplicaticoEstarRodandoPeloNomeDoExecutavel(Nome:String):Boolean; var rId:array[0..999] of DWord; i,NumProc,NumMod:DWord; HProc,HMod:THandle; sNome:String; Tamanho, Count:Integer; sNomeTratado:String; begin result:=False; SetLength(sNome, 256); // Aqui vc pega os IDs dos processos em execução EnumProcesses(@rId[0], 4000, NumProc); // Aqui vc faz um for p/ pegar cada processo for i := 0 to NumProc div 4 do begin // Aqui vc seleciona o processo HProc := OpenProcess(Process_Query_Information or Process_VM_Read, FALSE, rId[i]); if HProc = 0 then Continue; // Aqui vc pega os módulos do processo // Como vc só quer o nome do programa, então será sempre o primeiro EnumProcessModules(HProc, @HMod, 4, NumMod); // Aqui vc pega o nome do módulo; como é o primeiro, é o nome do programa GetModuleBaseName(HProc, HMod, @sNome[1], 256); sNomeTratado := trim(sNome); Tamanho:=Length(SnomeTratado); Count:=1; While Count <= Tamanho do begin if SnomeTratado[Count]= ´´ Then Break; count:=Count+1; end; sNomeTratado:=Copy(SnomeTratado,1,Count-1); if AnsiUpperCase(sNomeTratado)=AnsiUpperCase(Nome) Then Result:=True; // Aqui vc libera o handle do processo selecionado CloseHandle(HProc); end; end;
[b:77503e3d0c]para Chamar a Função tente :[/b:77503e3d0c]
procedure TForm1.Button3Click(Sender: TObject); begin if VerficarSeAplicaticoEstarRodandoPeloNomeDoExecutavel(´CalC.EXE´) Then showmessage(´Esta Rodando´) else Showmessage(´Não esta Rodando´); end;
Gostei + 0
21/04/2005
Chmeireles
Ajudou-me bastante!
Gostei + 0
08/07/2005
Dpinho
Alguem poderia me ajudar
Tentei utilizar a linha abaixo mas não deu nada, estou testando com o msn
TerminateProcess(OpenProcess($0001,false,processo),0);
grato
Gostei + 0
08/07/2005
Kapak
Provavelmente vc não está conseguindo um Handle no OpenProcess.
Execute em duas etapas e veja se dá alguma mensagem:
var H:THandle; begin H := OpenProcess($0001,false,processo); if H = 0 then ShowMessage(SysErrorMessage(GetLastError)) else if not TerminateProcess(H, 0) then ShowMessage(SysErrorMessage(GetLastError)); end;
Gostei + 0
08/07/2005
Marco Salles
[b:2901aba6dd]Porque não fecha após o teste [/b:2901aba6dd] :?: :?: :?:
procedure TForm1.Button3Click(Sender: TObject);
begin
if VerficarSeAplicaticoEstarRodandoPeloNomeDoExecutavel(´CalC.EXE´) Then
begin
showmessage(´Esta Rodando´) ;
Fechar
end
else
Showmessage(´Não esta Rodando´);
end;
Gostei + 0
16/07/2005
Dpinho
[b:bf0f1ffc29]Porque não fecha após o teste [/b:bf0f1ffc29] :?: :?: :?:
procedure TForm1.Button3Click(Sender: TObject);
begin
if VerficarSeAplicaticoEstarRodandoPeloNomeDoExecutavel(´CalC.EXE´) Then
begin
showmessage(´Esta Rodando´) ;
Fechar
end
else
Showmessage(´Não esta Rodando´);
end;[/quote:bf0f1ffc29]
Estou utilizando assim mesmo e retornar que o processo esta aberto porem não fecha quano o caso é messeger
Gostei + 0
16/07/2005
Marco Salles
Como voce esta chamando a função , isto é , qual o nome do executável
:?: :?: :?: :?:
e qual a instrução que voce esta usando para fechar este executável
:?: :?: :?: :?: :?:
em sintase , dispoe esse código para a gente
Gostei + 0
08/09/2015
Mário Reis
Tento usar esta aplicação numa rede local e não funciona! Tenho a apilicção correndo num servidor Windows Small Business Server 2008 em uma pasta partilhada com atalhos para os executáveis(Delphi XE+FB2.5.4) chamados a partir de estações cliente. Tentei actualizar esse executável, porém, sem sucesso porque estava sendo utilizado em uma outra aplicação. Depois de correr o "Gestor de Tarefas do Windows7 e 8.1" em cada uma delas não aparecia na lista de processos activos de nenhuma delas.
A solução foi ir abatendo uma a uma e ir tentando até que aquela que estava a prende-lo caiu e o executável foi então substituído no Sever com sucesso.
Fui à procura de uma solução para prevenir-me contra estas situações e encontrei este código que tento usar porém sem sucesso!? Deveria funcionar?
O que estarei a fazer mal? Que mais posso tentar? Obrigado
Mário Reis
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)