Página 1 de 1

Executavel. Como saber se esta sendo usado ?

Enviado: 21 Ago 2006 12:03
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

Enviado: 21 Ago 2006 19:35
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.

Enviado: 22 Ago 2006 20:49
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.


--

EVITAR EXECUTAR EM MULTI-SESSÃO

Enviado: 25 Ago 2006 08:07
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
#-)

Enviado: 31 Ago 2006 08:25
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.)