FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour No encuentro explicaci贸n!! Alguna ayuda?
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
No encuentro explicaci贸n!! Alguna ayuda?
Posted: Mon Jul 19, 2010 03:35 PM
Hola a todos,
Estoy creando una rutina que me genere un archivo LOG en el disco con todos los procesos que se est谩n ejecutando en la PC mientras corre el sistema.
Funciona a medias, ya que en algunas oportunidades la funcion GetTasks() me regresa un array vacio.
Estoy probando varias cosas, pero me doy cuenta que no funciona aleatoriamente cuando llamo la funci贸n de grabacion del archivo con el timer, a veces graba todo bien y a veces no graba los procesos. El timer ejecuta la funci贸n cada 20 segundos.
La verdad es un comportamniento rar铆simo.

Les dejo el fuente de lo que estoy probando para que vean.
Code (fw): Select all Collapse
#include "FiveWin.ch"

// DEMO TASK AUDITOR //
Function Main()
Local oWnd
Local oTimer

DEFINE WINDOW oWnd;
聽 聽FROM 3,6 TO 20,70;
聽 聽COLOR "BG+/BG+";
聽 聽TITLE "Demo TaskAuditor ";

聽 聽oTimer:=TTimer():new( 1000 * 1 * 20,{ || TaskAuditor(2) }, oWnd ) ; oTimer:Activate()

聽 聽SET MESSAGE OF oWnd TO "Demo TaskAuditor" TIME DATE KEYBOARD

ACTIVATE WINDOW oWnd;
聽 聽 ON INIT TaskAuditor(0);
聽 聽 VALID TaskAuditor(1)

Return nil
//


// OBTENER LA IP DE LA PC //
Function GetIpAddress()
Local cName :=NetName(.F.)
Local aHosts:={}
Local cIp 聽 := ""

INetInit()

aHosts:=INetGetHosts (cName)

IF aHosts == NIL
聽 聽aHosts:=INetGetAlias (cName)
ENDIF

IF Len (aHosts) > 0
聽 cIp:=aHosts[1]
ENDIF

INetCleanUp()
Return cIp
//


// GRABO EL ARCHIVO DE LOG //
Function TaskAuditor(Par)
Local Q,Arch1,aTasks,cUser:="IT"
Local ArchLog,cBuffer

aTasks :=GetTasks()

ArchLog:='C:\AUDI\ ' + cUser+DTOS(DATE()) + ".Log"

cBuffer:=CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+REPLI("*",80)
cBuffer:=cBuffer+CHR(13)+" "
IF Par=0
聽 聽cBuffer:=cBuffer+CHR(13)+"INGRESO AL SISTEMA"
聽 聽cBuffer:=cBuffer+CHR(13)+"=================="
ENDIF
IF Par=1
聽 聽cBuffer:=cBuffer+CHR(13)+"SALIDA DEL SISTEMA"
聽 聽cBuffer:=cBuffer+CHR(13)+"=================="
ENDIF
IF Par=2
聽 聽cBuffer:=cBuffer+CHR(13)+"ACTUALIZACION DE PROCESOS"
聽 聽cBuffer:=cBuffer+CHR(13)+"========================="
ENDIF

cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+"USUARIO: "+cUser
cBuffer:=cBuffer+CHR(13)+"FECHA 聽: "+DTOC(DATE())
cBuffer:=cBuffer+CHR(13)+"HORA 聽 : "+TIME()
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+"DETALLE DEL EQUIPO"
cBuffer:=cBuffer+CHR(13)+"=================="
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+"NOMBRE DE EQUIPO 聽: "+GetEnv("COMPUTERNAME")
cBuffer:=cBuffer+CHR(13)+"USUARIO DE WINDOWS: "+GetEnv("USERNAME")
cBuffer:=cBuffer+CHR(13)+"DIRECCION IP 聽 聽 聽: "+GetIpAddress()
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+"PROCESOS EN USO"
cBuffer:=cBuffer+CHR(13)+"==============="
cBuffer:=cBuffer+CHR(13)+" "
FOR Q=1 TO LEN(aTasks)
聽 聽cBuffer:=cBuffer+CHR(13)+" 聽"+STRZERO(Q,6)+" - "+aTasks[Q]
NEXT
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+REPLI("*",80)
cBuffer:=cBuffer+CHR(13)+" "

IF !FILE(ArchLog)
聽 聽Arch1:=FCREATE(ArchLog)
聽 聽FCLOSE(Arch1)
ENDIF

Arch1:=FOPEN(ArchLog,2)
FSEEK(Arch1,0,2)
FWRITE(Arch1, cBuffer )
FCLOSE(Arch1)

Return .t.
//


Dejo tambi茅n el exe ya compilado para que vean. Link ac谩.

La verdad no se que es lo que pasa que a veces GetTasks() me regresa un array vac铆o.

Nota: El programa intenta crear y grabar el archivo LOG en el directorio "C:\AUDI\ "
Alguna sugerencia ser谩 bienvenida.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Tue Jul 20, 2010 02:54 PM
Listo!! Solucionado!

Acabo de crear un Demo para quien le interese el fuente s贸lo cont谩cteme por MSN.:-)
Les dejo el demo para descargar: Link de descarga (editado por Antonio: ojo, este fichero puede tener un virus!!!)

Espero les guste, y como siempre cualquier sugerencia es bienvenida.
Saludos, Esteban.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 366
Joined: Wed Aug 30, 2006 05:25 PM
Re: No encuentro explicaci贸n!! Alguna ayuda? (Solucionado)
Posted: Tue Jul 20, 2010 08:08 PM

Esteban: Es posible que el antivirus lo detecte como troyano?

Gracias y disculpa

Saludos

Gracias y Saludos

Ruben Fernandez - Uruguay

FWH 11.06, Harbour, Borland 5.82
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Tue Jul 20, 2010 08:34 PM
Ruben Fernandez wrote:Esteban: Es posible que el antivirus lo detecte como troyano?

Gracias y disculpa

Saludos

No deber铆a. Hasta ahora eres el primero que me dice eso. Es un programa desarrollado integramente en FWH.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 366
Joined: Wed Aug 30, 2006 05:25 PM
Re: No encuentro explicaci贸n!! Alguna ayuda? (Solucionado)
Posted: Tue Jul 20, 2010 08:40 PM

Esteban:
Voy a testearlo en otra maquina a ver si es el antivirus F-Secuere
Comento mas tarde el resultado.
Gracias

Gracias y Saludos

Ruben Fernandez - Uruguay

FWH 11.06, Harbour, Borland 5.82
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: No encuentro explicaci贸n!! Alguna ayuda? (Solucionado)
Posted: Tue Jul 20, 2010 08:57 PM

jorestojeda,

el kaspersky lo detecta como virus

saludos

William, Morales

Saludos



m茅xico.sureste
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Tue Jul 20, 2010 11:18 PM
wmormar wrote:jorestojeda,

el kaspersky lo detecta como virus

saludos

Justamente ahora dej茅 el c贸digo fuente en la oficina. Pero ma帽ana lo voy a postear aqu铆 para que sea analizado por alg煤n colega...
Es raro esto de que sea detectado como virus. Ya que no tiene nada fuera de lo com煤n. :-)
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Wed Jul 21, 2010 12:35 PM
Hola a todos...
Aqu铆 todo el c贸digo fuente del programa.

Code (fw): Select all Collapse
#include "FiveWin.ch"

#define GHW_HWNDFIRST 聽 0
#define GHW_HWNDNEXT 聽 聽2
#define GWW_HINSTANCE 聽-6

Static oWnd,oTray,oIcon0

// INICIO DEL SISTEMA //
Function Main()
Local oIcon1
Local oTimer

SET RESOURCES TO "Task.res"
DEFINE ICON oIcon0 RESOURCE "A_ICONO1"

IF !lIsDir( "C:\AUDI\ " )
聽 聽IF !lMkDir("C:\AUDI\ ")
聽 聽 聽 MsgStop("No se pudo crear el directorio de auditoria","Atenci贸n")
聽 聽 聽 Return nil
聽 聽ENDIF
ENDIF

MsgInfo("El pprograma crea un directorio en la unidad 'C'."+CHR(13)+;
聽 聽 聽 聽 "El directorio 'C:\AUDI\ ' en 茅l se crea un archivo Log con los procesos en ejecuci贸n"+CHR(13)+;
聽 聽 聽 聽 "El programa actualiza el archivo LOG cada 20 segundos","Detalles del sistema")

SetTaskManager( .f. )

MsgAlert("Lo primero que hago es dehabilitar el Administrador de tareas para que no puedan cerrar el programa desde ahi!!","Atenci贸n")

DEFINE WINDOW oWnd TITLE "Complementos de sistema" ICON oIcon0;

聽 聽oTimer:=TTimer():New( 1000 * 1 * 20,{ || TaskAuditor() } , oWnd ) ; oTimer:Activate()

ACTIVATE WINDOW oWnd ;
聽 聽 聽ON INIT oTray:=TTrayIcon():New( oWnd, oIcon0, "Auditor de procesos en ejecuci贸n",;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 {|| MsgInfo("Demo de sistema auditor de procesos"+CHR(13)+;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "Autor: Ojeda Esteban Eduardo","Acerca de...") },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 {|nRow,nCol| MenuTray(nRow,nCol,oTray)}) ;
聽 聽 聽VALID ( .f. )

Return nil
//


// MENU DEL SISTEMA //
Function MenuTray(nRow,nCol,oTray)
Local oMenu

MENU oMenu POPUP 2007
聽 聽MENUITEM "Acerca de..." 聽 ACTION MsgInfo("Demo de sistema auditor de procesos"+CHR(13)+;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "Autor: Ojeda Esteban Eduardo","Acerca de...")
聽 聽SEPARATOR
聽 聽MENUITEM "Cerrar proceso" ACTION IF (MsgNoYes("Est谩 seguro que desea cerrar el proceso?","Por favor, seleccione..."),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 (MsgInfo("No dejo cerrar la aplicacion de todos modos. Cerrar desde el administrador de tareas el TASK32.exe","Atenci贸n"),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽MsgAlert("Ahora habilito nuevamente el Administrador de tareas!!","Atenci贸n"),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SetTaskManager( .t. )),)
ENDMENU

ACTIVATE POPUP oMenu AT nRow, nCol OF oTray:oWnd

Return nil
//


// GRABO EL ARCHIVO DE LOG //
Function TaskAuditor()
Local Q,Dia,Mes,Anio,Arch1,aTasks,cUser:="IT"
Local ArchLog,cBuffer

aTasks :=GetTasks()

ArchLog:="C:\AUDI\ "+cUser+DTOS(DATE())+".Log"

cBuffer:=CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+REPLI("*",80)
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+"AUDITOR DE PROCESOS"
cBuffer:=cBuffer+CHR(13)+CHR(10)+"==================="

cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+"FECHA 聽: "+DTOC(DATE())
cBuffer:=cBuffer+CHR(13)+CHR(10)+"HORA 聽 : "+TIME()
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+"DETALLE DEL EQUIPO"
cBuffer:=cBuffer+CHR(13)+CHR(10)+"=================="
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+"NOMBRE DE EQUIPO 聽: "+GetEnv("COMPUTERNAME")
cBuffer:=cBuffer+CHR(13)+CHR(10)+"USUARIO DE WINDOWS: "+GetEnv("USERNAME")
cBuffer:=cBuffer+CHR(13)+CHR(10)+"DIRECCION IP 聽 聽 聽: "+GetIpAddress()
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+"PROCESOS EN USO"
cBuffer:=cBuffer+CHR(13)+CHR(10)+"==============="
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
FOR Q=1 TO LEN(aTasks)
聽 聽cBuffer:=cBuffer+CHR(13)+CHR(10)+" 聽"+STRZERO(Q,6)+" - "+aTasks[Q]
NEXT
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "
cBuffer:=cBuffer+CHR(13)+CHR(10)+REPLI("*",80)
cBuffer:=cBuffer+CHR(13)+CHR(10)+" "

IF !FILE(ArchLog)
聽 聽Arch1:=FCREATE(ArchLog)
聽 聽FCLOSE(Arch1)
ENDIF

Arch1:=FOPEN(ArchLog,2)
FSEEK(Arch1,0,2)
FWRITE(Arch1, cBuffer )
FCLOSE(Arch1)

Return .t.
//


// OBTENER LA IP DE LA PC //
Function GetIpAddress()
Local cName :=NetName(.F.)
Local aHosts:={}
Local cIp 聽 := ""

INetInit()

aHosts:=INetGetHosts (cName)

IF aHosts == NIL
聽 聽aHosts:=INetGetAlias (cName)
ENDIF

IF Len (aHosts) > 0
聽 cIp:=aHosts[1]
ENDIF

INetCleanUp()
Return cIp
//


// CARGAR TODOS LOS PROCESOS EN EJECUCION EN UN ARRAY //
Function GetTasks()

聽 聽local hWnd 聽 := GetWindow( oWnd:hWnd, GHW_HWNDFIRST )
聽 聽local aTasks := {}
聽 聽local cTask

聽 聽WHILE hWnd != 0
聽 聽 聽 #ifdef __CLIPPER__
聽 聽 聽 聽 聽cTask = GetModuleFileName( GetWindowWord( hWnd, GWW_HINSTANCE ) )
聽 聽 聽 #else
聽 聽 聽 聽 聽cTask = GetWindowText( hWnd )
聽 聽 聽 #endif

聽 聽 聽 if AScan( aTasks, cTask ) == 0
聽 聽 聽 聽 聽AAdd( aTasks, cTask )
聽 聽 聽 endif
聽 聽 聽 hWnd = GetWindow( hWnd, GHW_HWNDNEXT )
聽 聽END

Return aTasks
//


#define HKEY_CURRENT_USER 2147483649
#define REG_DWORD 4

// HABILITA O DESHABILITA EL ADMINITRADOR DE TAREAS //
Function SetTaskManager( lOnOff )
Local hKey := 0

IF lOnOff
聽 聽RegCreateKey( HKEY_CURRENT_USER,;
聽 聽"Software\Microsoft\Windows\CurrentVersion\Policies\System", @hKey )
聽 聽RegSetValue( hKey, "DisableTaskMgr", 0, REG_DWORD, L2BIN( 0 ), 4 )
聽 聽RegCloseKey( hKey )
ELSE
聽 聽RegCreateKey( HKEY_CURRENT_USER,;
聽 聽"Software\Microsoft\Windows\CurrentVersion\Policies\System", @hKey )
聽 聽RegSetValue( hKey, "DisableTaskMgr", 0, REG_DWORD, L2BIN( 1 ), 4 )
聽 聽RegCloseKey( hKey )
ENDIF

Return nil
//

//-----------------------------------------------------------------------------------------//
DLL32 static FUNCTION REGCREATEKEY( hKey AS LONG, cSubKey AS LPSTR, @nHandle AS ;
聽 聽 聽 PTR ) AS LONG PASCAL FROM "RegCreateKeyA" LIB "advapi32.dll"

DLL32 static FUNCTION REGSETVALUE( hKey AS LONG, cValueName AS LPSTR, nReserved AS ;
聽 聽 聽 LONG, nType AS DWORD, cData AS LPSTR, nData AS DWORD ) AS LONG ;
聽 聽 聽 PASCAL FROM "RegSetValueExA" LIB "advapi32.dll"

DLL32 static FUNCTION REGCLOSEKEY( hKey AS LONG ) AS LONG ;
聽 聽 聽 PASCAL FROM "RegCloseKey" LIB "advapi32.dll"
//-----------------------------------------------------------------------------------------//


Haber si alguien tiene idea de por qu茅 algunos antivirus lo detectan como virus...
Saludos, Esteban.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Thu Jul 22, 2010 11:18 AM
Esteban,

jrestojeda wrote:
Haber si alguien tiene idea de por qu茅 algunos antivirus lo detectan como virus...


las aplicaciones 'normales' no tienen que tener acceso a la lista de tareas y cosas por el estilo, para poder hacerlo deber铆an tener permisos de administrador. Por lo visto en tu c贸digo te metes con el administrador de tareas deshabilit谩ndolo y cosas parecidas.
Si no supiese quien eres, opinar铆a igual que el antivirus :-). Seguramente habr谩 alguna opci贸n para decirle al antivirus que eres 'amigo', o bien ejecutar el proceso como administrador.

Supongo que con el tiempo tendremos m谩s limitaciones de este tipo. Cuando apareci贸 el Vista tra铆a consigo el control de acceso, similar a los unixces, que se pod铆a deshabilitar, y creo que la cosa va a ir en ese sentido.

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Thu Jul 22, 2010 01:00 PM

Hola Carlos...
Puede ser eso que no le guste, pero estoy usando el programa con un usuario Administrador.
Una soluci贸n simple es agregarlo a las excepciones del antivirus. Pero de todas formas estar铆a bueno que no suceda eso.

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 880
Joined: Fri Jan 12, 2007 08:35 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Fri Jul 23, 2010 01:58 PM

El primer vichito hecho en FWH sin querer :lol:

Saluditos :wink:

Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

s茅蕦菨晒 谉蓯 蓯蕠s菨 opun莎 菨蕠s菨
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Sat Jul 24, 2010 01:17 AM
AIDA wrote:El primer vichito hecho en FWH sin querer :-)


Saluditos :-)

Aida...
A t铆 tambi茅n te salta como virus??
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 880
Joined: Fri Jan 12, 2007 08:35 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Sat Jul 24, 2010 05:20 AM

sipi :shock:

Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

s茅蕦菨晒 谉蓯 蓯蕠s菨 opun莎 菨蕠s菨
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: No encuentro explicaci贸n!! Alguna ayuda?
Posted: Sat Jul 24, 2010 08:09 PM

Entonces podemos hacer que se active cada 2 meses , para ir a cobrarle al cliente ?
jeje. :lol:

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "

Continue the discussion