Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
juninhoted Aprendiz

Registrado: Domingo, 1 de Outubro de 2006 Mensagens: 139
|
Enviada: Ter Ago 23, 2011 9:29 am Assunto: Verificar se o programa se encontra aberto.RESOLVIDO |
|
|
Tenho um sistema na empresa feito em Delphi 7 e gostaria que fosse permitido abri-lo somente uma instancia por máquina, ou seja. se o usuário clicar no exe do programa ele irá abrir, e se clicar novamente verificar se ele ja se encontra aberta e informar que ele ja se enconta em execução.
Alguém pode me ajudar?
Editado pela última vez por juninhoted em Qui Ago 25, 2011 8:22 am, num total de 1 vez |
|
Voltar ao Topo |
|
 |
marcosalles Moderador

Registrado: Quarta-Feira, 26 de Março de 2008 Mensagens: 1695 Localização: Muriaé Mg
|
Enviada: Ter Ago 23, 2011 1:07 pm Assunto: |
|
|
Gosto muito de Mutex . Procure por _________________ http://marcosalles.wordpress.com
Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral |
|
Voltar ao Topo |
|
 |
CesarRocha Mestre

Registrado: Segunda-Feira, 30 de Mai de 2011 Mensagens: 794 Localização: São Paulo - SP
|
Enviada: Ter Ago 23, 2011 2:15 pm Assunto: Re: Verificar se o programa se encontra aberto. |
|
|
juninhoted escreveu: | Tenho um sistema na empresa feito em Delphi 7 e gostaria que fosse permitido abri-lo somente uma instancia por máquina, ou seja. se o usuário clicar no exe do programa ele irá abrir, e se clicar novamente verificar se ele ja se encontra aberta e informar que ele ja se enconta em execução.
Alguém pode me ajudar? |
Uma das formas de fazer isso:
Declarar a função:
Código: | function fSys_AppIsRunning( ActivateIt:boolean ) : Boolean; |
Código: | // Testa se a sua aplicacao já esta sendo executada.
function TForm1.fSys_AppIsRunning( ActivateIt:boolean ) : Boolean;
var
hSem : THandle;
hWndMe : HWnd;
AppTitle: string;
begin
Result := False;
AppTitle := Application.Title;
hSem := CreateSemaphore(nil, 0, 1, pChar(AppTitle) );
if ((hSem <> 0) AND (GetLastError() = ERROR_ALREADY_EXISTS)) then
begin
CloseHandle(hSem);
Result := True;
end;
if Result and ActivateIt then
begin
Application.Title := 'zzzzzzz';
hWndMe := FindWindow(nil, pChar(AppTitle));
if (hWndMe <> 0) then
begin
if IsIconic(hWndMe) then
ShowWindow(hWndMe, SW_SHOWNORMAL)
else
SetForegroundWindow(hWndMe);
end;
end;
end; |
Modo de usar:
Código: | procedure TForm1.FormCreate(Sender: TObject);
begin
// CONTROLE DE RECARGA DA APLICAÇÃO.
if fSys_AppIsRunning(true) then
Application.Terminate;
end; |
Espero que seja útil. |
|
Voltar ao Topo |
|
 |
|