Ir para conteúdo
  • Cadastre-se

dev botao

Código para identificar se o ACBrMonitorPLUS está aberto


Ver Solução Respondido por Celso Marigo Junior,
  • Este tópico foi criado há 2660 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá pessoal!

Estou tentando fazer com que meu programa identifique se o monitor está aberto, se não estiver ele abre automaticamente, estou tentando o seguinte:

{Verifica se o ACBrMonitor está aberto}
If FindWindow('ACBrMonitorPLUS', nil) > 0 then
begin
WinExec('C:\ACBrMonitorPLUS\ACBrMonitor.exe',SW_SHOW);
end;

Mas não está dando certo... Acredito que só esteja faltando o nome do form correto depois do findwindow, alguém pode me ajudar?

Desde já agradeço!

Pablo Ferreira .·.

Programador Delphi/Visual Basic

Atlantis Informática

Link para o comentário
Compartilhar em outros sites

Da forma abaixo funciona com certeza, só falta mesmo o nome do form:

{Verifica se o ACBrMonitor está aberto}
If FindWindow('ACBrMonitorPLUS', nil) = 0 then
begin
WinExec('C:\ACBrMonitorPLUS\ACBrMonitor.exe',SW_SHOW);
end;
{Fim}

Mudei o nome ali para OpusApp que é o nome do Word para testar, e deu certo. Só falta mesmo ver o nome do ACBrMonitorPLUS mesmo.

Pablo Ferreira .·.

Programador Delphi/Visual Basic

Atlantis Informática

Link para o comentário
Compartilhar em outros sites

  • Solution

O ACBrMonitorPLUS usa um mutex para impedir multiplas instâncias, tente usar ele, fiz um pequeno exemplo rápido:

uses
  ..., windows, Process;

procedure TForm1.Button1Click(Sender: TObject);
var
  AProcess : TProcess;
  hnd : THANDLE;
begin
  hnd := CreateMutex(nil, True, 'ACBrMonitor');
  if GetLastError = ERROR_ALREADY_EXISTS then
    MessageDlg('ACBrMonitor','O programa ACBrMonitor já está em execução',
        mtError, [mbOK], 0)
  else
  begin
    CloseHandle(hnd);
    AProcess := TProcess.Create(nil);
    AProcess.Executable := 'c:\ACBrMonitorPLUS\ACBrMonitor.exe';
    AProcess.Execute;
  end;
end; 

 

  • Curtir 1
Consultor SAC ACBr

Celso Marigo Junior

Conheça o Portal do Projeto ACBr
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

 

Link para o comentário
Compartilhar em outros sites

Muito obrigado Celso!

Mas só falta o nome do form para funcionar... por exemplo se o nome for Form1 ali é só colocar TForm1...

Será que alguém aí não consegue me passar o nome do form? Acredito que seja o form principal do projeto.

Pablo Ferreira .·.

Programador Delphi/Visual Basic

Atlantis Informática

Link para o comentário
Compartilhar em outros sites

Celso e Daniel, muito obrigado vocês tem razão, ficou assim:

 hnd : THANDLE;

{Verifica se o ACBrMonitor está aberto, se não está abre o mesmo}
hnd := CreateMutex(nil, True, 'ACBrMonitor');
If GetLastError = ERROR_ALREADY_EXISTS then
begin
//MessageDlg('ACBrMonitor','O programa ACBrMonitor já está em execução',
//mtError, [mbOK], 0)
end
else
begin
WinExec('C:\ACBrMonitorPLUS\ACBrMonitor.exe',SW_SHOW);
end;

Ela é útil pra o caso de por algum motivo desconhecido, o monitor não inicializar com o windows.

Funcionou perfeitamente como eu queria, valeu!

  • Curtir 1

Pablo Ferreira .·.

Programador Delphi/Visual Basic

Atlantis Informática

Link para o comentário
Compartilhar em outros sites

Ôpa tinha faltado o CloseHandle(hnd), então ficou assim:

{Verifica se o ACBrMonitor está aberto, se não está abre o mesmo}
hnd := CreateMutex(nil, True, 'ACBrMonitor');
If GetLastError = ERROR_ALREADY_EXISTS then
begin
//MessageDlg('ACBrMonitor','O programa ACBrMonitor já está em execução',
//mtError, [mbOK], 0)
end
else
begin
CloseHandle(hnd);
WinExec('C:\ACBrMonitorPLUS\ACBrMonitor.exe',SW_SHOW);
end;

Agora sim!

Pablo Ferreira .·.

Programador Delphi/Visual Basic

Atlantis Informática

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.