Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-09-2013
agustibaldo agustibaldo is offline
Miembro
 
Registrado: nov 2006
Posts: 105
Poder: 18
agustibaldo Va por buen camino
Caracteres extraños al ejecutar función <GetFileVersionInfo>

Gente de ClubDelphi, les consulto por un problema que tengo.
Al ejecutar mi aplicación tengo un splash que muestra información sobre el nombre de la aplicación, el nro de versión, etc.
Al mostrar el nombre de la aplicación mediante la siguiente función:

Código Delphi [-]
function fncGetAppDescripcion:string;
var
  Size, Size2: DWord;
  Pt, Pt2: Pointer;
  zKeyPath : array[0..255] of Char;
begin
  try
      Size := GetFileVersionInfoSize(PChar(ParamStr(0)), Size2);
      if Size > 0 then
      begin
         GetMem (Pt, Size);
         try
            GetFileVersionInfo(PChar(ParamStr(0)), 0, Size, Pt);
            VerQueryValue(Pt, StrPCopy(zKeyPath,'\\StringFileInfo\\2C0A04E4\\FileDescription'), Pt2, Size2);
        Result := PWideChar(Pt2);
         finally
            FreeMem (Pt);
         end;
      end;
  except
    Result := Application.Title;
  end;
end;

me entrega la siguiente cadena de caracteres:

Código:
'◿ᅠ瞯邐邐ミ'#$D825'꼐遷邐邐ヒ譕诬'#$0C45'䶋樈─'#$FFFF'ÿ児ꗨ!崀'#$08C2'退邐邐쀳ԸȨ瞯锏쏀邐邐ミ쀥꼑遷邐邐◿ᄰ瞯횋'#$1CE9'C退邐邐啓'#$DB33'喋謄E¹'#$FF00#$0BFF'瓀윏M孝郃啓㌈觀␄ꅤ0'
Estoy usando XE3 sobre Windows 7.
Alguno puede darme una mano con esto?
Desde ya, muchas gracias!
Responder Con Cita
  #2  
Antiguo 25-09-2013
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Prueba con esta Función...

Esta la uso para conseguir la versión de mi Programa...
Puedes modificarla para conseguir el nombre...

Código Delphi [-]
function GetAppVersion:String;
var Size, Size2: DWord;
   Pt, Pt2: Pointer;
begin
    Size := GetFileVersionInfoSize(PChar (ParamStr (0)), Size2);
    if Size > 0 then
     begin
          GetMem (Pt, Size);
          try
             GetFileVersionInfo (PChar (ParamStr (0)), 0, Size, Pt);
             VerQueryValue (Pt, '\', Pt2, Size2);
             with TVSFixedFileInfo (Pt2^) do
              begin
                   Result:= IntToStr (HiWord (dwFileVersionMS)) + '.' +
                            IntToStr (LoWord (dwFileVersionMS)) + '.' +
                            IntToStr (HiWord (dwFileVersionLS)) + '.' +
                            IntToStr (LoWord (dwFileVersionLS));
              end;
          finally
                 FreeMem (Pt);
          end;
     end;
end;

Si la modificas y anda publica...
Saludos...
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #3  
Antiguo 25-09-2013
agustibaldo agustibaldo is offline
Miembro
 
Registrado: nov 2006
Posts: 105
Poder: 18
agustibaldo Va por buen camino
Neeruu gracias por tu respuesta.
De hecho, la función que pasas la utilizo para obtener el nro. de versión de mi app.
Voy a investigar como modificar los parámetros de la API para probar. Igual sospecho que puede ser un problema con la codificación de los caracteres.
Gracias por tu respuesta. Cualquier novedad que encuentre la publico.
Saludos.
Responder Con Cita
  #4  
Antiguo 25-09-2013
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola

Cambia ésto:

Código Delphi [-]
Result := PWideChar(Pt2);

por ésto:

Código Delphi [-]
Result := PAnsiChar(Pt2);

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 25-09-2013
agustibaldo agustibaldo is offline
Miembro
 
Registrado: nov 2006
Posts: 105
Poder: 18
agustibaldo Va por buen camino
egostar, gracias por tu respuesta.
Probé como indicaste y, si bien cambió el formato del mensaje, sigue arrojando caracteres extraños.
Saludos.

Código:
'ÿ%`'#$11'¯w'#$0090#$0090#$0090#$0090#$0090'ÿ%Ø'#$10'¯w'#$0090#$0090#$0090#$0090#$0090'‹ÿU‹ì‹E'#$C'‹M'#8'j'
Responder Con Cita
  #6  
Antiguo 26-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
agustibaldo,

Cita:
Empezado por agustibaldo
...Caracteres extraños al ejecutar función <GetFileVersionInfo>...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TFileVersion = Record
    CompanyName : String;
    FileDescription : String;
    FileVersion : String;
    InternalName : String;
    LegalCopyright : String;
    LegalTrademarks : String;
    OriginalFileName : String;
    ProductName : String;
    ProductVersion : String;
    Comments : String;
    PrivateBuild : String;
    SpecialBuild : String;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetFileInfo(const FileName: String): TFileVersion;
type
   PLandCodepage = ^TLandCodepage;
   TLandCodepage = Record
      Language : Word;
      CodePage : Word;
   end;

var
   Dummy,
   LenBuffer: Cardinal;
   Buffer, lpBuffer: Pointer;
   Language: String;

begin

   LenBuffer := GetFileVersionInfoSize(PChar(FileName), Dummy);

   if LenBuffer = 0 then
      RaiseLastOSError;

   GetMem(Buffer, LenBuffer);

   try

      if not GetFileVersionInfo(PChar(FileName), 0, LenBuffer, Buffer) then
         RaiseLastOSError;

      if not VerQueryValue(Buffer, '\VarFileInfo\Translation\', lpBuffer, LenBuffer) then
         RaiseLastOSError;

      Language := Format('%.4x%.4x', [PLandCodepage(lpBuffer)^.Language, PLandCodepage(lpBuffer)^.CodePage]);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\CompanyName'), lpBuffer, LenBuffer) then
         Result.CompanyName := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\FileDescription'), lpBuffer, LenBuffer) then
         Result.FileDescription := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\FileVersion'), lpBuffer, LenBuffer) then
         Result.FileVersion := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\InternalName'), lpBuffer, LenBuffer) then
         Result.InternalName := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\LegalCopyright'), lpBuffer, LenBuffer) then
         Result.LegalCopyright := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\LegalTrademarks'), lpBuffer, LenBuffer) then
         Result.LegalTrademarks := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\OriginalFileName'), lpBuffer, LenBuffer) then
         Result.OriginalFileName := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\ProductName'), lpBuffer, LenBuffer) then
         Result.ProductName := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\ProductVersion'), lpBuffer, LenBuffer) then
         Result.ProductVersion := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\Comments'), lpBuffer, LenBuffer) then
         Result.Comments := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\PrivateBuild'), lpBuffer, LenBuffer) then
         Result.PrivateBuild := PChar(lpBuffer);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\SpecialBuild'), lpBuffer, LenBuffer) then
         Result.SpecialBuild := PChar(lpBuffer);

   finally

      FreeMem(Buffer);

   end;

end;

function GetFileDescription(const FileName: String): String;
type
   PLandCodepage = ^TLandCodepage;
   TLandCodepage = Record
      Language : Word;
      CodePage : Word;
   end;

var
   Dummy,
   LenBuffer: Cardinal;
   Buffer, lpBuffer: Pointer;
   Language: String;

begin

   LenBuffer := GetFileVersionInfoSize(PChar(FileName), Dummy);

   if LenBuffer = 0 then
      Exit;

   GetMem(Buffer, LenBuffer);

   try

      GetFileVersionInfo(PChar(FileName), 0, LenBuffer, Buffer);

      VerQueryValue(Buffer, '\VarFileInfo\Translation\', lpBuffer, LenBuffer);

      Language := Format('%.4x%.4x', [PLandCodepage(lpBuffer)^.Language, PLandCodepage(lpBuffer)^.CodePage]);

      if VerQueryValue(Buffer, PChar('\StringFileInfo\' + Language + '\FileDescription'), lpBuffer, LenBuffer) then
         Result := PChar(lpBuffer);

   finally

      FreeMem(Buffer);

   end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
   FileVersion : TFileVersion;

begin

   FileVersion := GetFileInfo(Application.ExeName);

   ListBox1.Clear;

   if FileVersion.CompanyName <> EmptyStr then
      ListBox1.Items.Add('CompanyName: ' + FileVersion.CompanyName);

   if FileVersion.FileDescription <> EmptyStr then
      ListBox1.Items.Add('FileDescription: ' + FileVersion.FileDescription);

   if FileVersion.FileVersion <> EmptyStr then
      ListBox1.Items.Add('FileVersion: ' + FileVersion.FileVersion);

   if FileVersion.InternalName <> EmptyStr then
      ListBox1.Items.Add('InternalName: ' + FileVersion.InternalName);

   if FileVersion.LegalCopyright <> EmptyStr then
      ListBox1.Items.Add('LegalCopyright: ' + FileVersion.LegalCopyright);

   if FileVersion.LegalTrademarks <> EmptyStr then
      ListBox1.Items.Add('LegalTrademarks: ' + FileVersion.LegalTrademarks);

   if FileVersion.OriginalFileName <> EmptyStr then
      ListBox1.Items.Add('OriginalFileName: ' + FileVersion.OriginalFileName);

   if FileVersion.ProductName <> EmptyStr then
      ListBox1.Items.Add('ProductName: ' + FileVersion.ProductName);

   if FileVersion.ProductVersion <> EmptyStr then
      ListBox1.Items.Add('ProductVersion: ' + FileVersion.ProductVersion);

   if FileVersion.Comments <> EmptyStr then
      ListBox1.Items.Add('Comments: ' + FileVersion.Comments);

   if FileVersion.PrivateBuild <> EmptyStr then
      ListBox1.Items.Add('PrivateBuild: ' + FileVersion.PrivateBuild);

   if FileVersion.SpecialBuild <> EmptyStr then
      ListBox1.Items.Add('SpecialBuild: ' + FileVersion.SpecialBuild);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   ShowMessage(GetFileDescription(Application.ExeName));
end;

end.
El código anterior en Delphi 7 y Delphi 2010 sobre Windows 7 Professional x32, muestra la información asociada al ejecutable de la aplicación por medio de las APIs GetFileVersionInfoSize, GetFileVersionInfo y VerQueryValue.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 26-09-2013 a las 01:13:46.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Caracteres extraños en un Memo Sr.Scorpion Varios 1 23-10-2008 19:54:59
Caracteres extraños en un Memo Sr.Scorpion Varios 6 23-10-2008 14:47:05
Caracteres extraños (#$D#$A) Iuconlas Varios 2 23-09-2005 17:09:05
caracteres extraños en reportes Tangela Conexión con bases de datos 0 21-01-2004 19:56:22
Caracteres extraños Germi Conexión con bases de datos 1 14-10-2003 15:26:18


La franja horaria es GMT +2. Ahora son las 10:03:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi