Colocar programa residente na memória ?
Enviado: 18 Set 2008 09:53
.
Em homenagem a Paulo Cesar Toledo
https://pctoledo.org/
Código: Selecionar todos
Function Main()
Local oMainWindow, oTrayMenu, oIcon := HIcon():AddResource("ICON_1")
Private oTimer, oFont
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
HB_LANGSELECT("PT")
HB_SETCODEPAGE( "PT850" )
Verefica_Ini() // VEREFICA SE TEM O ARQUIVO INI PARA CONFIGURAÇÕES DE CONEXÃO AO BANCO ON-LINE
IF ( hWnd := Hwg_FindWindow( oMainWindow,"Atualizador do Web-Site" ) ) != 0
Hwg_SetForegroundWindow( hWnd )
Return
ENDIF
PREPARE FONT oFont NAME "Ms San Serif" WIDTH 0 HEIGHT -15 WEIGHT 400
INIT WINDOW oMainWindow MAIN TITLE "Atualizador de Web-Site"
CONTEXT MENU oTrayMenu
MENUITEM "Sobre" ACTION {|| sobre()}
SEPARATOR
MENUITEM "Exit" ACTION {|| MyExitProc()}
ENDMENU
SET TIMER oTimer of oMainWindow VALUE 600000 ACTION {|| Atualiza_dados() }
oMainWindow:InitTray(oIcon,,oTrayMenu,"Atualizador do Web-Site")
ACTIVATE WINDOW oMainWindow NOSHOW
oTrayMenu:End()
Return Nil
*******************
Function MyExitProc
*******************
IF MSGNOYES("Deseja Realmete Sair do Programa ?","Aviso do Sistema")
DBCLOSEALL()
__Quit()
Else
RETURN
ENDIF
RETURN
Function Verefica_Ini
IF !FILE("sygecom.ini")
Hwg_WriteIni( 'Mysql', 'Host', "localhost", oDirec+"sygecom.Ini" )
Hwg_WriteIni( 'Mysql', 'Usuario', "root", oDirec+"sygecom.Ini" )
Hwg_WriteIni( 'Mysql', 'Senha', "", oDirec+"sygecom.Ini" )
Hwg_WriteIni( 'Mysql', 'Banco', "sygecom", oDirec+"sygecom.Ini" )
Hwg_WriteIni( 'Mysql', 'Porta', "3306", oDirec+"sygecom.Ini" )
Endif
Return Nil
Código: Selecionar todos
Procedure main()
do while .t.
tone(400,1)
inkey(5)
enddo
return
#PRAGMA BEGINDUMP
#ifdef __WIN32__
#include <windows.h>
#include "hbapi.h"
#include "hbvm.h"
#define SERVICENAME "TestService"
#define SERVICEDISPLAY "Harbour Service Test"
SERVICE_STATUS m_ServiceStatus;
SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
void WINAPI ServiceCtrlHandler(DWORD Opcode);
void InstallService(void);
void RemoveService(void);
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{
m_ServiceStatus.dwServiceType = SERVICE_WIN32;
m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwServiceSpecificExitCode = 0;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
m_ServiceStatusHandle = RegisterServiceCtrlHandler(SERVICENAME, ServiceCtrlHandler);
if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
{
return;
}
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
{
}
hb_cmdargInit( argc, argv );
hb_vmInit( TRUE );
return;
}
void WINAPI ServiceCtrlHandler(DWORD Opcode)
{
switch(Opcode)
{
case SERVICE_CONTROL_PAUSE:
m_ServiceStatus.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
break;
case SERVICE_CONTROL_STOP:
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus);
hb_vmQuit();
break;
case SERVICE_CONTROL_INTERROGATE:
break;
}
return;
}
void InstallService(void)
{
char szPath[512];
HANDLE schSCManager,schService;
if (GetModuleFileName( NULL, szPath, 512) == 0)
return;
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (schSCManager == NULL)
return;
schService = CreateService(
schSCManager, // SCManager database
SERVICENAME, // name of service
SERVICEDISPLAY, // name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
szPath, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // dependencies
NULL, // LocalSystem account
NULL); // no password
if (schService == NULL)
{
if (GetLastError() == ERROR_SERVICE_EXISTS)
printf("Service Already Exists.\n");
printf("Service Was not Installed Successfully. Error Code %d\n", GetLastError());
return;
}
CloseServiceHandle(schService);
printf("Service Installed Sucessfully\n");
return;
}
void RemoveService(void)
{
HANDLE schSCManager;
SC_HANDLE schService;
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
schService = OpenService(
schSCManager, // SCManager database
SERVICENAME, // name of service
DELETE); // only need DELETE access
if (schService == NULL)
{
printf("OpenService failed (%d)\n", GetLastError());
return;
}
if (! DeleteService(schService) )
{
printf("Delete Service failed (%d)\n", GetLastError());
return;
}
else
printf("DeleteService succeeded\n");
CloseServiceHandle(schService);
return;
}
void main( int argc, char * argv[] )
{
if (argc > 1)
{
if (strcmp(argv[1], "-i") == 0)
InstallService();
if (strcmp(argv[1], "-d") == 0)
RemoveService();
}
else
{
SERVICE_TABLE_ENTRY DispatchTable[]= {{SERVICENAME, ServiceMain}, {NULL,NULL}};
StartServiceCtrlDispatcher(DispatchTable);
}
}
#endif
#PRAGMA ENDDUMP
Código: Selecionar todos
do whil .t.
a=directory("c:\exemplo\print\*.txt")
if len(a)=0
inkey(10)
else
for b=1 to len(a)
* faz a impressão do arquivo indicado em a[b]
* deleta o arquivo indicado em a[b]
next
endi
endd
Código: Selecionar todos
#include "FiveWin.ch"
#include "dll.ch"
#DEFINE WM_SYSCOMMAND 274 // &H112
#DEFINE SC_TASKLIST 61744 //&HF130
#DEFINE SC_SCREENSAVE 61760 // &HF140
#DEFINE SW_HIDE 0 // &H0
#DEFINE SW_SHOWNA 8 // &H8
#DEFINE SW_SHOW 5 // &H5
#DEFINE SW_SHOWNORMAL 1
#DEFINE SC_MONITORPOWER 61808 //&HF170 Gracias a Ramon Ramirez por la info
#DEFINE SM_CLEANBOOT 67
#DEFINE GWL_EXSTYLE (-20)
#DEFINE WS_EX_LAYERED 0x00080000
#DEFINE LWA_ALPHA 0x00000002
#DEFINE LWA_COLORKEY 0x00000001
#DEFINE GW_CHILD 5
#DEFINE GW_HWNDNEXT 2
#DEFINE RT_BITMAP 2
#DEFINE MB_ICONEXCLAMATION 48
#DEFINE CBM_INIT 4 && should move to prg header
#DEFINE DIB_RGB_COLORS 0 && should move to prg header
static hLib, hDib, oSpoolTimer
Function Main(_tempo_)
Local oB, cImgFile := "service.bmp", oClp
public oApp, oTray, oIcon, oIconOn, oIconOff
public nLibrary := LoadLibrary( "ADVAPI32.DLL" )
public cUsuario := space(15), cImage, cIMGAlerta, oEsconde
lStatus := .f.
Default _tempo_ := "05"
cPath := cFilePath( GetModuleFileName( GetInstance() ) )
nTempo := VerifyINI( "SERVICE", "TEMPO" , "10" , cPath+"service.ini" )
//---------------
Set Multiple off
errfile := "possrv.sos"
if file(errfile)
ferase(errfile) // Tenta eliminar o arquivo de controle
if ferror() <> 0 // MsgStop("Sistema ja esta em execucao.","5Volution Legacy Fenix")
quit
endif
else
errhandle := fcreate(errfile) // Cria o arquivo de controle
errhandle := FOPEN(errfile,1) // Abre travando o arquivo de controle
endif
//---------------
SetDefServer()
//---------------
ServiceProcess(1)
//---------------
DEFINE BRUSH oB COLOR CLR_HGRAY
DEFINE ICON oIcon FILE "LOGO.ICO"
DEFINE ICON oIconOn FILE "ICON1.ICO"
DEFINE ICON oIconOff FILE "ICON2.ICO"
//
DEFINE CLIPBOARD oClp OF oApp
DEFINE WINDOW oApp FROM 0,0 to 500,500 pixel TITLE "Service" BRUSH oB STYLE WS_POPUP ICON "pos.ico"
DEFINE TIMER oSpoolTimer OF oApp INTERVAL (val(nTempo)*1000) ACTION GravaProcess( cImgFile, oApp )
ACTIVATE TIMER oSpoolTimer
oApp:nStyle := 1
SET MESSAGE OF oApp TO "P.O.S Spool Server - 5Volution Legacy" CLOCK DATE
ACTIVATE WINDOW oApp ; // ON INIT (Shell_NotifyIcon( 0, "pos.ico" ), oApp:Hide()) //VALID (oEsconde:End(), .t.)
ON INIT ( oTray := TTrayIcon():New(oApp,oIconOn,"P.O.S Spool Server rodando...",{||fun()},{|nRow,nCol|MenuTray(nRow,nCol,oTray)} ) )
ShowWindow( FindWindow(nil,'Program Manager'), SW_SHOW)
ShowWindow(FindWindow( 'Shell_TrayWnd',nil), SW_SHOWNA)
Return NIL
function MenuTray( nRow, nCol, oTray )
local oMenu
MENU oMenu POPUP
MENUITEM "Configura Impressora" ACTION PrinterSetup()
//SEPARATOR
//MENUITEM "Mostra aplicativo" ACTION ( oApp:Show(), oApp:SetFocus() )
//MENUITEM "Esconde aplicativo" ACTION ( oApp:Hide() )
SEPARATOR
MENUITEM "Fecha aplicativo" ACTION oApp:end()
ENDMENU
ACTIVATE POPUP oMenu AT nRow, nCol OF oTray:oWnd
return nil
function fun()
return nil
//-------------------------------------
Function GravaProcess( cImgFile, oWnd )
//-------------------------------------
LOCAL oWord, oTexto
cEmiteMotor := "PRINT.EXE"
oSpoolTimer:lActive := .f.
CONTADOR := ADIR( "*.ECF" )
IF CONTADOR != 0
DECLARE TXT_NOMES[ CONTADOR ]
ADIR( "*.ECF", TXT_NOMES )
FOR CONTADOR := 1 TO LEN( TXT_NOMES )
PRNcFile := cPath + TXT_NOMES[CONTADOR]
do case
case cEmiteMotor = "PRINT.EXE"
WaitRun( "print.exe /D:LPT1 " + PRNcFile, 0 )
case cEmiteMotor = "COMMAND.COM"
WaitRun( "command.com /c copy /b " + PRNcFile + " LPT1" , 0 )
case cEmiteMotor = "WRITE"
WaitRun( "write " + PRNcFile + " /p" )
case cEmiteMotor = "WAPI"
WaitRun( [WAPI -PRINT:"]+PRNcPort+[";]+PRNcFile+[;"Impressao";RESULTA.TXT], 7 )
endcase
SysWait(5)
if file( PRNcFile )
fErase( PRNcFile )
endif
NEXT
ENDIF
oSpoolTimer:lActive := .t.
if file( cPath + "desativa.ecf" )
fErase( cPath + "desativa.ecf" )
oSpoolTimer:lActive := .f.
cancel
endif
SysRefresh()
Return NIL
//-------------------------------------
Function ServiceProcess( mode )
//-------------------------------------
Local nProcessId := 0
Default mode := 0
nProcessId := GCP( )
If Abs( nProcessId ) > 0
RSProcess( nProcessId, mode )
Endif
RETURN
DLL32 FUNCTION DIBmpToJpg(SrcPath As String, DestPath As String, Quality As Long, progressive As Long) AS LONG PASCAL LIB "JPGDLL32.dll"
//----------------------------------------------------
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"
DLL32 STATIC FUNCTION FISAVE( nFormat AS LONG, hDib AS LONG, cFileName AS LPSTR, nFlags AS LONG ) AS BOOL PASCAL FROM "_FreeImage_Save@16" LIB hLib
//----------------------------------------------------
DLL32 FUNCTION WSAGetLastError() AS _INT PASCAL FROM "WSAGetLastError" LIB "wsock32.dll"
DLL32 FUNCTION inet_addr(cIP AS STRING) AS LONG PASCAL FROM "inet_addr" LIB "wsock32.dll"
DLL32 FUNCTION IcmpCreateFile() AS LONG PASCAL FROM "IcmpCreateFile" LIB "icmp.dll"
DLL32 FUNCTION IcmpCloseHandle(IcmpHandle AS LONG) AS LONG PASCAL FROM "IcmpCloseHandle" LIB "icmp.dll"
DLL32 FUNCTION IcmpSendEcho(IcmpHandle AS LONG,;
DestinationAddress AS LONG,;
RequestData AS STRING,;
RequestSize AS LONG,;
RequestOptions AS LONG,;
ReplyBuffer AS LPSTR,;
ReplySize AS LONG,;
Timeout AS LONG) AS LONG PASCAL FROM "IcmpSendEcho" LIB "icmp.dll"
function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
oIni := TIni():New( _inifile_ )
if _grava_ = .t.
oIni:Set( _section_, _entry_, _var_ )
endif
return oIni:Get( _section_, _entry_, _var_, _var_ )
function SetRegVar(nKey, cRegKey, cSubKey, uValue)
LOCAL oReg, cValue
nKey := IF(nKey == NIL, HKEY_CURRENT_USER, nKey)
uValue := IF(uValue == NIL, "", uValue)
oReg := TReg32():Create(nKey, cRegKey)
cValue := oReg:Set(cSubKey, uValue)
oReg:Close()
RETURN cValue
Function SetDefServer()
local HKEY_CURRENT_USER := 2147483649
local HKEY_LOCAL_MACHINE := 2147483650
local HKEY_CURRENT_CONFIG := 2147483653
local KEY_ALL_ACCESS := 983139
cServPath:= cFilePath( GetModuleFileName( GetInstance() ) )
cRegKey := HKEY_LOCAL_MACHINE
cSubKey := "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
cRegName := "POSSpoolServer"
cRegData := cServPath + "POSSRV.EXE"
SETREGVAR( cRegKey, cSubKey, cRegName, cRegData )
return nil
//-------------------------------------------------------------------------//
DLL32 ;
FUNCTION RegOpenKeyEx(nhKey AS LONG ,;
cAddress AS LPSTR ,;
nReserved AS LONG ,;
nSecMask AS LONG ,;
@nphKey AS PTR ); //By reference
;
AS LONG PASCAL FROM "RegOpenKeyExA" LIB nLibrary // "ADVAPI32.DLL"
DLL32 ;
FUNCTION RegQueryValueEx(nhKey AS LONG ,;
cAddress AS LPSTR ,;
nReserved AS LONG ,;
@nType AS PTR ,; //By reference
@cResult AS LPSTR ,; //By reference
@nResSize AS PTR ); //By reference
;
AS LONG PASCAL FROM "RegQueryValueExA" LIB nLibrary // "ADVAPI32.DLL"
DLL32 ;
FUNCTION RegCloseKey(nhKey AS LONG);
;
AS LONG PASCAL FROM "RegCloseKey" LIB nLibrary // "ADVAPI32.DLL"
DLL32 ;
FUNCTION RegEnumKeyEx(nhKey AS LONG ,;
nIndex AS LONG ,;
@cBuffer AS LPSTR ,; //By reference
@nBufSize AS PTR ,; //By reference
nReserved AS LONG ,; //Must be NULL
@cClass AS LPSTR ,; //By reference (can be NULL)
@nClsSize AS PTR ,; //By reference (can be NULL)
@pFileTime AS PTR ); //By reference (can be NULL)
;
AS LONG PASCAL FROM "RegEnumKeyExA" LIB nLibrary // "ADVAPI32.DLL"
DLL32 ;
FUNCTION RegSetValueEx(nhKey AS LONG ,;
cAddress AS LPSTR ,;
nReserved AS LONG ,;
nType AS LONG ,;
cData AS LPSTR ,;
nDataLen AS LONG );
;
AS LONG PASCAL FROM "RegSetValueExA" LIB nLibrary // "ADVAPI32.DLL"
DLL32 ;
FUNCTION EnumPrinters(nTypes AS LONG ,;
cName AS LPSTR ,;
nLevel AS LONG ,;
@cBuffer AS PTR ,; //By reference
nArrSize AS LONG ,;
@nBufLen AS PTR ,; //By reference
@nNumArr AS PTR ); //By reference
;
AS BOOL PASCAL FROM "EnumPrintersA" LIB nLibrary // "WINSPOOL.DRV"