Impedir que o sistema abra DUAS vezes com lib gráfica GTWVT

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Impedir que o sistema abra DUAS vezes com lib gráfica GTWVT

Mensagem por janio »

Já que com a lib GTWVT pode-se dar um nome a janela do sistema, como impedir que o sistema seja aberto duas vezes??? tem como???

Um abraço,

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
zazibr
Usuário Nível 2
Usuário Nível 2
Mensagens: 72
Registrado em: 11 Set 2004 17:07
Localização: Campo Grande/MS

Mensagem por zazibr »

usando what32.lib ou dll.lib


#Define _BARRA_DOS_WINDOWS_ "\"

if (empty(CreateMutex( , .T., strtran(GetModuleFileName(),_BARRA_DOS_WINDOWS_,'_') )) .or. (GetLastError() > 0 ) )
//Wvt_Maximize() // restaurando a janela
//MessageBox( 0, " Não é possível executar o programa mais de uma vez", "Lopes-Comércio" )
Alert( hb_ansiToOem( " Não é possível executar o programa mais de uma vez" ) )

__Quit()

endif
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Mensagem por TerraSoftware »

Fiz o que o colega Zazibr postou e funcionou perfeitamente. Mas, houve um pequeno problema. Não funcionou no Win 95, o sistema operacional retornou um erro dizendo que existe uma referencia a DLL kernel32.dll que naum pode ser resolvida. Alguem sabe por que? Eu imagino que o problema é que a lib what32 naum seja compativel com win 95, mas naum tenho ceteza disso. Alguem pode me ajudar? Apesar que hoje em dia são pouquissimas maquina que tem win 95, mas sabe como é né! A gente quer sempre saber o que esta acontecendo.
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Até que vc resolva isto pode tentar usar este trechinho de codigo

Código: Selecionar todos

   errfile  := "epropost.sos"
   if file(errfile)
      ferase(errfile) // Tenta eliminar o arquivo de controle
      if ferror() <> 0
         Alert("Sistema ja esta em execucao.")
         quit
      endif
   else
      errhandle := fcreate(errfile) // Cria o arquivo de controle
      errhandle := FOPEN(errfile,1) // Abre travando o arquivo de controle
   endif
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.
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Mensagem por TerraSoftware »

Caro colega rochinha.
Obrigado por sua disposicao em ajudar. Mas no meu caso naum funciona, basicamente por dois motivos.
1- Tenho clientes que usam Terminal Server, ou seja, tenho o programa aberto muitas vezes dentro da mesma maquina, embora seja em sessoes diferentes.
2- Existe a possibilidade do cliente encerrar o sistema pelo ctrl+alt+del, ou coisa parecida, e sendo assim, na proxima executada o arquivo existiria e naum necessariamente o programa estaria aberto.
A solucao de testar o nome da janela é perfeita, e funcionou muito bem. O problema mesmo esta na questao de naum funcionar no win 95.
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Luiz
Usuário Nível 2
Usuário Nível 2
Mensagens: 61
Registrado em: 05 Set 2006 07:30
Localização: Vila Velha - ES

Mensagem por Luiz »

Tente com a Harbour Windows Library do Marcos Gambeta
(http://br.geocities.com/marcosgambeta/b ... /0001.html)

O codigo abaixo deve vir antes da criação da janela
principal, de preferência nas primeiras linhas do main.

Código: Selecionar todos

hWnd:=HWL_FindWindow( , "titulo da janela")  // case sensitive
if hWnd>0
  //hwg_SetForegroundWindow(hWnd)
  Quit
endif
Obs: o hwg_setforegroundwindow é da hwgui, serve para trazer a janela pra frente, eu deixei comentada para evitar erro.

Obs2: é preciso recompilar as libs da HWL com o harbour atual
Responder