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
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
  #2  
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
  #3  
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
  #4  
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
  #5  
Antiguo 26-09-2013
agustibaldo agustibaldo is offline
Miembro
 
Registrado: nov 2006
Posts: 105
Poder: 18
agustibaldo Va por buen camino
nlsgarcia, muchas gracias por tu respuesta.
Lamentablemente sigo "atascado en el medio".
Implemente la rutina que me pasaste pero no muestra ningún texto de salida. Es decir, devuelve vacío.
Conversando con mi compañeros de oficina que compilan el mismo código pero en sus PC, ellos no tienen problemas.
Podría ser que exista algún problema con las fuentes en mi PC o con algún seteo de Delphi que pueda estar molestando?
Nuevamente gracias a todos por sus respuestas.
Saludos.
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
...Implemente la rutina que me pasaste pero no muestra ningún texto de salida...

...mi compañeros de oficina que compilan el mismo código pero en sus PC, ellos no tienen problemas...
Pregunto:

1- ¿Que versión de Delphi utilizan en la oficina?.

2- ¿Que versión de Windows utilizan en la oficina?.

3- ¿Por el mismo código te refieres al del Msg #6?.

4- ¿La aplicación en cuestión en tu PC tiene habilitado la opción: Proyect -> Options -> Version Info -> Include version information in project?.

5- ¿Si utilizas el código del Msg #6 en tu PC con esta ruta 'C:\Windows\System32\kernel32.dll', funciona?.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 26-09-2013 a las 17:05:19.
Responder Con Cita
  #7  
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
...¿Podría ser que exista algún problema con las fuentes en mi PC o con algún seteo de Delphi que pueda estar molestando?...
Continuación del Msg #8:

Te comento: Probé el código del Msg #6 (Delphi 7 y Delphi 2010), en Windows XP Professional x32, Windows 7 Professional x32, Windows 7 Professional x64 (Todos en Ingles) y Windows Vista Home Premium x32 (En Español) y en todos los casos funciono correctamente.

Espero sea útil

Nelson.
Responder Con Cita
  #8  
Antiguo 26-09-2013
agustibaldo agustibaldo is offline
Miembro
 
Registrado: nov 2006
Posts: 105
Poder: 18
agustibaldo Va por buen camino
Cita:
1- ¿Que versión de Delphi utilizan en la oficina?.

2- ¿Que versión de Windows utilizan en la oficina?.

3- ¿Por el mismo código te refieres al del Msg #6?.

4- ¿La aplicación en cuestión en tu PC tiene habilitado la opción: Proyect -> Options -> Version Info -> Include version information in project?.

5- ¿Si utilizas el código del Msg #6 en tu PC con esta ruta 'C:\Windows\System32\kernel32.dll', funciona?.
nlsgarcia, he podido solucionar el problema!!!
Primero, respondo tus consultas:

1- Delphi 2010 y estamos migrando a XE3.

2- Windows 7.

3- Por mismo código me refiero a que, esta función con "problemas", se ejecuta en librerías compartidas por todos.

4- Si, esta habilitada la opción Include version information in project?


Te comento como solucioné el inconveniente.
Cuando revise la opción que planteas en la pregunta 4, me dí cuenta que el Language estaba seteado a Ingles (Estados Unidos). Probé setearlo a Español (Argentina) y luego probé compilarlo nuevamente. Aparecía nuevamente el mismo problema.
Entonces, volví al mismo cuadro de diálogos y bajo la opción de Language estaba la lista con las opciones que describías en tu función. Procedí a completar la Key FileDescription y volví a probar nuevamente. Ahora todo funcionó de 10!

Ahora bien:
1º) el tema esta solucionado.

2º) me sigue llamando la atención que este problema se manifiesta solo con mi PC, no así en el resto de mis compañeros. En nuestro grupo de trabajo, podemos compilar los proyectos de todos, por lo que estas opciones deberían estar seteadas en todos los proyectos cuando esto no ocurre en todos los casos.
Igualmente sigo investigando y cualquier cosa les comento.
Muchas gracias a todos por sus comentarios y respuestas.
Saludos.
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 03:07:37.


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