Cleverson Honório Gouvêa Postado Junho 3, 2009 Denunciar Share Postado Junho 3, 2009 Aew galera, é o seguinte... eu preciso de uma idéia de como fazer isso:Tenho uma aplicação com um módulo principal que controla todos os meus aplicativos, preciso quequando um aplicativo meu estiver rodando, a minha aplicação receba um "enable := false" e só voltepara true quando esse processo for finalizado...Isso para que o usuário não saia abrindo vários aplicativos diferentes...Os meus aplicativos já não podem ser abertos se o módulo principal não estiver aberto...Será que alguém pode me auxiliar !? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Junho 3, 2009 Denunciar Share Postado Junho 3, 2009 (editado) OpaO que você pode fazer é usar Mutex ou Semáforos...eu aconselho Mutex e acredito que desta forma voce não precisa de um controlador, tipo um monitor como havia mencionado...exemplo, nos seus aplicativos voce coloca, em todos eles...function MutexExiste(const szMagic: String): Boolean; var hMutex: THandle; begin hMutex := CreateMutex(nil, True, PChar(szMagic)); Result := LongBool(hMutex) and (GetLastError = ERROR_ALREADY_EXIST); if LongBool(hMutex) then CloseHandle(hMutex); end; Coloque o código abaixo no fonte do seu programa, através do menu "Project > View Source" logo na primeira linha depois do begin... var hMutex: THandle; begin if MutexExiste('palavra_magica') then begin //já tem um aplicativo rodando e faz o que deseja fazer, tipo uma mensagem sei la Halt; end; //não tem nenhum aplicativo rodando, então podemos rodar esse e bloquear os proximos hMutex := CreateMutex(nil, True, 'palavra_magica'); //Descomenta abaixo caso queira tratar se der erro ao criar mutex, nunca aconteceu comigo rs //if hMutex = 0 then //deu erro então faca o que termine o aplicativo com um Halt? :( Application.CreateForm... ... Application.Initialize; Application.Run; //aqui o programa esta se fechando, vamos liberar para ser possivel abrir outro programa... CloseHandle(hMutex); end.Troque a palavra magica por algo seu, tipo sei la nome do seu cachorro, só não coloque caracteres especiais tipo acento, virgula, e tal, usa texto limpo e sem traços, underline pode tipo "script_brasil"Lembrando que pra todos os programas precisa ser a mesma palavra mágica, o segredo é que ela vai ser armazenada na memória e quando outro programa seu abre, a funcao MutexExiste retorna que já ta armazenada, ou seja, já tem algum outro programa seu aberto e não permite a execução...espero que tenha entendido rsabraxx Editado Junho 3, 2009 por Churc Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 JorgeOliveira@17 Postado Abril 6, 2019 Denunciar Share Postado Abril 6, 2019 Olá, preciso usar semaforos e monitores em delphi, não sei como. para controlar o acesso de threads. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 8, 2019 Denunciar Share Postado Abril 8, 2019 Exemplos: https://www.google.com.br/search?source=hp&ei=r9-rXKLLJOvC5OUP4MSB8Aw&q=mutex+delphi&o que=mutex+&gs_l=psy-ab.1.8.0l10.1440.3738..7738...0.0..0.124.666.0j6......0....1..gws-wiz.....0..0i131.pwrz_XR_QaQ abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Cleverson Honório Gouvêa
Aew galera, é o seguinte... eu preciso de uma idéia de como fazer isso:
Tenho uma aplicação com um módulo principal que controla todos os meus aplicativos, preciso que
quando um aplicativo meu estiver rodando, a minha aplicação receba um "enable := false" e só volte
para true quando esse processo for finalizado...
Isso para que o usuário não saia abrindo vários aplicativos diferentes...
Os meus aplicativos já não podem ser abertos se o módulo principal não estiver aberto...
Será que alguém pode me auxiliar !?
Link para o comentário
Compartilhar em outros sites
3 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.