Servicio en Harbour o FWH

Servicio en Harbour o FWH

Postby Adolfo » Mon Mar 21, 2016 3:25 pm

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
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: Servicio en Harbour o FWH

Postby Antonio Linares » Mon Mar 21, 2016 6:51 pm

Puedes usar un TIMER que haga esa comprobación etc.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Servicio en Harbour o FWH

Postby AngelSalom » Mon Mar 21, 2016 7:13 pm

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"
//----------------------------------------------------
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Servicio en Harbour o FWH

Postby karinha » Mon Mar 21, 2016 7:42 pm

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.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7215
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Servicio en Harbour o FWH

Postby Adolfo » Mon Mar 21, 2016 11:56 pm

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
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: Servicio en Harbour o FWH

Postby AngelSalom » Tue Mar 22, 2016 8:08 am

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.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Servicio en Harbour o FWH

Postby thefull » Tue Mar 22, 2016 12:56 pm

En Harbour teneis ejemplo de como tener un servicio en Windows.
Y he de decir que funciona y funciona muy bien.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 729
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Servicio en Harbour o FWH

Postby Adolfo » Tue Mar 22, 2016 2:27 pm

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
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 91 guests