Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: el_chente23 en 23 Agosto 2005, 18:46 pm



Título: Descripcion de Archivo
Publicado por: el_chente23 en 23 Agosto 2005, 18:46 pm
Hola a todos, tengo un problema, tengo tiempo tratando de obtener  la descripcion de un archivo, esa que viene cuando el das propiedades al archivo y en la pestaña de resumen viene una serie de propiedades del archivo que necesito leer, pero ya e buscado funciones o algo para acceder a el y no he podido, intente con la funcion GetFileTitle, pero este me da la decripcion que viene en la pestaña de General de las propiedades, pero ese no me sirve, si alguien me puede ayudar se lo agradeceria.

Un Saludo


Título: Re: Descripcion de Archivo
Publicado por: sorcerer en 23 Agosto 2005, 20:31 pm
vas a: project->project1 propietes y hay configuras todo


Título: Re: Descripcion de Archivo
Publicado por: Slasher-K en 24 Agosto 2005, 03:32 am
El objeto App tiene todas las propiedades del programa, la descripción, versión, Nombre de la compañía, etc.

La propiedad FileDescription te da la descripción del programa en tiempo de ejecución.

Saludos.


Título: Re: Descripcion de Archivo
Publicado por: el_chente23 en 25 Agosto 2005, 19:25 pm
Hola, creo que no me explique bien, quiero obtener esa informacion pero de un archivo x, no de mi proyecto, por ejemplo, tengo un archivo txt, si le das click derecho al archivo y le das propiedades, te aparece la venta de propiedades con 4 pestañas, la ultima pestaña, que es la de resumen, es la que tiene la informacion que necesito sacar por medio de un programa en vb, espero haberme explicado mejor.

Saludos


Título: Re: Descripcion de Archivo
Publicado por: NYlOn en 26 Agosto 2005, 00:50 am
mmm.... me parece haber visot un par de OCX sobre es0...
ahora no recuerdo donde xD, pero busca en (L) Google (L) q seguro encontras XDDDD
si me acuerdo edit0 y t avis0 ::D

CyA


Título: Re: Descripcion de Archivo
Publicado por: Slasher-K en 26 Agosto 2005, 01:13 am
Ya me parecía que era eso :P. Hace un tiempo puse un post en donde se encontraba el código para eso. Te dejo el fragmento de código. Agrega como referencia la libería win.tlb, ya puse el link muchas veces :P.

Código:
Type FileVersionInfo
    CompanyName      As String
    FileDescription  As String
    FileVersion      As String
    InternalName     As String
    LegalCopyright   As String
    OriginalFileName As String
    ProductName      As String
    ProductVersion   As String
    Comments         As String
    FileOS           As String
End Type

Function GetVersionInfo(Filename As String) As FileVersionInfo
            Dim pFixedInfo As VS_FIXEDFILEINFO
            Dim pFileInfo As FileVersionInfo
            Dim sCharset$, btCharset(4) As Byte
            Dim lCharset&, hCharBlck&
            Dim lInfoSize&, hVersion&
            Dim sVerData$, sVerBlck$, lLen&
            Dim sVerInfo$(9), sData$, i%, r&
            Dim lBinType&
           
  lInfoSize = GetFileVersionInfoSize(Filename, 0&)
  sVerData$ = String$(lInfoSize, 0)
 
  r = GetFileVersionInfo(Filename, 0&, lInfoSize, sVerData)
 
  If r = 0 Then Exit Function
 
  r = VerQueryValue(sVerData, "\VarFileInfo\Translation", hCharBlck, lLen)
 
  If r = 0 Then Exit Function
 
  r = ReadProcessMemory(GetCurrentProcess(), hCharBlck, btCharset(1), lLen)
 
  lCharset = btCharset(3) + btCharset(4) * &H100 + _
             btCharset(1) * &H10000 + btCharset(2) * &H1000000
 
  sCharset$ = Hex$(lCharset)
  sCharset$ = String(8 - Len(sCharset$), "0") & sCharset$
 
  sVerInfo(1) = "CompanyName"
  sVerInfo(2) = "FileDescription"
  sVerInfo(3) = "FileVersion"
  sVerInfo(4) = "InternalName"
  sVerInfo(5) = "LegalCopyright"
  sVerInfo(6) = "OriginalFileName"
  sVerInfo(7) = "ProductName"
  sVerInfo(8) = "ProductVersion"
  sVerInfo(9) = "Comments"

  For i = 1 To 9
    sVerBlck$ = "\StringFileInfo\" & sCharset & "\" & sVerInfo(i)
   
    r = VerQueryValue(sVerData, sVerBlck, hVersion, lInfoSize)
   
    If r Then
      sData = String$(lInfoSize, 0)
     
      r = ReadProcessMemory(GetCurrentProcess(), hVersion, ByVal sData, lInfoSize)
     
      sData = Left$(sData, lInfoSize - 1)
     
      With GetVersionInfo
        Select Case i
          Case 1: .CompanyName = sData
          Case 2: .FileDescription = sData
          Case 3: .FileVersion = sData
          Case 4: .InternalName = sData
          Case 5: .LegalCopyright = sData
          Case 6: .OriginalFileName = sData
          Case 7: .ProductName = sData
          Case 8: .ProductVersion = sData
          Case 9: .Comments = sData
        End Select
       
        If GetBinaryType(Filename, lBinType) Then
          Select Case lBinType
            Case SCS_32BIT_BINARY: .FileOS = "Ejecutable Para Windows De 32 Bits"
            Case SCS_DOS_BINARY: .FileOS = "Ejecutable Para MS-DOS"
            Case SCS_OS216_BINARY: .FileOS = "Ejecutable Para OS/2 De 16 Bits"
            Case SCS_PIF_BINARY: .FileOS = "Acceso Directo A Programa De MS-DOS"
            Case SCS_POSIX_BINARY: .FileOS = "Archivo Ejecutable Para POSIX"
            Case SCS_WOW_BINARY: .FileOS = "Ejecutable Para Windows De 16 Bits"
            Case Else: .FileOS = "Sistema Desconocido"
          End Select
        End If

      End With
    End If
  Next
End Function

Saludos.


Título: Re: Descripcion de Archivo
Publicado por: el_chente23 en 26 Agosto 2005, 02:29 am
Hola, probe el codigo, pero no me funciona muy bien
Código:
lInfoSize = GetFileVersionInfoSize(Filename, 0&)
sVerData$ = String$(lInfoSize, 0)
 
r = GetFileVersionInfo(Filename, 0&, lInfoSize, sVerData)
If r = 0 Then Exit Function

en esta parte, cuando mando llamar GetFileVersionInfoSize, siempre me devuelve 0, y cuando me devuelve distinto de 0 en la funcion GetFileVersionInfo, se cierra el programa. ¿Funciona para todos los archivos o nadamas para alguno?

Saludos


Título: Re: Descripcion de Archivo
Publicado por: Slasher-K en 26 Agosto 2005, 02:49 am
A mi me funciona bien  ???. A ver probá lo siguiente:

Código:
lInfoSize = GetFileVersionInfoSize(Filename, 0&)
sVerData$ = String$(lInfoSize, 0)

r = GetFileVersionInfo(ByVal Filename, 0&, lInfoSize, ByVal sVerData)

If r = 0 Then Exit Function

Así tiene que funcionar.

Saludos.


Título: Re: Descripcion de Archivo
Publicado por: el_chente23 en 26 Agosto 2005, 20:05 pm
Hola, Gracias por la ayuda, efectivamente funciono con ese cambio, pero me salio otro, al llegar a esta linea
Código:
r = VerQueryValue(sVerData, "\VarFileInfo\Translation", hCharBlck, lLen)
me manda este error "No se puede encontrar el punto de entrada de la dll VerQueryValue en Version.dll", la funcion si la tengo declarada, supuse que es porque no tiene referencia a la dll especificada, la intento agregar en las referencias pero me manda este mensaje "No se puede agregar referencia al archivo especificado", ¿que tengo que hacer?, ¿estara desactualizado ese dll?.

PD: Otro detalle es que unicamente me a funcionado para archivos .exe, y los que yo necesito leer son .msi

Saludos


Título: Re: Descripcion de Archivo
Publicado por: Slasher-K en 26 Agosto 2005, 22:22 pm
Si la declaraste con la instrucción Declare fijate de haberle puesto como Alias "VerQueryValueA", porque ese es el nombre con la que se encuentra en la DLL.

Código:
Declare Function VerQueryValue Lib "version.dll" Alias "VerQueryValueA" (.....) As Long

VERSION.DLL nunca la vas a poder agregar al proyecto porque no es un DLL ActiveX.

Saludos.

EDIT:
Los msi no son ejecutables, son bases de datos y hay un intérprete que los ejecuta. Hay otras funciones en la API para usar los MSI pero ahora no tengo tiempo, más tarde te digo cuales son porque no las recuerdo.


Título: Re: Descripcion de Archivo
Publicado por: el_chente23 en 27 Agosto 2005, 02:07 am
Demonios, tenias razon, me faltaba el alias, efectivamente, lo que quiero leer son msi, te agradeceria tu ayuda.

Saludos