Tenho um sisteminha "meia boca" (mas funciona) que fica no Tray e de tempos em tempos ele é ativado e realiza o Backup dos arquivos para o drive indicado, se servir para alguém ai está
Código: Selecionar todos
#include "fivewin.ch"
#include "struct.ch"
#define NIM_ADD 0 //
#define NIM_DELETE 2 //
#define NIM_MODIFY 1 // Para TaskAddIcon
#define NIF_ICON 2 //
#define NIF_MESSAGE 1 //
#define NIF_TIP 4 //
STATIC oWndTray, oTray, oTrayIcon, lQuitTray := .F., lTaskWork := .F.
//--------------------
FUNCTION Main()
PUBLIC hBorland := LoadLibrary( "bwcc32.dll" )
PUBLIC hWorkRes := LoadLibrary( "workres.dll" )
PUBLIC hFivewin := LoadLibrary( "fwctrls.dll" )
IF FindWindow( 0, "BackUp automático" ) > 0
RETURN NIL
ENDIF
DEFINE ICON oTrayIcon RESOURCE "aaaahairty"
DEFINE WINDOW oWndTray TITLE "BackUp automático" ICON oTrayIcon FROM 600, 600 TO 601, 601
oWndTray:bTaskBar := { | nWParam, nLParam | TaskBar( nWParam, nLParam ) }
oWndTray:bResized := { | nSizeType | DoTaskBar( nSizeType ) }
ACTIVATE WINDOW oWndTray ON INIT Initialize() VALID QuitTray()
RETURN NIL
*------------------------------------------------------------------------------*
FUNCTION Initialize()
USE ..\DADOS008\ATUALIZA ALIAS CONFIG SHARED
// TMPBK = Campo do arquivo de configuração com o tempo em minutos para executar o BKP
TMP:=TMPBK * 60000 // 10000
// DVRBK = Campo do arquivo de configuração com o dive de destino do BKP
DRV:=DVRBK+":\"
CLOSE DATABASE
AEVAL(DIRECTORY(DRV+"DADOSCOP\DB\*.*"),{|aFile| FErase(DRV+"DADOSCOP\DB"+aFile[1])})
AEVAL(DIRECTORY(DRV+"DADOSCOP\NF\*.*"),{|aFile| FErase(DRV+"DADOSCOP\NF"+aFile[1])})
SET EXCL ON
SET EXACT ON
SetHandleCount( 200 )
REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
REQUEST HB_CODEPAGE_PT850
HB_SETCODEPAGE( "PT850" )
SET DECIMALS TO 2
SET CENTURY ON
SET DELETED ON
SET DATE TO FRENCH
SET EPOCH TO 1990
SET 3DLOOK ON
nResHoriz := oWndTray:nHorzRes() // retorna a resolucao horizontal
nResVert := oWndTray:nVertRes() // retorna a resolucao vertical
//--------------- criar pastas
lMkDir(DRV+"DADOSCOP")
lMkDir(DRV+"DADOSCOP\DB")
lMkDir(DRV+"DADOSCOP\NF")
lMkDir("DADOSPRE")
lMkDir("DADOSPRE\DB")
lMkDir("DADOSPRE\NF")
(oWndTray:Minimize(),ajt(tmp,DRV))
RETURN NIL
//------------- VERIFICAR TEMPO
FUNCTION ajt(tempo,DRV)
DEFINE TIMER oTimer OF oWndTray INTERVAL tempo ACTION cpar(DRV)
oTimer:activate()
RETURN NIL
//-------------GERAR COPIA
function cpar(DRV)
//--------------- ELIMINAR ARQUIVOS
AEVAL(DIRECTORY("DADOSPRE\DB\*.*"),{|aFile| FErase("DADOSPRE\DB"+aFile[1])})
AEVAL(DIRECTORY("DADOSPRE\NF\*.*"),{|aFile| FErase("DADOSPRE\NF"+aFile[1])})
//--------------- COPIAR ARQUIVOS
COPIACAO1 := Directory("..\DADOS008\*.DBF")
FOR nI = 1 TO Len(COPIACAO1)
ORIG:="..\DADOS008\"+COPIACAO1[ nI, 1 ]
DEST:="DADOSPRE\DB\"+COPIACAO1[ nI, 1 ]
COPY FILE "&ORIG" TO "&DEST"
NEXT
COPIACAO2 := Directory("..\FISCAL\NFES\*.*")
FOR nI = 1 TO Len(COPIACAO2)
ORIG:="..\FISCAL\NFES\"+COPIACAO2[ nI, 1 ]
DEST:="DADOSPRE\NF\"+COPIACAO2[ nI, 1 ]
COPY FILE "&ORIG" TO "&DEST"
NEXT
//---------------- COMPACTAR ARQUIVOS
cArq := DRV+"\DADOSCOP\DB\BK" + SUBSTR(TIME(),1,2)+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2) + ".ZIP"
ARQUIVOS := {}
AFILES := Directory("DADOSPRE\DB\*.DBF")
FOR nI = 1 TO Len(aFiles)
AAdd( ARQUIVOS, "DADOSPRE\DB\"+AFILES[ nI, 1 ] )
NEXT
IF HB_ZipFile(cArq,ARQUIVOS,,,,,,,{|x,t| qout(int((x/t)*100))})
SndPlaySound("chimes.MP3")
ELSE
SndPlaySound("Erro.mp3")
ENDIF
cArq2 := DRV+"\DADOSCOP\NF\BK" + SUBSTR(TIME(),1,2)+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2) + ".ZIP"
ARQUIVOS2 := {}
AFILES2 := Directory("DADOSPRE\NF\*.*")
FOR nI = 1 TO Len(aFiles2)
AAdd( ARQUIVOS2, "DADOSPRE\NF\"+AFILES2[ nI, 1 ] )
NEXT
IF HB_ZipFile(cArq2,ARQUIVOS2,,,,,,,{|x,t| qout(int((x/t)*100))})
SndPlaySound("chimes.MP3")
ELSE
SndPlaySound("Erro.mp3")
ENDIF
return .t.
*------------------------------------------------------------------------------*
FUNCTION TaskBar( nWParam, nLParam )
LOCAL aCoors := ARRAY(2)
lTaskWork := .F.
IF !lTaskWork
lTaskWork := .T.
DO CASE
CASE nLParam == WM_RBUTTONUP // WM_LBUTTONUP
CASE nLParam == WM_LBUTTONUP // WM_RBUTTONUP
aCoors := GetCursorPos()
aCoors := ScreenToClient( oWndTray:hWnd, aCoors )
TaskMenu( aCoors[1], aCoors[2] )
ENDCASE
lTaskWork := .F.
ELSEIF nLParam == WM_LBUTTONUP
lTaskWork := .F.
ENDIF
RETURN NIL
*------------------------------------------------------------------------------*
FUNCTION DoTaskBar( nWhich )
DEFAULT nWhich := -1
DO CASE
CASE nWhich == 1
IF VALTYPE( oTray ) <> "O"
oTray := TaskAddIcon( oWndTray, oTrayIcon, "BackUp automático" ) // este
oWndTray:Hide()
ENDIF
CASE nWhich == 0 .OR. nWhich == 2
IF VALTYPE( oTray ) == "O"
TaskDelIcon( oTray, oTrayIcon )
ENDIF
oTray := NIL
ENDCASE
RETURN NIL
*------------------------------------------------------------------------------*
FUNCTION TaskMenu( nRow, nCol )
LOCAL oTrayMenu
MENU oTrayMenu POPUP kkk
MENUITEM "Fechar menu" WHEN TaskWhen("fecmen") ACTION NIL
SEPARATOR
MENUITEM "&Sair" WHEN TaskWhen("fecsis") ACTION QuitTray()
ENDMENU
ACTIVATE POPUP oTrayMenu AT nRow, nCol OF oWndTray
RETURN NIL
*------------------------------------------------------------------------------*
FUNCTION TaskWhen( cMenu )
DO CASE
CASE cMenu == "fecmen"
RETURN( .T. )
CASE cMenu == "fecsis"
RETURN( .T. )
ENDCASE
RETURN( .F. )
*------------------------------------------------------------------------------*
FUNCTION QuitTray()
LOCAL oDlg, oFont, oBmp, oRad, nRad := 2, lOk := .F.
nRad:=2
IF !lQuitTray
DEFINE FONT oFont Name "Arial" SIZE 0, -12 BOLD
DEFINE DIALOG oDlg RESOURCE "Dlg_QuitTray" COLOR RGB (0,0,0),RGB (0,0,255)
REDEFINE BITMAP oBmp ID 500 RESOURCE "NDSLogo" OF oDlg adjust
REDEFINE SAY ID 501 PROMPT "Confirma o fechamento do sistema ?" OF oDlg FONT oFont COLOR RGB (255,255,255),RGB (0,0,255)
REDEFINE BUTTON ID 103 OF oDlg ACTION ( oDlg:bLostFocus := NIL, lOk := .T., oFont:End(), oDlg:End() )
REDEFINE BUTTON ID 104 OF oDlg ACTION ( oDlg:bLostFocus := NIL, lOk := .F., oFont:End(), oDlg:End() )
oDlg:bLostFocus := {|| oDlg:bLostFocus := NIL, lOk := .F., oFont:End(), oDlg:End() }
ACTIVATE DIALOG oDlg CENTER
IF lOk .AND. nRad == 2
lQuitTray := .T.
IF oTray != NIL
TaskDelIcon( oTray )
ENDIF
oTrayIcon:End()
oWndTray:End()
ENDIF
ENDIF
RETURN( .T. )
*------------------------------------------------------------------------------*
FUNCTION TaskAddIcon( oWnd, oIcon, cToolTip )
LOCAL oNotifyIconData
STRUCT oNotifyIconData
MEMBER nSize AS DWORD
MEMBER hWnd AS LONG
MEMBER nId AS LONG
MEMBER nFlags AS LONG
MEMBER nCallMsg AS LONG
MEMBER hIcon AS LONG
MEMBER cToolTip AS STRING LEN LEN( cToolTip )
ENDSTRUCT
oNotifyIconData:nSize = oNotifyIconData:SizeOf()
oNotifyIconData:hWnd = oWnd:hWnd
oNotifyIconData:nId = 1
oNotifyIconData:nFlags = nOr( NIF_ICON, NIF_MESSAGE, NIF_TIP )
oNotifyIconData:nCallMsg = WM_TASKBAR
oNotifyIconData:hIcon = oIcon:hIcon
oNotifyIconData:cToolTip = cToolTip
Shell_NotifyIcon( NIM_ADD, oNotifyIconData:cBuffer )
RETURN oNotifyIconData
//------------------------------------------------------------------------//
FUNCTION TaskDelIcon( oNotifyIconData )
Shell_NotifyIcon( NIM_DELETE, oNotifyIconData:cBuffer )
RETURN NIL
//------------------------------------------------------------------------//
FUNCTION TaskChangeIcon( oNotifyIconData ,oIcon)
oNotifyIconData:nFlags = NIF_ICON
oNotifyIconData:hIcon = oIcon:hIcon
Shell_NotifyIcon( NIM_MODIFY, oNotifyIconData:cBuffer )
RETURN oNotifyIconData
//------------------------------------------------------------------------//
DLL32 FUNCTION Shell_NotifyIcon( nMsg AS LONG, pNID AS LPSTR ) AS BOOL PASCAL ;
FROM "Shell_NotifyIconA" LIB "shell32.dll"
//------------------------------------------------------------------------//
DLL32 FUNCTION ShellExecute( hWnd AS LONG, cOperation AS LPSTR,;
cFile AS LPSTR, cParams AS LPSTR,;
cDir AS LPSTR, nShow AS LONG ) AS LONG PASCAL ;
FROM "ShellExecuteA" LIB "shell32.dll"
//------------------------------------------------------------------------//
Alterações e melhorias, postem aqui.