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á 2881 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...