GARANTIR DESCONTO

Fórum Verificar se um determinado programa está aberto #278331

21/04/2005

0

Senhores,

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

Chmeireles

Responder

Posts

21/04/2005

Antoniologica

Um alternativa...

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.


Responder

Gostei + 0

21/04/2005

Rodc

Veja se este post lhe ajuda:
[url]http://forum.devmedia.com.br/viewtopic.php?t=49290&highlight=execut¬E1vel+handle&sid=89ed27d44514588c753c8b214ea7909e[/url]


Responder

Gostei + 0

21/04/2005

Marco Salles

P:S Da dica pstada pelo Kapak em :

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;



Responder

Gostei + 0

21/04/2005

Chmeireles

Valeu amigão!

Ajudou-me bastante!


Responder

Gostei + 0

08/07/2005

Dpinho

preciso utilizar esta função, mas gostaria de acrescentar um linha antes do result fechando o processo (encerrado o programa).
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


Responder

Gostei + 0

08/07/2005

Kapak

Tentei utilizar a linha abaixo mas não deu nada, estou testando com o msn TerminateProcess(OpenProcess($0001,false,processo),0);

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;



Responder

Gostei + 0

08/07/2005

Marco Salles

preciso utilizar esta função, mas gostaria de acrescentar um linha antes do result fechando o processo (encerrado o programa).


[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;


Responder

Gostei + 0

16/07/2005

Dpinho

[quote:bf0f1ffc29=´Marco Salles´]
preciso utilizar esta função, mas gostaria de acrescentar um linha antes do result fechando o processo (encerrado o programa).


[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


Responder

Gostei + 0

16/07/2005

Marco Salles

Estou utilizando assim mesmo e retornar que o processo esta aberto porem não fecha quano o caso é messeger


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


Responder

Gostei + 0

08/09/2015

Mário Reis

Amigos,

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar