Código
Public Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long Public Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As String, ByVal lpName As String, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long Public Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Primero hay que usar "BeginUpdateResource" para obtener el hUpdate, despues uso "UpdateResource" y por ultimo "EndUpdateResource" para terminar...
La update resource tiene estos argumentos:
-hUpdate: Es la referencia del archivo que quiero actualizar, se obtiene con "BeginUpdateResource"
-lpType: Es un número que representa el tipo de recurso, la información de la cersión "VERSION_INFO" es el número 16
-lpName: Es el nombre del recurso (que es un número), dentro de un tipo de recursos puede haber varios nombres...de manera predeterminada para la VERSION_INFO es 1
-wLanguage: Es el lenguaje, también es un número, dependiendo del número la versión estará en un idioma o en otro...por ejemplo Ingles es 1033 y Español 3082
-lpData: Son los datos que se quieren subir, y este es mi gran problema...si intento subir el script sin compilar (en texto) pues al abrirlo con el ResHack no me aparece nada (el script está más abajo) y si intento subir el archivo .res que lo contiene tampoco me funciona...
-cbData: Es la longitud en bytes de "lpData"
Pues yo sé subir recursos de iconos, texto en unicode para otros recursos, etc...el problema lo encontré para actualizar información sobre la version de un ejecutable (con el ResHack aparece como "VERSION_INFO)
el problema es que no sé que tipo de datos subir, segun la web msdn los datos los tengo que subir en RAW...pero no se como hacer para convertir este script (que se puede obtener con el ResHack) a RAW:
Código:
1 VERSIONINFO
FILEVERSION 3,4,0,79
PRODUCTVERSION 3,4,0,79
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "0C0904E4"
{
VALUE "CompanyName", ""
VALUE "FileDescription", "Resource viewer, decompiler & recompiler."
VALUE "FileVersion", "3.4.0.79"
VALUE "InternalName", "ResHack"
VALUE "LegalCopyright", "(c) Angus Johnson 1999-2002"
VALUE "LegalTrademarks", ""
VALUE "OriginalFilename", "ResHack"
VALUE "ProductName", ""
VALUE "ProductVersion", "3.0.0.0"
VALUE "Comments", "Freeware, but see help file for conditions."
VALUE "Aditional Notes", "Not for distribution without the authors permission"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0C09 0x04E4
}
}
Yo esto lo obtengo con el ResHack...lo k me gustaría en resumen es k un usario desde VB escriba ese script (en un textbox por ejemplo) y poder modificar la información sobre la versión de cualkier ejecutable ya creado...
Yo hago esto:
Código
Dim hWrite As Long, Ruta As String Ruta = "C:\exemplo.exe" hWrite = BeginUpdateResource(Ruta, 0) Call UpdateResource (hWrite, 16, 1, 3082, lpData, cbData) EndUpdateResource (hWrite, 0)
cbData es la longitud en bytes de lpData por lo que no hay problema, lo malo es que no sé que tipo de información tengo que subir en lpData...yo pienso que tengo que subir el script compilado...pero no se como hacerlo...
weno, a ver si alguien me puede ayudar.
Gracias y saludos