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
vas a: project->project1 propietes y hay configuras todo
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.
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
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
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.
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.
Hola, probe el codigo, pero no me funciona muy bien
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
A mi me funciona bien ???. A ver probá lo siguiente:
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.
Hola, Gracias por la ayuda, efectivamente funciono con ese cambio, pero me salio otro, al llegar a esta linea 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
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.
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.
Demonios, tenias razon, me faltaba el alias, efectivamente, lo que quiero leer son msi, te agradeceria tu ayuda.
Saludos