Jump to content

click.png click.png click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

Código para identificar se o ACBrMonitorPLUS está aberto


atlantisnanet
Go to solution Solved by Celso Marigo Junior,
  • Este tópico foi criado há 1748 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 to comment
Share on other 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 to comment
Share on other 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; 

 

  • Like 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 to comment
Share on other 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!

  • Like 1

Pablo Ferreira .·.

Programador Delphi/Visual Basic

Atlantis Informática

Link to comment
Share on other 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 to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.