 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
joseluisbz Lt Cmdr

Registrado: 31 Ene 2003Mensajes: 101Ubicación: Medellín - Colombia de Barranquilla
|
Publicado: Dom 26 Oct, 2003 8:03 pm Asunto: Version e Infoprmacion de cualquier ejecutable |
|
|
Cordial Saludo:
https://cppbuilder.es/viewtopic.php?p=16995#16995
He probado el enlace anterior y me sirve a mi aplicación.. pero, para cualquier otro ejecutable, ¿cómo lo hago?
Gracias _________________ Please Response to:joseluisbz@bigfoot.com |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 26 Oct, 2003 11:27 pm Asunto: |
|
|
Prueba la siguiente función:
| Código: | // #include <vector>
String GetFileVersion(String file, // Nombre del archivo con path incluido
String key = "FileVersion") // Que información solicitamos (opcional)
{
String ver = "(null)";
DWORD size = GetFileVersionInfoSize(file.c_str(), 0);
if (size > 0)
{
std::vector<char> buffer(size);
if (GetFileVersionInfo(file.c_str(), 0, size, &buffer[0]))
{
UINT datasize;
struct {WORD lang, page;} *translation;
VerQueryValue(&buffer[0], "\\VarFileInfo\\Translation",
reinterpret_cast<PVOID*>(&translation), &datasize);
String query;
query.sprintf("\\StringFileInfo\\%04X%04X\\%s",
translation->lang, translation->page, key.c_str());
PCHAR data;
if (VerQueryValue(&buffer[0], query.c_str(),
reinterpret_cast<PVOID*>(&data), &datasize))
{
ver = data;
}
}
}
return ver;
}
|
* Ejemplos de uso:
| Código: | // Obtenemos el número de versión de la aplicación que estamos ejecutando:
Caption = GetFileVersion(Application->ExeName);
// La versión de otra aplicación
String version = GetFileVersion("C:\\windows\\notepad.exe");
// Nombre de la compañia:
version = GetFileVersion("C:\\windows\\notepad.exe", "CompanyName"); |
Otros valores que podemos usar como segundo argumento:
CompanyName, FileDescription, InternalName, LegalCopyright,
OriginalFilename, ProductName, ProductVersion, etc... |
|
| Volver arriba |
|
 |
joseluisbz Lt Cmdr

Registrado: 31 Ene 2003Mensajes: 101Ubicación: Medellín - Colombia de Barranquilla
|
Publicado: Lun 27 Oct, 2003 1:22 am Asunto: |
|
|
Gracias, LEO
PCHAR me imagino que lo reconoce como pascal... _________________ Please Response to:joseluisbz@bigfoot.com |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mie 24 Feb, 2010 10:15 pm Asunto: |
|
|
Perdona Leo, pero esta función en Builder 2010 solo me devuelve el PRIMER Caracter de la información de Version.
Tendria que devolverme 7.0.54 pero solo me devuelve 7
He probado con "FileVersion"
La función la tengo definida asi en .cpp
| Código: |
// Para obtener informacion de archivos
String __fastcall GetFileVersion(String file, // Nombre del archivo con path incluido
String key) // Que información solicitamos (opcional)
{
String ver = "(null)";
DWORD size = GetFileVersionInfoSize(file.w_str(), 0);
if (size > 0)
{
std::vector<wchar_t> buffer(size);
if (GetFileVersionInfo(file.w_str(), 0, size, &buffer[0]))
{
UINT datasize;
struct {WORD lang, page;} *translation;
VerQueryValue(&buffer[0], L"\\VarFileInfo\\Translation",
reinterpret_cast<PVOID>(&translation), &datasize);
String query;
query.sprintf(L"\\StringFileInfo\\%04X%04X\\%s",
translation->lang, translation->page, key.w_str());
PCHAR data;
if (VerQueryValue(&buffer[0], query.w_str(),
reinterpret_cast<PVOID>(&data), &datasize))
{
ver = data;
}
}
}
return ver;
} |
La Cabecera:
| Código: | String __fastcall GetFileVersion(String file, String key = "FileVersion"); |
y la llamada:
| Código: | BtnVersion->Caption = "Versión: " + ::GetFileVersion(Application->ExeName); |
_________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mie 24 Feb, 2010 10:42 pm Asunto: |
|
|
Me contesto yo mismo:
Lo he solucionado cambiando estal linea
por esta otra:
Era de suponer ya que antes la funcion era AnsiString y ahora UnicodeString y se me habia olvidado el tipedef PCHAR que ahora debia de ser PWCHAR. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
frios Lt

Registrado: 20 Nov 2005Mensajes: 79Ubicación: España
|
Publicado: Jue 09 Ago, 2012 7:33 pm Asunto: |
|
|
Por si le pasa a alguien más.
Al código de Jesús hay que añadirle (Builder XE) un par de inicadores de dirección.
En PVOID en realidad es PVOID*
Se los come al poner el estilo de código en el mensaje. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|