Impedir que o sistema abra várias vezes
Moderador: Moderadores
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Impedir que o sistema abra várias vezes
Bom dia pessoal...
Gostaria de saber como impedir que o usuário abra o sistema várias vezes no windows atraves do atalho...sem mais obrigado..
Josmar
Gostaria de saber como impedir que o usuário abra o sistema várias vezes no windows atraves do atalho...sem mais obrigado..
Josmar
- rochinha
- Administrador

- Mensagens: 4665
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Este foi um assunto amplamente discutido no forum com muitos exemplos apresentados, mas na busca do forum não me lembro de uma palavra chave para encontra-la.
Se voce usa o BLINKER pode fazer isto:
Caso precise de algo mais elaborado:
Ou use isto:
Para usar esta ultima opção em rede, troque a palavra ativo.atv pela string que devolve o serial do hd.
@braços :?)
Este foi um assunto amplamente discutido no forum com muitos exemplos apresentados, mas na busca do forum não me lembro de uma palavra chave para encontra-la.
Se voce usa o BLINKER pode fazer isto:
Código: Selecionar todos
enable = .t.
disable = .f.
for i = 1 to 5
if ! SWPGETPID("sistema.exe") // Se o programa nao estiver rodando
SWPSETPID("sistema.exe") // Marca-lo em memoria como ativo
endif
next
if SWPGETPID("nf.exe") // Se o programa ja estiver rodando
clear screen
? "Aplicativo ja esta em uso NESTA estacao."
? "(Digite EXIT para retornar)"
? " "
QUIT
else
SWPSETPID("nf.exe") // Marca-lo em memoria como ativo
endif
...
Código: Selecionar todos
FUNCTION SESSAO2( MO_DO )
IF !FILE("SESSAO.DBF")
ESTRU_DBF := {}
AADD( ESTRU_DBF, { "ESTACAO" , "C", 8, 0 } )
AADD( ESTRU_DBF, { "DATA" , "D", 8, 0 } )
AADD( ESTRU_DBF, { "HORA" , "C", 8, 0 } )
AADD( ESTRU_DBF, { "SITUACAO" , "N", 1, 0 } )
DBCREATE( "SESSAO", ESTRU_DBF )
ENDIF
M->ESTACAO := HDSERIAL()
USE SESSAO SHARED
LOCATE FOR ESTACAO = M->ESTACAO
IF MO_DO = 'ON'
IF !FOUND()
APPEND BLANK
SESSAO->ESTACAO := M->ESTACAO
SESSAO->DATA := DATE()
SESSAO->HORA := TIME()
SESSAO->SITUACAO := 1 // 1 Aberto 0 Fechado
COMMIT
ELSE
IF SESSAO->SITUACAO = 0
SESSAO->DATA := DATE()
SESSAO->HORA := TIME()
SESSAO->SITUACAO := 1 // 1 Aberto 0 Fechado
COMMIT
ELSE
CLS
@ 02,00 SAY "O Sistema ja esta sendo executado..."
RETURN .F.
ENDIF
ENDIF
ELSE
IF !FOUND()
APPEND BLANK
SESSAO->ESTACAO := M->ESTACAO
SESSAO->DATA := DATE()
SESSAO->HORA := TIME()
SESSAO->SITUACAO := 0 // 1 Aberto 0 Fechado
COMMIT
ELSE
RLOCK()
SESSAO->DATA := DATE()
SESSAO->HORA := TIME()
SESSAO->SITUACAO := 0 // 1 Aberto 0 Fechado
COMMIT
ENDIF
ENDIF
RETURN .T.
Código: Selecionar todos
...
if file("ativo.atv") // Se o arquivo existe
ferase("ativo.atv") // tentara apaga-lo
if ferror() > 0 // Se nao conseguiu é porque ja esta em uso
? 'Sistema em uso. Impossivel abrir'
quit
endif
errHD := fCreate( "ativo.atv" ) // Cria o arquivo
// Abre o mesmo e deixa-o aberto enquanto o sistema estiver ativo
fOpen( errHD, 1 )
endif
...
@braços :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Atalho
Ola Rochinha..Sim, de fato eu andei procurando alguma coisa a respeito desse topico, mas te confesso que não encontrei.
Em relação as suas dicas, vou testa-las no meu sistema....
Fico muito grato ..
Um abraço..Josmar
Em relação as suas dicas, vou testa-las no meu sistema....
Fico muito grato ..
Um abraço..Josmar
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Rochinha...
Muito me interessou o seu 1o. exemplo porém... fiz o teste e nada aconteceu... assim como tbm não entendi o prq das variáveis "enable" e "disable" uma vez que vc não faz referencia a elas em nenhum momento durante o exemplo e o prq tbm do "for/next"...
Poderia explicar ?? Estaria faltando alguma coisa ??
Grato...
Muito me interessou o seu 1o. exemplo porém... fiz o teste e nada aconteceu... assim como tbm não entendi o prq das variáveis "enable" e "disable" uma vez que vc não faz referencia a elas em nenhum momento durante o exemplo e o prq tbm do "for/next"...
Poderia explicar ?? Estaria faltando alguma coisa ??
Grato...
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
- rochinha
- Administrador

- Mensagens: 4665
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinhos
Os codigos postados foram tirados de alguns .PRGs que possuo aqui e portanto não testei, apenas olhei e postei.
Mas aqui esta a verificação e solução para o travamento:
Foi testado no Windows 2003 Server em duas janelas DOS abertas em uma unica maquina.
@braços :?)
Os codigos postados foram tirados de alguns .PRGs que possuo aqui e portanto não testei, apenas olhei e postei.
Mas aqui esta a verificação e solução para o travamento:
Código: Selecionar todos
...
if !file("ativo.atv")
// Se o arquivo nao existe, cria-o
errhandle = fcreate("ativo.atv")
fwrite(errhandle,"ATV=01")
else
// Se o arquivo existe tentara apaga-lo
ferase("ativo.atv")
if ferror() > 0 // Se nao conseguiu é porque ja esta em uso
? 'Sistema em uso. Impossivel abrir'
quit
endif
endif
// Abre o mesmo e deixa-o aberto enquanto o sistema estiver ativo
errhandle = fopen("ativo.atv",2)
...
// Resto do sistema
@braços :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Bem... depois de tantos exemplos (e realmente nenhum deles funcionou no XP) com base em um deles, eu fiz um, simplezinho, que funciona... o único problema é que se o sistema for "abortado" babau...
Mas é claro que, com boa vontade e usando de outros métodos esse problema pode ser solucionado...
Notem que o arquivo "SESSAO.DBF" é criado/excluido no HD da estação...
Mas é claro que, com boa vontade e usando de outros métodos esse problema pode ser solucionado...
Código: Selecionar todos
IF !FILE("c:\SESSAO.DBF")
ESTRU_DBF := {}
AADD( ESTRU_DBF, { "log" , "C", 1, 0 } )
DBCREATE( "c:\SESSAO", ESTRU_DBF )
ELSE
alert('Já existe uma janela do sistema aberta - Verifique')
clear
quit
ENDIF:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
A rotina abaixo funciona bem, porém não pode haver nenhum Close Databases ou DbCloseAll() durante a execução do programa.
Código: Selecionar todos
If !File('STATUS.DBF')
aStructure:={}
AADD(aStructure,{'STATUS', 'L', 01, 0})
DbCreate('Status.DBF',aStructure)
EndIf
DbUseArea(.T.,NIL,'STATUS.DBF',NIL,.F.,.F.)
If NetErr()
Alert('O programa ja esta aberto em outra janela! Pressione qualquer tecla e, apos, maximize-o, com o mouse, na barra de tarefas...', )
Quit
Else
Use Status New
EndIf
Editado pela última vez por Pablo César em 23 Mar 2013 04:53, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
abrir varias
Caros colegas, se vocês que ja sâo veteranos, estão batendo cabeça, imagine eu que sou iniciante.
mas confesso a vocês que estou anotando todos esses exemplos que vocês estão colocando no tópico..
Josmar
mas confesso a vocês que estou anotando todos esses exemplos que vocês estão colocando no tópico..
Josmar
Josmar,
Eu uso o Clipper 52 e o Blinker 51, e em todos os meus programas tem um tréco que mata esse problema e que funciona em qualquer Windows (98 / ME / XP e 2000): no começo do programa principal, eu abro o próprio EXE, em modo "exclusivo".
Por exemplo, se o seu programa principal se chama APP.EXE e está na pasta CLIENTEX, bota o seguinte no começo dele:
arq1=fopen("c:\clientex\app.exe",2)
if arq1=-1
quit
endi
Roda o EXE e, se você tentar abrir o mesmo EXE em outra janela, vai dar "acesso negado".
No final do seu programa, inclua:
arq1=fclose(arq1)
Faltou luz? Teve que dar um RESET? Sem problemas. Quando reiniciar, a primeira janela do seu EXE vai abrir normalmente...
Eolo
Eu uso o Clipper 52 e o Blinker 51, e em todos os meus programas tem um tréco que mata esse problema e que funciona em qualquer Windows (98 / ME / XP e 2000): no começo do programa principal, eu abro o próprio EXE, em modo "exclusivo".
Por exemplo, se o seu programa principal se chama APP.EXE e está na pasta CLIENTEX, bota o seguinte no começo dele:
arq1=fopen("c:\clientex\app.exe",2)
if arq1=-1
quit
endi
Roda o EXE e, se você tentar abrir o mesmo EXE em outra janela, vai dar "acesso negado".
No final do seu programa, inclua:
arq1=fclose(arq1)
Faltou luz? Teve que dar um RESET? Sem problemas. Quando reiniciar, a primeira janela do seu EXE vai abrir normalmente...
Eolo
Isso já foi discutido 3780209673673 de vezes aqui, segue abaixo uma função que funciona em qualquer versão, pode abortar o sistema que não dá pau.
www.sistemabr.cjb.net/tvjanxp.zip
Até logo.
Marcelo
www.sistemabr.cjb.net/tvjanxp.zip
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Simplesmente pq seu exemplo vai dar pau se o EXE for executado em rede e mais de uma estação precisar chamá-lo.
Simples.
E não venha dizer que basta chamar o EXE do próprio HD, imaginemos que a estação não tenha HD.
Até logo.
Marcelo
Simples.
E não venha dizer que basta chamar o EXE do próprio HD, imaginemos que a estação não tenha HD.
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
