Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Scheduler
Message
 
 
À
29/04/2003 14:53:38
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Titre:
Divers
Thread ID:
00782866
Message ID:
00784313
Vues:
25
>Does anyone know where I can find a scheduler application on the Thread?
I use AMCTIMER - to run VFP program with switch and exec's.
*   Runs Forever (put in startup)
*** Required Tables ARON and NOTRON
*   
#define GW_HWNDFIRST        0
#define GW_HWNDLAST         1
#define GW_HWNDNEXT         2
#define GW_HWNDPREV         3
#define GW_OWNER            4
#define GW_CHILD            5
DECLARE Long GetWindow IN WIN32API Long hWnd, Long uCmd
DECLARE Long GetWindowText IN WIN32API Long hWnd, String @lpString, Long nMaxCount
DECLARE INTEGER GetDesktopWindow IN Win32API
DECLARE LONG GetWindowLong IN WIN32API Long hWnd, Long nIndex
#define GWL_EXSTYLE       -20
#define GWL_STYLE         -16
#define WS_EX_APPWINDOW 0x00040000
#define WS_VISIBLE      0x10000000
#define WS_POPUP        0x80000000
Set Status Off
Set Status Bar Off
SET CONSOLE OFF 
SET DISPLAY TO VGA50 
SET MESSAGE TO 23 CENTER 
SET ECHO OFF
SET NOTIFY OFF 
Set SysMenu To
Set Escape On
_Screen.Height= 333
nLoadedHeight= 333
_Screen.BackColor= RGB(255,200,155)
Use ARON
USE notron IN 0
SELECT ARON 
Clear
tTestJanitor= DATETIME()
tstart= DATETIME()
lcDay= "00"
nJulian=   Date()-Date(Year(Date()),1,1)+1 
cFHJulian= Padl(AllTrim(Str(nJulian)),3,"0")
cLogFileName= "e:\CRON\LOGS\LOG_"+ cFHJulian+ ".TXT"
DO POSSIBLERECOVER
@ 2,1 Say " Maximize Screen to Close Tables and Halt ARON AMCTimer!" FONT 'Courier',6
@ 3,1 Say " Press 'b' to browse Time-Tables (ARON and NOTRON)." FONT 'Courier',6
Do While .T.
   nJulian=   Date()-Date(Year(Date()),1,1)+1 
   cFHJulian= Padl(AllTrim(Str(nJulian)),3,"0")
   cLogFileName= "e:\CRON\LOGS\TIME"+ cFHJulian+ ".TXT"
   lRunSomething = .F.
   lRunExecutable= .F.
   cProgramSwitch= ""
   If nLoadedHeight+ 3 < _Screen.Height
      _Screen.BackColor= 5630
      SELECT ARON
      Brow
      SELECT notron
      Brow
      USE Janitor
      Brow
      Wait Window "Restart ARON TIMER! " TimeOut 13 
      Exit
   Else && User Peak
      lnMinutes = (round((dateTime() - tStart)/60 , 0))
      lcDay   = PADL(INT(lnMinutes/1440),3)
      lcHours = PADL(INT((lnMinutes % 1440)/60),2,"0")
      _Screen.BackColor= RGB(DOW(DATE())*29,256-(DAY(DATE())/2)-(DOW(DATE())*9),(DOW(DATE())-1)*42)
      @ 2,1 Say " Maximize Screen to Close Tables and Halt ArON AMCTimer!" FONT 'Courier',6
      @ 3,1 Say " Press 'b' to browse Time-Tables (ARON and NOTRON)." FONT 'Courier',6
      @ 1,1 
      c2Say= " Continual Processing for "+ ;
             IIF(ALLTRIM(lcDay)= "1","1 day and ",ALLTRIM(lcDay)+" days and ")+ ;
             IIF(lchours = "01","1 hour.",lcHours+" hours.")
      @ 1,1 Say c2Say FONT 'Courier',6
      @ 8,1 Say " Timer Log File at: "+ cLogFileName FONT 'Courier',6
      IF INKEY(.3)= 98  && b
         SELECT ARON
         Brow
         SELECT notron
         Brow
      ENDIF 
   EndIf
   Scan
      If Active                                                       && Active Test
         If SubStr(Upper(CDOW(DateTime())),1,3) $ Dow                 && Day-Of-Week Test  or  Today already-run Test
            If IIf(Year(DateTime()) > Year(LastRun), .T., Iif(Month(DateTime()) > Month(LastRun), .T., Iif(Day(DateTime()) > Day(LastRun), .T., Iif(Day(DateTime()) = Day(LastRun), IIF(CTOT(Time) > DATETIME(), .T., .F.), .F.)))) 
               lTimeWarp= .F.
               IF IIF(Hour(DateTime()) > Hour(cToT(Time)), .T., IIF(!(Hour(cToT(Time)) > Hour(DateTime())) AND !(Minute(cToT(Time)) > Minute(DateTime())), .T., .F.))
                  lTimeWarp= .T.    && The Hour has Passed
               ENDIF
               IF lTimeWarp
                  If !(SubStr(Upper(CDOW(DateTime())),1,3) $ Skip)    && Skip Test
                     IF ALIAS()= "ARON"
                        IF MakeCursor() && Run when System is not busy with AMCRON program 
                           Replace LastRun With DateTime()
                           lRunSomething= .T.
                        ELSE 
                           gLogMESS= AllTrim(TTOC((DateTime())))+ " BUSY: AMC not run "+AllTrim(cProgramSwitch) 
                           Do WriteLog
                           EXIT     // Leave Scan
                        ENDIF
*cut... Program switch identified and used as parameter 
                     ELSE         // NOTCRON
                        Replace LastRun With DateTime()
                        lRunExecutable= .T.
                        EXIT      // Leave Scan
                     ENDIF        // TABLE SELECTION
                  EndIf           // Skip Requested
               EndIf              // Time Passed (TimeWarp)
            EndIf                 // Ran Already
         EndIf                    // Day Of Week
      EndIf                       // Active      
   EndScan
   If lRunSomething
      @ 5,0 
      @ 5,1 Say " "+AllTrim(TTOC((DateTime())))+ " Program  AMC "+AllTrim(cProgramSwitch) FONT 'Courier',6
      gLogMESS= AllTrim(TTOC((DateTime())))+ " Program  AMC "+AllTrim(cProgramSwitch) 
      Do WriteLog
      cRunScript= "C:\ARON\AMC.bat "+ cProgramSwitch
      loWRun=CreateObject("Wscript.Shell")
      loWRun.run("command /c &cRunScript",0,0)
      loWRun=NULL
      USE 
      Use ARON IN 0
      SELECT ARON
   EndIf 
   IF lRunExecutable
      cProgramSwitch= ALLTRIM(notron.Program)
      @ 6,0 
      @ 6,1 Say " "+AllTrim(TTOC((DateTime())))+ " EXECUTABLE "+cProgramSwitch FONT 'Courier',6
      gLogMESS= AllTrim(TTOC((DateTime())))+ " "+ cProgramSwitch 
      Do WriteLog
      cRunScript= "Run /n "+ cProgramSwitch
      &cRunScript
      USE 
      USE notron IN 0
      SELECT notron
   ENDIF
   ChrSaw(17)
   IF ALIAS()= "ARON" && Toggle Tables
      SELECT notron
   ELSE 
      SELECT ARON
   ENDIF
EndDo

Procedure WriteLog
   lFileFirstTime= .F.
   tToday = DATETIME( )
   If FILE(cLogFileName)                  && Does file exist?
      gnLogFile = FOPEN(cLogFileName,12)  && If so, open read-write
   Else
      gnLogFile = FCREATE(cLogFileName)   && If not, create it
      lFileFirstTime= .T.
   Endif
   If gnLogFile < 0                       && Check for error opening file
      Wait 'Cannot open or create LOG REPORT' WINDOW NOWAIT
   Else                                   && If no error, write to file
      IF lFileFirstTime
         =FPUT(gnLogFile, _Screen.Caption+ CHR(13))
      ENDIF 
      =FSEEK(gnLogFile,0,2)               && goto EOF
      Do Case
         Case Len(AllTrim(gLogMESS))< 61
            =FWRITE(gnLogFile, PADR(gLogMESS,61," "))
            =FPUT(gnLogFile, " Today "+TTOC(tToday))
         Case Len(AllTrim(gLogMESS))< 68
            =FWRITE(gnLogFile, PADR(gLogMESS,68," "))
            =FPUT(gnLogFile, TTOC(tToday))
         Otherwise
            =FPUT(gnLogFile, gLogMESS)
      EndCase
   Endif
   =FCLOSE(gnLogFile)                     && Close file
Endproc

PROCEDURE POSSIBLERECOVER && Power out recover
   nFile = ADIR(laFileListP, 'C:\Aron\AllZip\*.*')
   FOR nFiles= 1 TO nFile
      @ 7, 2 Say "ALLZIP put on HOLD!"
      COPY FILE 'C:\Aron\AllZip\'+ laFileListP[nFiles,1] TO 'c:\Aron\Hold\'+ laFileListP[nFiles,1]
      gLogMESS= "*"
      DO WriteLog
      gLogMESS= "*AMCTIMER Possible Recovery- File moved to Hold: "+ laFileListP[nFiles,1]+ " "+AllTrim(TTOC((DateTime())))
      Do WriteLog
      gLogMESS= "*"
      DO WriteLog
   ENDFOR
   nFile = ADIR(laFileListP, 'C:\Aron\AllTemp\*.*')
   FOR nFiles= 1 TO nFile
      @ 7, 30 Say "ALLTEMP put on HOLD!"
      COPY FILE 'C:\Aron\AllTemp\'+ laFileListP[nFiles,1] TO 'c:\Aron\Hold\'+ laFileListP[nFiles,1]
      gLogMESS= "*"
      DO WriteLog
      gLogMESS= "*AMCTIMER Possible Recovery- File moved to Hold: "+ laFileListP[nFiles,1]+ " "+AllTrim(TTOC((DateTime())))
      Do WriteLog
      gLogMESS= "*"
      DO WriteLog
   ENDFOR
ENDPROC

FUNCTION MakeCursor
   cAlias= ALIAS()
   CREATE CURSOR crsWindows(hwnd I, WindTitle C(50))
   lhWnd = GetDesktopWindow()
   lhWnd = GetWindow(lhwnd, GW_CHILD) 
*___ Iterate through all TOP-Level windows
   DO WHILE lhWnd > 0
      m.WindTitle = GetTitle(lhWnd)
      IF NOT EMPTY(m.WindTitle)
		 m.hwnd 	= lhWnd
		 m.Style = GetWindowLong(lhWnd, GWL_STYLE)
		 m.hex 	= TRANSFORM(m.Style, "@0")
		 * Check if window is visible and isn't WS_POPUP style
		 IF BITAND(m.Style, WS_VISIBLE) > 0 AND BITAND(m.Style, WS_POPUP) = 0
			INSERT INTO crsWindows FROM MEMVAR
         ENDIF
	  ENDIF
	  * Get next window in Z order
	  lhWnd = GetWindow(lhWnd, GW_HWNDNEXT )
   ENDDO
   SELECT crsWindows
   lNotAlreadyRunning= .T.
   SCAN 
      IF SUBSTR(WindTitle, 1, 8)= "ABC CRON"
         lNotAlreadyRunning= .F.
         EXIT
      ENDIF 
   ENDSCAN 
   SELECT &cAlias
RETURN lNotAlreadyRunning

FUNCTION GetTitle(lhWnd)
   LOCAL lcTitle
   lcTitle = Space(512)
   lnTitle = GetWindowText(lhWnd , @lcTitle, 256)
   IF lnTitle > 0
	  lcTitle = Left(lcTitle, lnTitle )
   ELSE
	  lcTitle = ""
   ENDIF
RETURN lcTitle
Data table ARON and notron
time
Edgar L. Bolton, B.S. B.B.A.
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform