Page 1 of 1
Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Mon Mar 21, 2016 3:25 pm
by Adolfo
Hola a todos....
Necesito correr un servicio en una maquina que reaccione a la existencia o no de un archivo en un folder especifico y que llame a otro ejecutable.
Alguien ha hecho algo asi ?
Algun punto de partida donde mirar, puede ser en c puro.
Apenas alguien ponga un archivo txt en el folder seleccionado, debo llamar instantáneamente a un exe hecho en FWH para procesar ese archivo.
Esa es la idea principal.
Gracias de antemano.
Saludos desde Chile
Adolfo
Re: Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Mon Mar 21, 2016 6:51 pm
by Antonio Linares
Puedes usar un TIMER que haga esa comprobación etc.
Re: Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Mon Mar 21, 2016 7:13 pm
by AngelSalom
Prueba con este código. Parte de él lo utilicé hace muchos años, he probado a
compilarlo con versiones más actuales y parece que aún funciona.
- Code: Select all Expand view
#include "fivewin.ch"
Function Main()
Local oTimer , oDlg, oTray, oIcon
ServiceProcess (1)
DEFINE WINDOW oDlg TITLE "Servicio"
DEFINE ICON oIcon FILE "..\icons\fivewin.ico"
DEFINE TIMER oTimer INTERVAL 6000 OF oDlg ACTION Msginfo ('Busco')
ACTIVATE WINDOW oDlg ;
ON INIT (oTray := (TTrayIcon():New(oDlg,oIcon,"Esperando ...",{||Msginfo ('Click')},{|nRow,nCol|MenuTray(oDlg,nRow,nCol,oTray)})),;
oTimer:ACTIVATE());
VALID oTray:End()
Return (nil)
FUNCTION MenuTray( oDlg,nRow, nCol, oTray )
LOCAL oMenu
MENU oMenu POPUP
MENUITEM "Mostrar" ACTION oDlg:Show(), oDlg:SetFocus()
MENUITEM "Ocultar" ACTION oDlg:Hide()
SEPARATOR
MENUITEM "Cerrar Programa" ACTION Iif(MsgNoYes("Desea Salir","Atención"),Finalizar(),)
ENDMENU
ACTIVATE POPUP oMenu AT nRow, nCol OF oTray:oWnd
RETURN NIL
Function Finalizar()
Quit
Return Nil
//------------------------------
Function ServiceProcess( mode )
//------------------------------
Local nProcessId := 0
Default mode := 0
nProcessId := GCP( )
If Abs( nProcessId ) > 0
RSProcess( nProcessId, mode )
Endif
Return (nil)
//----------------------------------------------------
DLL32 FUNCTION RSProcess(npID AS LONG ,;
nMode AS LONG ) AS LONG ;
FROM "RegisterServiceProcess" LIB "kernel32.DLL"
//----------------------------------------------------
//----------------------------------------------------
DLL32 FUNCTION GCP() AS LONG;
FROM "GetCurrentProcessId" LIB "kernel32.dll"
//----------------------------------------------------
Re: Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Mon Mar 21, 2016 7:42 pm
by karinha
Very good Angel, yo haria asi:
- Code: Select all Expand view
#include "fivewin.ch"
Function Main()
Local oTimer , oDlg, oTray, oIcon
ServiceProcess (1)
//DEFINE WINDOW oDlg TITLE "Servicio"
DEFINE WINDOW oDlg FROM -10, -10 TO -5, -5 MDI // sin window.
DEFINE ICON oIcon FILE "..\icons\fivewin.ico"
DEFINE TIMER oTimer INTERVAL 12000 OF oDlg ACTION Msginfo ('Busco')
ACTIVATE WINDOW oDlg ;
ON INIT (oTray := (TTrayIcon():New(oDlg,oIcon,"Esperando Servicio",{||Msginfo ('Click')},{|nRow,nCol|MenuTray(oDlg,nRow,nCol,oTray)})),;
oTimer:ACTIVATE());
VALID oTray:End()
Return (nil)
FUNCTION MenuTray( oDlg,nRow, nCol, oTray )
LOCAL oMenu
MENU oMenu POPUP 2007
MENUITEM "Mostrar" ACTION oDlg:Show(), oDlg:SetFocus() ;
FILENAME "..\bitmaps\16x16\info.bmp"
SEPARATOR
MENUITEM "Ocultar" ACTION oDlg:Hide() ;
FILENAME "..\bitmaps\edit.bmp"
SEPARATOR
MENUITEM "Cerrar Programa" ;
ACTION Iif(MsgNoYes("Desea Salir","Atención"),Finalizar(),) ;
FILENAME "..\bitmaps\16x16\exit.bmp"
ENDMENU
ACTIVATE POPUP oMenu AT nRow, nCol OF oTray:oWnd
RETURN NIL
Function Finalizar()
FreeResources()
SysRefresh()
RELEASE All
Hb_GCAll( .T. )
CLEAR MEMORY
PostQuitMessage( 0 )
Quit
Return Nil
//------------------------------
Function ServiceProcess( mode )
//------------------------------
Local nProcessId := 0
Default mode := 0
nProcessId := GCP( )
If Abs( nProcessId ) > 0
RSProcess( nProcessId, mode )
Endif
Return (nil)
//----------------------------------------------------
DLL32 FUNCTION RSProcess(npID AS LONG ,;
nMode AS LONG ) AS LONG ;
FROM "RegisterServiceProcess" LIB "kernel32.DLL"
//----------------------------------------------------
//----------------------------------------------------
DLL32 FUNCTION GCP() AS LONG;
FROM "GetCurrentProcessId" LIB "kernel32.dll"
//----------------------------------------------------
Muchas gracias, saludos.
Re: Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Mon Mar 21, 2016 11:56 pm
by Adolfo
Gracias Angel.. lo probare mañana...
Pero es un servicio al 100%, que se cargue automaticamente al iniciar windows.. o debo llamarlo aunque sea una vez.
Poruqe la idea es ponerlo en una estacion donde el operador no deba realizar nada...
Eso.. mañana le doy un test
Re: Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Tue Mar 22, 2016 8:08 am
by AngelSalom
Debes ejecutarlo al iniciar el equipo (pero bueno, eso es lo de menos ya que lo puedes incluir en el inicio) Inicio ► Todos los programas ► Abrir carpeta «Inicio» ► Alojar en ella el acceso directo al programa que queremos que se inicie con Windows.
Re: Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Tue Mar 22, 2016 12:56 pm
by thefull
En Harbour teneis ejemplo de como tener un servicio en Windows.
Y he de decir que funciona y funciona muy bien.
Re: Servicio en Harbour o FWH
![Post Post](./styles/prosilver/imageset/icon_post_target.gif)
Posted:
Tue Mar 22, 2016 2:27 pm
by Adolfo
Amigos...
He probado el ejemplo y le he hecho las modificaciones que a mi me interesaban...
Hasta el momento todo bien, con un consumo decente de memoria, y de CPU, entre 2 y 2,3 Mb de memoria y hasta un 1% en el proceso de lectura y obtencion de datos desde un archivo.
Veremos con mas calma y mas trabajo como se comporta..
Gracias
Saludos
Desde Chile
Adolfo