Ricardo_PF Postado Julho 27, 2006 Denunciar Share Postado Julho 27, 2006 Boa tarde,alguém saberia me dizer se há uma maneira de saber se o sistema que eu fiz, quando abrir, detectar se já está em execução no mesmo computador.Ou seja, não quero deixar que o usuário abra duas vezes o programa no mesmo computador.Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Moraes Postado Julho 28, 2006 Denunciar Share Postado Julho 28, 2006 //Como saber se o aplicativo já foi aberto //Insira o código abaixo dentro do arquivo .DPR de sua aplicação {$R *.RES} begin Application.Title := ''; //coloque o titulo do aplicativoApplication.HelpFile := ''; //o arquivo de ajudaif HPrevInst = 0 then begin F_Splash := TF_Splash.create(Application); F_Splash.Show; Application.CreateForm(TF_Menu, F_Menu); Application.CreateForm(TF_Error, F_Error); Application.CreateForm(TF_Form1, F_From1); Application.CreateForm(TF_Form2, F_Form2j); Application.Run; end else messagedlg('O sistema já foi inicializado!',mtinformation,[mbok],0); end. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ricardo_PF Postado Julho 28, 2006 Autor Denunciar Share Postado Julho 28, 2006 Hum... não consegui fazer funcionar dessa maneira.Está rodando em Windows XP, pode ser por isso?Pelo que notei, todas as vezes que eu executo o sistema o HPrevInst vale 0. Indiferente se o programa já foi aberto uma, duas ou mais vezes e está em execução.Vlw. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Julho 30, 2006 Denunciar Share Postado Julho 30, 2006 Ricardo_PF,Costumo usar nos meus programas a idéia abaixo, que serve para o XP.Veja se ajuda... Crie um Mutex no seu .dpr, ou seja, clique no menu PROJECT, submenu VIEW SOURCE e coloque o código abaixo. É importante acrescentar na USES: Windows e Messages. uses Forms, Windows, Messages, .... .... var hMutex:THandle; JanelaPrincipal:THandle; //Variável que vai jogar a janela para frente se estiver escondida. begin hMutex := 0; JanelaPrincipal:=FindWindow('TForm1','Aqui o caption da janela principal do programa'); try hMutex := CreateMutex(nil, true, 'Só Chama uma vez'); if GetLastError = ERROR_ALREADY_EXISTS then begin MessageBox(0,'O programa "coloque aqui o nome do seu programa" já se encontra em execução!'+#13+#10+'Não é necessário que este programa esteja aberto duas vezes.','PROGRAMA JÁ ABERTO',MB_IconExclamation); CloseHandle(hMutex); end else begin Application.Initialize; Application.CreateForm(...);//aqui depende de quantos forms estão sendo criados no seu programa. //coloque todas as criações aqui. Application.Run; end; finally ReleaseMutex(hMutex); SetForegroundWindow(JanelaPrincipal); // Função que coloca o form principal na frente de tudo. end; end. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Agosto 8, 2006 Denunciar Share Postado Agosto 8, 2006 Paulo NobreMuito boa a sua solução..[]'sJoão PauloPaulo Nobre Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ricardo_PF
Boa tarde,
alguém saberia me dizer se há uma maneira de saber se o sistema que eu fiz, quando abrir, detectar se já está em execução no mesmo computador.
Ou seja, não quero deixar que o usuário abra duas vezes o programa no mesmo computador.
Obrigado.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.