Rodar Programa Em BackGround

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

Moderador: Moderadores

mdaweb
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 10 Jan 2007 12:32

Rodar Programa Em BackGround

Mensagem por mdaweb »

Ola pessoall, preciso de um programa exemplo que rode em background e mostre na lela uma mensagem sem usar o msgbox, so aparece a mensagem por um instante e some logo em seguida, em varios pontos da tela randomicamente, alguem tem alguma sujestão para esse codigo?

grato,

Mauro.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

Com a biblioteca MiniGUI pode ser simples de se fazer o que você pretende.

Basta vc chamar sua aplicação escondida, e depois carregar uma mesma janela na tela em posições randômicas.

Agora se o fundo do texto tiver que ser 'transparente', vai dar um trabalhinho a mais... Neste caso, como é um programinha simples, sugiro que faça em VB mesmo.

Falou...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
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

Tente usar a minha função e adapta-la ao seu mundo. Ela foi feita pra ser usada com Fivewin+Harbour.

Código: Selecionar todos

#define GWL_EXSTYLE           (-20) 
#define WS_EX_LAYERED         0x00080000 
#define LWA_ALPHA             0x00000002 
#define LWA_COLORKEY          0x00000001 

Function Ballon(cBallonMsg,nBallonTime)
   local oDlgBallon
   default cBallonMsg := "Nova mensagem chegando..."
   DEFINE WINDOW oDlgBallon FROM GetSysMetrics(1),GetSysMetrics(0)-300 TO 200,200 PIXEL COLOR nRGB(255,255,255),nRGB(255,255,230) NO CAPTION BORDER NONE
          @ 5, 5 GET cBallonMsg MEMO OF oDlgBallon SIZE 195,195 PIXEL COLOR nRGB(000,000,000),nRGB(255,255,230) NOBORDER NO MODIFY
   ACTIVATE WINDOW oDlgBallon ON INIT ( LayeredWindow( oDlgBallon, 070 ), MoveDLG(oDlgBallon,nBallonTime) )
   return nil

Function MoveDLG(oDlgBallon,oDlgTime)
   oDlgAltura := GetSysMetrics(1)
   for i = 1 to 20
       oDlgAltura := oDlgAltura - i
       oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
       SysWait(.02)
   next
   SysWait(oDlgTime)
   for i = 1 to 20
       oDlgAltura := oDlgAltura + i
       oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
       SysWait(.02)
   next
   oDlgBallon:end()
   return

Function LayeredWindow( oWnd, nLay ) 
   //SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, GetWindowLong( oWnd:hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED ) 
   SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_BORDER )
   SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_EX_LAYERED ) 
   SetLayeredWindowAttributes( oWnd:hWnd, 0, ( 255 * nLay ) / 100, LWA_ALPHA ) 
   Return NIL
Use assim Ballon( "Coloque aqui a sua mensagem", 5 ) onde 5 é o tempo que ficará vizivel. Caso a função LayeredWindow() de problemas isole-a pois a inteção é criar uma janela que sobe da barra de tarefas e apresenta a mensagem para o usuario.
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.
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

O Vagner já deu a dica para isso, veja:

Vc pode colocar suas rotinas rodando em back ground usando o seguinte

ROTINA=HB_IDLEADD({||TESTE()})

inkey(0)

HB_IDLEDEL(ROTINA)

PROCEDURE teste
@ 10,10 SAY TIME()

Ps: não consegui usar com a hwgui

MarceloG
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 »

Pode user tambem a HB_BACKGROUNDADD
exemplo:

Código: Selecionar todos

nTask := HB_BACKGROUNDADD( {|| DisplayTime()}, <tempo> ) // tempo em milisegundos
SET BACKGROUND TASKS ON

function DisplayTime
  if <alguma condição>
    HB_BACKGROUNDACTIVE( nTask, .F. )  // desativar o timer
    <montar a janela>
    <esperar>
    HB_BACKGROUNDACTIVE( nTask, .T. )  // reativar o timer
  endif
return .t.
Avatar do usuário
momente
Usuário Nível 3
Usuário Nível 3
Mensagens: 496
Registrado em: 03 Mar 2005 11:53
Localização: São Carlos-SP
Contato:

Mensagem por momente »

Pessoal,

Uma dúvida, aonde eu consigo encontrar os comandos e funções do xharbour , Qual pasta que acompanha o xharbour possui estas informações?

Valeu!
:)Pos
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
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 »

Na pasta Doc
Mas é preciso gerar os arquivos com genhtm.bat ou gendoc.bat
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Eu crio serviços para Linux com as rotinas HB_STARTSERVICE e HB_PUSHSIGNALHANDLER, acredito que estas rotinas funcionem com o Windows, com a segunda rotina citada, eu coloco uma rotina minha para poder responder as mensagens do SO e parar o serviço de forma devida. No windows, eu tambem indico o uso da Minigui, eu uso ela para o PRWIN e funciona muito bem para isto e ainda tem exemplos.
Sem mais
Wagner Nunes
www.vagucs.com.br
benyfilho
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 19 Jun 2007 12:02
Localização: São Paulo/SP - Brasil

Mensagem por benyfilho »

vagucs

Vc pode me enviar um exemplo que como colocar a aplicação como serviço no Windows, Existe alguma regra para se programar visando a aplicação como serviço?
Bene
E-mail :benyhapper@hotmail.com
FWH705 / Xhar9971 / @Say / xDev
MSN: benyhapper@hotmail.com
São Paulo/SP
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Na verdade a unica coisa que vc precisa é que seu programa identifique as mensagens do SO para poder finalizar quando o windows for encerrado, acredito que seja o mesmo processo do linux, no linux uso o exemplo abaixo e funciona muito bem.

Código: Selecionar todos

#include "hbserv.ch"
global continua
continua=.t.
hb_startservice(.t.)
hb_pushsignalhandler(HB_SIGNAL_ALL,"ler_evento")
do while continua
  // SEU CODIGO
enddo
// SERVICO ENCERRADO

procedure ler_evento(sinal,para)
if sinal=HB_SIGNAL_QUIT .or. sinal=HB_SIGNAL_INTERRUPT
   continua=.f.
end if
return HB_SERVICE_HANDLED
Sem mais
Wagner Nunes
www.vagucs.com.br
benyfilho
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 19 Jun 2007 12:02
Localização: São Paulo/SP - Brasil

Mensagem por benyfilho »

Quando eu coloco para iniciar o serviço no Windows dá um erro:

O Serviço não respondeu a requisição de inicio ou controle em tempo hábil

Código: Selecionar todos

#include "FiveWin.ch"
#include "hbserv.ch" 
#define GWL_EXSTYLE           (-20)
#define WS_EX_LAYERED         0x00080000
#define LWA_ALPHA             0x00000002
#define LWA_COLORKEY          0x00000001
GLOBAL continua:=.T. 
STATIC oWnd, oTimer

FUNCTION Main() 
   hb_startservice(.t.) 
   hb_pushsignalhandler(HB_SIGNAL_ALL,"ler_evento") 
   LOCALINTERVALO=60
   Do While continua 
      Ballon( "Teste por 10 segundos com ballon tip, modificado pelo bene", 10 )
   ENDDO
RETURN 

procedure ler_evento(sinal,para) 
if sinal=HB_SIGNAL_QUIT .or. sinal=HB_SIGNAL_INTERRUPT 
   continua=.f. 
end if 
return HB_SERVICE_HANDLED 

Function Ballon(cBallonMsg,nBallonTime)
   local oDlgBallon, oFontsayB
   DEFINE FONT oFontsayB NAME "Verdana" SIZE 0,-11
   default cBallonMsg := "Nova mensagem chegando..."
   DEFINE WINDOW oDlgBallon FROM GetSysMetrics(1),GetSysMetrics(0) TO 200,200 PIXEL COLOR nRGB(000,000,000),nRGB(000,000,000) STYLE WS_POPUP
			 @ 1, 1 SAY cBallonMsg OF oDlgBallon SIZE 198,198 PIXEL FONT oFontSayB COLOR CLR_BLACK,CLR_GRAY
   ACTIVATE WINDOW oDlgBallon ON INIT ( LayeredWindow( oDlgBallon, 090 ), MoveDLG(oDlgBallon,nBallonTime))
return nil

Function MoveDLG(oDlgBallon,oDlgTime)
   oDlgAltura := GetSysMetrics(1)
   for i = 1 to 15
       oDlgAltura := oDlgAltura - i
       oDlgBallon:Move( oDlgAltura, GetSysMetrics(1)+55, 200, 100, .t. )
       SysWait(.02)
   next
   SysWait(oDlgTime)
   for i = 1 to 15
       oDlgAltura := oDlgAltura + i
       oDlgBallon:Move( oDlgAltura, GetSysMetrics(1)+55, 200, 100, .t. )
		 SysWait(.02)
   next
   oDlgBallon:end()
return

Function LayeredWindow( oWnd, nLay )
   //SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, GetWindowLong( oWnd:hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED )
   SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_BORDER )
   SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_EX_LAYERED )
   SetLayeredWindowAttributes( oWnd:hWnd, 0, ( 255 * nLay ) / 100, LWA_ALPHA )
Return NIL
Editado pela última vez por Pablo César em 05 Mai 2011 22:30, 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
Bene
E-mail :benyhapper@hotmail.com
FWH705 / Xhar9971 / @Say / xDev
MSN: benyhapper@hotmail.com
São Paulo/SP
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Como disse, nunca usei no windows, mas no linux é apenas isto.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

No seu caso, como o programa vai exibir alguma mensagem, vc precisa é de uma rotina para seu sistema rodar no tray, a minigui ja tem rotinas para isto, veja nos exemplos dela.
Sem mais
Wagner Nunes
www.vagucs.com.br
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

Com a MiniGUI também dá pra vc criar um message box "temporizado", fica faltando apenas a questão do posicionamento na tela. O melhor messmo é fazer a caixa de diálogo na mão.

Tem um exemplo na pasta samples do mgsbox temporizado, da uma olhadinha lá.

Falou!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder