Eu utilizo o seguinte codigo no view do projeto...

ele verifica se está aberto, caso não esteja ele libera para abrir...

  CreateSemaphore(nil, 1, 1, 'NomedoProjeto');
  If GetLastError = Error_Already_Exists then
  begin
        hdlAplicacao := FindWindow('TFrm_Menu','Frm_Menu');
                if not isWindowVisible(hdlAplicacao) then
                      Application.MessageBox('Aplicativo já em execução 
!','Aviso',mb_IconWarning + mb_ok);

Espero que te ajude.


Ricardo Mendes
Departamento de Informática
Tel. (41) 2109-7736
E-mail: [EMAIL PROTECTED] 
Site: www.totalsat.com.br 

  ----- Original Message ----- 
  From: Alisson 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Wednesday, April 30, 2008 10:52 AM
  Subject: [delphi-br] Impedir mais de 1 execução do programa 


  Pessoal, criei uma rotina para impedir que o programa seja executado mais 
  de uma vez. Ao abrir o programa pela segunda vez deveria piscar o programa 
  na barra de tarefas e trazer a tela pra frente, mas como abre 2 programas na 
  barra de tarefas, é executado a rotina com o que foi aberto por último. 
  Preciso que execute a rotina para o que foi aberto primeiro. Uso o código 
  abaixo:

  CreateMutex(nil, TRUE, 'NOMEDOPROGRAMA');
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
  Beep(100, 100);
  H := FindWindow(nil, 'NOMEDOPROGRAMA');
  ShowWindow(H, SW_RESTORE);//mostra a janela
  SetForegroundWindow(H);//traz pra frente
  FlashWindow(H, True); //Pisca o programa na barra de tarefas
  MessageBox(0, 'O programa já está aberto!', 'Sivap', mb_OK + 
  mb_IconWarning);
  Application.Terminate;
  end; 


  _______________________________________________________ 
  Yahoo! Mail - Sempre a melhor opção para você! 
  Experimente já e veja as novidades. 
  http://br.yahoo.com/mailbeta/tudonovo/




   

[As partes desta mensagem que não continham texto foram removidas]

Responder a