Executavel. Como saber se esta sendo usado ?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

acf125
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 14 Out 2005 11:30

Executavel. Como saber se esta sendo usado ?

Mensagem por acf125 »

Olá a todos, gostaria de saber se no windows(Versao qualquer um) há alguma forma de saber se o programa ja esta sendo executado pelo computador.

Grato.
Antonio
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Até o Windows 98 é facil, agora de Windows 2000 e XP, é complicado pois estes sistemas alocam uma area diferente da memoria cada vez que o sistema é executado.
Neste fórum existem tópicos imensos discutindo este assunto, procure dar uma olhada.
Krinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 10 Dez 2004 11:42
Localização: Brasília-DF

Mensagem por Krinski »

Antonio, eu utilizo um recurso bem idiota mas funciona blz.

no seu programa principal voce faz:

if file("Emuso.lan")
alert("Este programa já está em uso em outra tela")
cls:quit
else
X_Teste="Estou em uso"
save to Emuso.lan all like X_Teste
endif

na sua rotina de sair do sistema voce faz
erase Emuso.lan

Fácil não...

Só tem um problema!
Se o micro reinicializar no meio da aplicacao o arquivo Emuso.Lan estará lá e nao deixará que a proxima chamada seja realizada... neste caso tem que haver uma valvula de escape

mas funciona blz...
nao esqueca de colocar o comando setcancel(.f.) para nao deixar sair com alt+c.


--
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

EVITAR EXECUTAR EM MULTI-SESSÃO

Mensagem por Pablo César »

Krinski escreveu:Só tem um problema!
Se o micro reinicializar no meio da aplicacao o arquivo Emuso.Lan estará lá e nao deixará que a proxima chamada seja realizada... neste caso tem que haver uma valvula de escape
Só colocar no autoexec.bat para deletar:

IF EXIST C:\PASTA_ONDE_ESTA_O_SISTEMA\EMUSO.LAN DEL C:\PASTA_ONDE_ESTA_O_SISTEMA\EMUSO.LAN

Mas de todas formas, eu não sou muito a favor deste tipo de recurso não é muito seguro. Pois basta os sistema dar erro ou ser abortado pelo usuário (fechando a janela do WINDOWS com o X). O caminho mais acertado seria ler a memória ou alguma forma de saber se a janela do WINDOWS está aberta. O nosso colega MALIGNO, está vendo uma possibilidade de fazer um LIB. Esperemos talvez algum iluminado consiga cumprir essa proeza.

Um clip-abraço
#-)
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

Eu uso esta funcao no xp

Código: Selecionar todos


If ! TravaJan()
      Cls
      Quit
EndIf


**********************************
Function TravaJan()

	if ! file("C:\DBF1\CONTROLE.SYS")
   	errhandle:= fcreate("C:\DBF1\CONTROLE.SYS", 0)
	   fwrite(errhandle,"[ Arquivo de Controle do Sistema ]")
	   FClose(errhandle)
	   errhandle:= fopen("C:\DBF1\CONTROLE.SYS",2+16)
	else
		errhandle:= fopen("C:\DBF1\CONTROLE.SYS",2+16)
   	if ferror() != 0
   		Cls
      	Alert("O Sistema ja esta sendo executado! Olhe na barra de tarefa...")
      	Return(.f.)
   	endif
   EndIf
	Return(.t.)
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Responder