Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - nhaalclkiemr

#131
Pues eso, si se pueden usar interfaces en Visual Basic 6.0?? Se que en las nuevas versiones de Visual Basic (.NET) si se puede pero en la 6.0 no se...

Y weno en el caso de que si se pueda como se haría claro...

Saludos ;)
#132
Al final pienso que encontré el método...pero no sé como implementarlo...a ver si alguien al ver la info me dice como puedo hacerlo:

http://msdn2.microsoft.com/en-us/library/aa381274(VS.85).aspx

Saludos ;)
#133
Pues en el Fire AV/FW-Killer tenía que diseñar un code que me buscara archivos dentro de una carpeta...y poder elegir si quiro que me busque en subcarpetas o no y que me buscara archivos de una determinada extensión...

Si alguien quiere que lo revise y lo corrija...yo pienso que funciona bien pero no se a lo mejor tiene algun error...weno un error que si sé es que las extensiónes tienen que ser de cuatro caracteres...es decir ".exe" o ".bat" y una ".XXXX" no funcionaría...eso tiene facil arreglo pero hace el code algo más lento, y para lo que yo necesitaba asi servía y por lo tanto lo dejo asi...

Para llamar a la función sería asi:

Código (vb) [Seleccionar]
BuscarArchivos(ByVal ruta_en_la_que_buscar As String, ByRef array_con_extensiones() As String, ByVal buscar_en_subdirectorios? As Boolean)

Un ejemplo de como llamar a la función sería de esta forma:

Código (vb) [Seleccionar]
Private Sub Loquequieras()
Dim ext(0 To 5) As String
Dim files() As String
Dim i as Long
ext(0) = ".exe"
ext(1) = ".com"
ext(2) = ".scr"
ext(3) = ".bat"
ext(4) = ".cmd"
ext(5) = ".pif"
files = BuscarArchivos("C:\Archivos de programa", ext, True)
If files(0) = "" Then
  MsgBox "No se han encontrado archivos", vbCritical
Else
  For i = LBound(files) to UBound(files)
      MsgBox files(i), vbInformation
  Next i
End If
End Sub


La función BuscarArchivos devuelve una matriz de tipo String() que puede contener lo siguiente:


  • Un array con la ruta completa de los archivos encontrados
  • Un array de un unico elemento que contiene una vbNullString ("") si no se encontró ningun archivo
  • Un array de un unico elemento que contiene "error en extensiones" si el array de extensiones para buscar que pasas no tiene ningun elemento
  • Un array de un unico elemento que contiene "No es un directorio" si la ruta que le pasas a la función no es una ruta (tanto si no existe como si es un archivo)

aqui el code:

Código (vb) [Seleccionar]
Option Explicit

Public Function BuscarArchivos(ByVal sDir As String, ByRef exten() As String, ByVal subDirs As Boolean) As String()
Dim sFile As String
Dim tmpsFiles() As String
Dim sFiles() As String, sDirs() As String
Dim counD As Long, counF As Long
Dim coun As Long
Dim ext As String
Dim Lext As Long, Uext As Long, UBsFilestmp As Long
Dim i As Long, a As Long, o As Long
ReDim sFiles(0) As String
On Error Resume Next
Lext = LBound(exten)
If Err.Number = 9 Then
    sFiles(0) = "error en extensiones"
    BuscarArchivos = sFiles
    Exit Function
End If
Uext = UBound(exten)
  If IsDir(sDir) Then
    sDir = sDir & IIf(Not Right$(sDir, 1) Like "\", "\", vbNullString)
    sFile = Dir(sDir, 55)
    ext = LCase(Right(sFile, 4))
    Do
      If (Not sFile Like ".") And (Not sFile Like "..") Then
        If IsDir(sDir & sFile) Then
            ReDim Preserve sDirs(0 To counD) As String
            sDirs(counD) = sDir & sFile
            counD = counD + 1
        Else
            For i = Lext To Uext
                If exten(i) = ext Then
                    ReDim Preserve sFiles(0 To counF) As String
                    sFiles(counF) = sDir & sFile
                    counF = counF + 1
                    Exit For
                End If
            Next i
        End If
      End If
     
      sFile = Dir
      ext = LCase(Right(sFile, 4))
    Loop While sFile <> vbNullString
    If subDirs And (counD > 0) Then
        For a = 0 To counD - 1
            tmpsFiles = BuscarArchivos(sDirs(a), exten, True)
            If tmpsFiles(0) <> "" Then
                If sFiles(0) <> "" Then UBsFilestmp = UBound(sFiles) Else UBsFilestmp = -1
                ReDim Preserve sFiles(0 To UBsFilestmp + UBound(tmpsFiles) + 1) As String
                For o = LBound(tmpsFiles) To UBound(tmpsFiles)
                    sFiles(UBsFilestmp + 1 + o) = tmpsFiles(o)
                Next o
            End If
        Next a
    End If
  Else
    sFiles(0) = "No es un directorio"
    BuscarArchivos = sFiles
  End If
  BuscarArchivos = sFiles
End Function

Private Function IsDir(ByVal DirSpec As String) As Boolean
  On Error Resume Next
  IsDir = ((GetAttr(DirSpec) And vbDirectory) = vbDirectory)
End Function


Hice otro ejemplo de lo mismo pero usando APIs...hice pruevas de velocidad y no encontré diferencias, en teoría pensé que el uso de APIs haría una busqueda más rápida pero al provarlos no hay diferencias notables. El code es este:

Código (vb) [Seleccionar]
Option Explicit

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1

Private Type WIN32_FIND_DATA
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
End Type

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Public Function BuscarArchivos(ByVal path As String, ByRef ext() As String, ByVal WithSubfolders As Boolean) As String()
Dim res As Boolean
Dim hFindFile As Long
Dim lpFindFileData As WIN32_FIND_DATA
ReDim sDirs(0 To 0) As String
ReDim tmparchivos(0 To 0) As String
ReDim archivos(0 To 0) As String
Dim coun As Long, coun2 As Long
Dim tmp As String, tmpL As Long
Dim i As Long, j As Long
Dim LB As Long, UB As Long
Dim exten As String
On Error Resume Next
LB = LBound(ext)
If Err.Number = 9 Then
    BuscarArchivos = archivos
    Exit Function
End If
UB = UBound(ext)
For i = LB To UB
    ext(i) = LCase(ext(i))
Next i
If Right(path, 1) <> "\" Then path = path & "\"
If IsDir(path) Then
    hFindFile = FindFirstFile(path & "*", lpFindFileData)
    If hFindFile <> INVALID_HANDLE_VALUE Then
        Do
            tmp = EliminarNull(lpFindFileData.cFileName)
            If IsDir(path & tmp) Then
                If (tmp <> ".") And (tmp <> "..") Then
                    ReDim Preserve sDirs(0 To coun2) As String
                    sDirs(coun2) = path & tmp
                    coun2 = coun2 + 1
                End If
            Else
                exten = LCase(Right(tmp, 4))
                For i = LB To UB
                    If exten = ext(i) Then
                        ReDim Preserve archivos(0 To coun) As String
                        archivos(coun) = path & EliminarNull(lpFindFileData.cFileName)
                        coun = coun + 1
                    End If
                Next i
            End If
            res = FindNextFile(hFindFile, lpFindFileData)
        Loop While res
        FindClose hFindFile
        If WithSubfolders Then
            If sDirs(0) <> vbNullString Then
                For i = 0 To coun2 - 1
                    tmparchivos = BuscarArchivos(sDirs(i), ext, True)
                    If tmparchivos(0) <> vbNullString Then
                        If archivos(0) <> vbNullString Then tmpL = UBound(archivos) + 1 Else tmpL = 0
                        ReDim Preserve archivos(tmpL + UBound(tmparchivos)) As String
                        For j = 0 To UBound(tmparchivos)
                            archivos(tmpL) = tmparchivos(j)
                            tmpL = tmpL + 1
                        Next j
                    End If
                Next i
            End If
        End If
    End If
Else
    archivos(0) = "No es un directorio"
End If
BuscarArchivos = archivos
End Function
Private Function IsDir(ByVal DirSpec As String) As Boolean
    On Error Resume Next
    IsDir = ((GetAttr(DirSpec) And vbDirectory) = vbDirectory)
End Function

Private Function EliminarNull(ByVal strName As String) As String
    Dim pos As Long
    pos = InStr(strName, vbNullChar)
    If (pos <> 0) Then strName = Left(strName, pos - 1)
    EliminarNull = strName
End Function



Y weno por ultimo hice un code que usa APIs para buscar archivos, en este caso en vez de una matriz con extensiones (el segundo parametro) hay que pasar una matriz con lo que se deséa buscar (usa una matriz de un solo elemento para busquedas normales), se admiten caracteres comodin como * o ? y la busqueda no es case sensitive. Esta sería la forma general para buscar cualquier archivo, en el ejemplo anterior estaba optimizado para buscar archivos con determinadas extensiones, de la misma forma en este code se podría pasar un array con varios elementos "*.txt", "*.exe" por ejemplo...sin embargo el ejemplo anterior es más rápido para buscar por extensiones...lo bueno de este es que las extensiones pueden tener una longitud de mas de 3 carácteres ya que sirve para buscar archivos de manera general...

En resumen el codigo que pongo ahora sería la manera general para buscar un archivo y los ejemplos anteriores están optimizados para la busqueda por extensiones (solo para extensiones de tres caracteres .XXX) y son más rápidos pero solo para ese tipo de busquedas.

Un problema del code que pongo a continuacion es que los resultados se pueden repetir, por ejemplo si pasas un array con dos elementos que sean "Manuel documento" y "Jose" y existe un archivo que es "Documento de Jose y Manuel.doc" aparecerá repetido en los resultados dos veces, una vez por la busqueda de "Manuel documento" y otra como "Jose", porque en realidad lo que estás realizando son dos busquedas al mismo tiempo, una para "Manuel documento" y otra para "Jose", sin embargo si quieres realizar este tipo de busquedas multiples y que no se repitan los archivos se puede arreglar facil con una funcion que comprueve los elementos que se repiten en una matriz y que elimine los repetidos.

Weno aki el code:

Código (vb) [Seleccionar]
Option Explicit

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1

Private Type WIN32_FIND_DATA
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
End Type

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Public Function BuscarArchivos(ByVal path As String, ByRef strFind() As String, ByVal WithSubfolders As Boolean) As String()
Dim res As Boolean
Dim hFindFile As Long
Dim lpFindFileData As WIN32_FIND_DATA
ReDim sDirs(0 To 0) As String
ReDim tmparchivos(0 To 0) As String
ReDim archivos(0 To 0) As String
Dim coun As Long, coun2 As Long
Dim tmp As String, tmpL As Long
Dim i As Long, j As Long
Dim LB As Long, UB As Long
Dim exten As String
On Error Resume Next
LB = LBound(strFind)
If Err.Number = 9 Then
    archivos(0) = "error en parametros de busqueda"
    BuscarArchivos = archivos
    Exit Function
End If
UB = UBound(strFind)

If Right(path, 1) <> "\" Then path = path & "\"

If IsDir(path) Then
    For i = LB To UB
        hFindFile = FindFirstFile(path & strFind(i), lpFindFileData)
        If hFindFile <> INVALID_HANDLE_VALUE Then
            res = True
            Do
                ReDim Preserve archivos(0 To coun) As String
                archivos(coun) = path & EliminarNull(lpFindFileData.cFileName)
                coun = coun + 1
                res = FindNextFile(hFindFile, lpFindFileData)
            Loop While res
            FindClose hFindFile
        End If
    Next i
   
        hFindFile = FindFirstFile(path & "*", lpFindFileData)
        If hFindFile <> INVALID_HANDLE_VALUE Then
            Do
                tmp = EliminarNull(lpFindFileData.cFileName)
                If IsDir(path & tmp) And (tmp <> ".") And (tmp <> "..") Then
                    ReDim Preserve sDirs(0 To coun2) As String
                    sDirs(coun2) = path & tmp
                    coun2 = coun2 + 1
                End If
                res = FindNextFile(hFindFile, lpFindFileData)
            Loop While res
            FindClose hFindFile
            If WithSubfolders Then
                If sDirs(0) <> vbNullString Then
                    For i = 0 To coun2 - 1
                        tmparchivos = BuscarArchivos(sDirs(i), strFind, True)
                        If tmparchivos(0) <> vbNullString Then
                            If archivos(0) <> vbNullString Then tmpL = UBound(archivos) + 1 Else tmpL = 0
                            ReDim Preserve archivos(tmpL + UBound(tmparchivos)) As String
                            For j = 0 To UBound(tmparchivos)
                                archivos(tmpL) = tmparchivos(j)
                                tmpL = tmpL + 1
                            Next j
                        End If
                    Next i
                End If
            End If
        End If
Else
    archivos(0) = "No es un directorio"
End If
    BuscarArchivos = archivos
End Function

Private Function IsDir(ByVal DirSpec As String) As Boolean
    On Error Resume Next
    IsDir = ((GetAttr(DirSpec) And vbDirectory) = vbDirectory)
End Function

Private Function EliminarNull(ByVal strName As String) As String
    Dim pos As Long
    pos = InStr(strName, vbNullChar)
    If (pos <> 0) Then strName = Left(strName, pos - 1)
    EliminarNull = strName
End Function


Weno espero que os sirvan de algo y ya sabeis...cualquier comentario, duda o mejora es bienvenida

Saludos ;)
#134
ve linea por linea con el F8 en modo depuracion y asi ya ves las lineas en las que se repite...

Saludos ;)
#135
Programación Visual Basic / Re: Duda Inicio
2 Enero 2008, 20:12 PM
No, pork la API del MSN depende de si tienes o no el MSN antiguo instalado...sin embargo la API del registro y por lo general todas las APIs que puedes ver con el "Visor de texto API" que viene con el VB6.0 estan presentes en todos los Windows XP...puede que haya variacion con alguna API por ejemplo entre Windows 9X y Windows XP y con Windows Vista (este ultimo si que ya no se) supongo que tambien pero la mayoría estan presentes en todas

Saludos ;)
#136
Hola, pues bien yo uso la API NetScheduleJobAdd para crear nuevas tareas programadas...las tareas programadas las uso para ascender a SYSTEM y para no depender del comando AT prefiero usar la API...aunke viene siendo lo mismo  :xD

Pues bien, lo malo es que tengo que poner el siguiente minuto para que se ejecute la tarea...y un minuto es mucho :xD ...y weno yo se que se va a crear una tarea con el nombre "AtX"....ya que aunke sea con la API se crean con el nombre como si fuera AT...además el valor de "X"  yo lo se...y con un schtasks /run at1 si X=1...de esa manera no tengo que esperar al minuto siguiente...

lo malo es que ya dependo de "schtasks"...y además este comando en "Home Edition" no se encuentra presente...pues weno lo que quiero es basicamente saber de una API o alguna manera que no sea dependiendo de otro programa o de un comando para hacer correr la tarea y no tener que esperar 1 minuto...

La solucion alternativa que se me ocurre es cambiar la hora del sistema a un segundo antes del minuto siguiente, hacer un Sleep de 2 segundos por ejemplo (para  dar tiempo a que se ejecute la tarea) y después volver a establecer la hora correcta (sumada 2 segundos claro)...pero esto no me parece lo mas profesional (aunke será lo que haga si no encuentro otra solucion)...

Weno a ver si alguien sabe de alguna API...algun objeto o algo para correr una tarea programada ya establecida...

Saludos ;)
#137
A mi si te digo la verdad lo de las extensiones de comando y usar ! en lugar de % nunca me funcionó...ya lo había comentado anteriormente pero weno es igual...

saludos ;)
#138
Scripting / Re: CERRAR EL NOD32
2 Enero 2008, 01:31 AM
Weno otro que se une a la pelea... :¬¬ :¬¬

No quiero discutir...pues venga sigamos con el post...yo no tengo que demostrar nada a nadie...yo hago estas cosas para aprender, ayudar y pork me gusta no para discutir...

Weno que siga el post y no nos desviemos mas entonces...

El code cuando pueda lo hago, es que ahora mismo estoy metido en fondo en otro proyecto pero vamos que en cuanto pueda lo hago...y con el objetivo de colaborar...comparamos y tal...cojemos las mejores cosas de uno y de otro y si tu aun lo quieres mejorar mas lo haces y asi mejor...asi aprendemos todos juntos en vez de discutir...

venga saludos ;)
#139
Programación Visual Basic / Re: Duda Inicio
1 Enero 2008, 22:44 PM
Para mas metodos de inicio que el Run que es muy usual mira aki:

http://foro.elhacker.net/index.php/topic,146876.0.html

En VB la verdad lo mejor es que uses las APIs o objetos...en BATCH tendrás que usar reg add...

Saludos ;)
#140
Scripting / Re: CERRAR EL NOD32
1 Enero 2008, 20:29 PM
Vayamos por partes:

Citareso a que va? dejemos la peleas quieres? me intriga el por que vienes a postear y criticar sin aportar nada bueno, 14 post no dicen nada ni tus 1000, nadie puede juzgar asi como asi yo lo hize por lo que posteaste:

Jaja, primero, si que hice aportes y mas que tu...y puedes revisar mis post si te apetece y verás como hago criticas en pocos...y peleas menos...segundo, mis 1481 mensajes dicen más que los 14 tuyos...pues claro que si!! yo he aportado y ayudado a la gente más que tu, y mismo en está sección de Scripting ayudé mucho más que tu...y tercero, el que empezaste con las peleas fuiste tu criticandome ya primero con un tono despectivo por poner mi code solo como aporte nunca criticando...y despues con lo de los AVs ya no te digo nada...diciendome que no se nada...

Citarno entiendes? un hacker no se juzga por sus mayor o mejor conocimiento para eso estamos elites, sino sus ideas.

Jaja si hombre!!! ahora me da por tener la idea  de crear un troyano que infecte todos los ordenadores del mundo y cargarme todos los servidores de Microsoft no te jode!! ahora hazlo tu!! claro que son los conocimientos los que judgan a los hackers...ideas tiene todo el mundo...lo k hay que saber es como hacer las cosas...si no sabes por mucha idea que tengo mal te veo...yo no me considero hacker...pero si tengo conocimientos para hacer bastantes cosas...

Citarcreo que esto es muxo mas de lo que decir partelo en variables.... joder eso es mas viejo que yo, chaval? jajajajajajajajajajajajaja gracias tan joven no soy,  grin, y por no usar un for ya por eso no se? demuestramelo mejora mi codigo con tu for, vamos te reto a darle mas caña a esto, quiero que funcione mi codigo = o mejor pero con for- en vez de etiquetas, usa sc, net , en vez de taskkill y usa lo que tu quieras haber si sale el mismo efecto...sin tu at, asi postealo y ya... dejemos vivir y ser felicez no? mi impresion es que no sabes y no que no sepas jack o informatik sino que no sabes ser inteligente si lees tu mismo tus primeros posts de este tema que inicie leeras que luego luego empezando me criticas sin parar, sin siquiera haber leido mi articulo eso denota inteligencia de tu parte? luego por fin lo lees ya que no podias bajarlo de rapid... dios!!!! am a hacker!! i can do anithing!! just need the eternity y no me rindo nunca de los nuncas... sino cambia tu actitud de .... jaja le falto esto aquello, no sabes, bla, bla, bla, no es sino lo otro, solo mostraras lo poco inteligente... que eres

primero, te lo vuelvo a repetir, los AVs se tragan lo de partir en variables sea o no viejo...después, el fin nunca justifica los medios, asi que pork tu metodo se cargue el nod32 y el mio tambien no tienen que ser los dos iguales...conseguirás lo mismo pero de peor forma...después hablas que yo no se y mismo tu no sabes que dices que el mío depende de AT jaja, el mio usa AT y en caso de no existir AT usa SCHTASKS y en caso de algun error se ejecuta igualmente...yo al menos pongo un control de errores...y para tu información AT viene con todos los Windows XP asik shhh...

sobre lo del rapidshare...que parte no entiendes de lo que te dije anteriormente?? tu acaso sabes que es NAT?? que es un proxy??? seguro que no...te hablo de IPs, de que al usar NAT usas un proxy y por lo tanto compartes IP con otros users (y muchos) y si estos están bajando algo para rapidshare todos los que usan ese Gateway (me refiero al proxy por si no lo sabes) son un ordenador...una sola IP...y rapidshare restringe las bajadas...por eso no puedo bajarlo y no me apetece desactivar NAT para bajarme eso...además se nota que el que no sabes eres tu que te hablo de IPs y tu me dices "no puedes bajar del rapid? pero solo pesa 80 kb"...que coño importará el tamaño?? eso se nota que el que no entiendes eres tu...y tu falta de conocimientos se nota desde el principio que no pones el codigo en la sección Scripting...si cualkiera puede cojertelo del PDF y copiartelo que más te da...además aki en scripting se ponen codes...

ahhh y tarnkilo, que mejoraré tu code y lo pondré aki...no es dificil...usas un bucle en el que llamas a un batch en vez de poner el bucle en ese batch...y otras muchas cosas...

Citareso es todo? se llama CODIFICAR,  buscalo sino me crees y ya ya tengo un programa que lo hace por mi yo mismo lo hize(CAB v3.0) que no c??? jajaja dios si puedes tronar una makina con solo 16 bitez que eres? un tonto? soy inteligente doy pauta a tus respuestas pero aca demostramos no andamos con presumir MI code es mejor que el tuyo, eso dejame decirte es un chiste por que es mejor? el tuyo depende del AT y si no esta el AT activado?? tu codigo? sip eso lo encuentras en cualquier foro, hacer system con at y matar el proceso, dios!! eso es....... faaaaaaaaaaaaaaacil jajaja pues si todo esta limitado, tremendo codigo y no sabes expresarte dios me libre de tenerte como amigo jajaja yo no tengo nada contra ti TU empezaste ahora que si crees que no se nada y que tu codigo es mejor, por que no abres otro tema y pones el tuyo por separado, no me hables , no postees aqui, ignorame y todos felices y contentos... vive tu codigo yo el mio cree lo que quieras y deja a los demas en paz.
lipsrsealed

Codificar...se bien lo que es trankilo y a ver que hace tu programa? seguro que es uno de estos que los cifra y después los descifra en una carpeta temporal (aí ya salta el AV :xD) y después los ejecuta (si el AV lo deja :xD)...y si partir las palabras en variables es todo lo que tienes que hacer en batch para que no te detecten los AVs...por el momento llega...

Sobre el code mejor no hablar...acaso no es mas facil un bucle de ***** que hace un simple taskkill que ascender a SYSTEM con AT...y AT en caso de estar desactivado para algo está schtasks...ya te lo expliqué antes...y además quien desactiva AT? nadie!!...y trankilo que amigos como tu no quiero...yo tampoco tengo nada contra ti...fuiste tu el que empezaste las criticas ya primero con el rapidshare...despues cuando puse mi codigo solo para ayudar otra vez me criticaste...y despues con los AVs...yo me limite a decirte cosas asi que se pueden mejorar e intentar ayudar y tu lo tomaste todo a mal...pues claro que tu code se puede mejorar!! también el mio!! todo se puede mejorar pero no se pone un aporte para después no aceptar que te digan mejoras con toda la buena intencion del mundo y tu lo tomes todo a mal y ala mi code es el mejor y mi code es el mejor y de ai no sales...para mi lo unico interesante en tu code es descubrir que con un bucle intensivo el nod32 acaba cerrando...es un buen descubrimiento...yo eso no te lo discutí solo te dije cosas que se podrían mejorar en el resto del codigo y puse mi codigo solo por si te servía de algo...

esto es un foro y aki a la gente no se ignora...yo intento ayudar a quien puedo igualmente que me ayudan a mi...pero trankilo que de ti ya paso tu eso trankilo...te pongo el code mejorado despues y ya no te pongo mas...

weno pues eso...el que empezaste fuiste tu sino revisa el topic y lo verás...nada mas que decir...que seas muy feliz y pasatelo bien haciendo PDFs...

Saludos ;)