Dúvidas

Delphi

11/09/2003

Olá

Alguém sabe me dizer como eu faço para descobrir a versão do exe em tempo de execução e mostrála na barra de status do sistema ?

Mudando de assunto ...

O Access armazena registros deletados ? Para que serve a compactaçao do Banco no Access (realmente diminiui muito o tamanho do Bco) ?

Sem mais

Obrigado.


Flaviowmf

Flaviowmf

Curtidas 0

Respostas

Barcelos

Barcelos

11/09/2003

Caro amigo,

Aqui vai uma rotina para manipular informações de versão de arquivos:


function FileVerInfo(const FileName: string;
var FileInfo: TStringList): Boolean;
const
Key: array[1..9] of string =(´CompanyName´, ´FileDescription´,´FileVersion´,´InternalName´, ´LegalCopyright´,´OriginalFilename´,´ProductName´,´ProductVersion´, ´Comments´);
KeyBr: array [1..9] of string = (´Empresa´,´Descricao´, ´Versao do Arquivo´,
´Nome Interno´, ´Copyright´,´Nome Original do Arquivo´, ´Produto´,
´Versao do Produto´, ´Comentarios´);
var
Dummy : THandle;
BufferSize, Len : Integer;
Buffer : PChar;
LoCharSet, HiCharSet : Word;
Translate, Return : Pointer;
StrFileInfo, Flags : string;
TargetOS, TypeArq : string;
FixedFileInfo : Pointer;
i : Byte;
begin
Result := False;
{ Obtemos o tamanho em bytes do ´version information´ }
BufferSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
if BufferSize <> 0 then
begin
GetMem(Buffer, Succ(BufferSize));
try
if GetFileVersionInfo(PChar(FileName), 0, BufferSize,Buffer) then
{ Executamos a funcao ´VerQueryValue´ e conseguimos informações sobre o
idioma/character-set }
if VerQueryValue(Buffer,´\VarFileInfo\Translation´,Translate,Cardinal(Len))
then
begin
LoCharSet := LoWord(Longint(Translate^));
HiCharSet := HiWord(Longint(Translate^));
for i := 1 to 9 do
begin
{ Montamos a string de pesquisa }
StrFileInfo := Format(´\StringFileInfo\0¬x0¬x\¬s´,[LoCharSet, HiCharSet,
Key[i]]);
{ Adicionamos cada key pré-definido }
if VerQueryValue(Buffer,PChar(StrFileInfo), Return,UINT(Len)) then
FileInfo.Add(KeyBr[i] + ´: ´ + PChar(Return));
end;
if VerQueryValue(Buffer,´\´,FixedFileInfo, UINT(Len))
then
with TVSFixedFileInfo(FixedFileInfo^) do
begin
Flags := ´´;
{Efetuamos um bitmask e obtemos os ´flags´ do arquivo}
if (dwFileFlags and VS_FF_DEBUG) = VS_FF_DEBUG then
Flags := Concat(Flags,´*Debug* ´);
if (dwFileFlags and VS_FF_SPECIALBUILD) = VS_FF_SPECIALBUILD then
Flags := Concat(Flags, ´*Special Build* ´);
if (dwFileFlags and VS_FF_PRIVATEBUILD) = VS_FF_PRIVATEBUILD then
Flags := Concat(Flags, ´*Private Build* ´);
if (dwFileFlags and VS_FF_PRERELEASE) = VS_FF_PRERELEASE then
Flags := Concat(Flags, ´*Pre-Release Build* ´);
if (dwFileFlags and VS_FF_PATCHED) = VS_FF_PATCHED then
Flags := Concat(Flags, ´*Patched* ´);
if Flags <> ´´ then FileInfo.Add(´Atributos: ´ + Flags);
TargetOS := ´Plataforma (OS): ´;
{ Plataforma }
case dwFileOS of
VOS_UNKNOWN :
TargetOS := Concat(TargetOS, ´Desconhecido´);
VOS_DOS :
TargetOS := Concat(TargetOS, ´MS-DOS´);
VOS_OS216 :
TargetOS := Concat(TargetOS, ´16-bit OS/2´);
VOS_OS232 :
TargetOS := Concat(TargetOS, ´32-bit OS/2´);
VOS_NT :
TargetOS := Concat(TargetOS, ´Windows NT´);
VOS_NT_WINDOWS32, 4:
TargetOS := Concat(TargetOS, ´Win32 API´);
VOS_DOS_WINDOWS16:
TargetOS := Concat(TargetOS, ´16-bit Windows ´,
´sob MS-DOS´);
else
TargetOS := Concat(TargetOS, ´Fora do Padrão.Código: ´, IntToStr(dwFileOS));
end;
FileInfo.Add(TargetOS);
TypeArq := ´Tipo de Arquivo: ´;
{ Tipo de Arquivo }
case dwFileType of
VFT_UNKNOWN :
TypeArq := Concat(TypeArq,´Desconhecido´);
VFT_APP : TypeArq := Concat(TypeArq,´Aplicacao´);
VFT_DLL :
TypeArq := Concat(TypeArq,´Dynamic-Link Lib.´);
VFT_DRV : begin
TypeArq := Concat(TypeArq,´Device driver - Driver ´);
case dwFileSubtype of
VFT2_UNKNOWN
: TypeArq := Concat(TypeArq,´Desconhecido´);
VFT2_DRV_PRINTER
: TypeArq := Concat(TypeArq,´de Impressao´);
VFT2_DRV_KEYBOARD
: TypeArq := Concat(TypeArq,´de Teclado´);
VFT2_DRV_LANGUAGE
: TypeArq := Concat(TypeArq,´de Idioma´);
VFT2_DRV_DISPLAY
: TypeArq := Concat(TypeArq,´de Vídeo´);
VFT2_DRV_MOUSE
: TypeArq := Concat(TypeArq,´de Mouse´);
VFT2_DRV_NETWORK
: TypeArq := Concat(TypeArq,´de Rede´);
VFT2_DRV_SYSTEM
: TypeArq := Concat(TypeArq,´de Sistema´);
VFT2_DRV_INSTALLABLE
: TypeArq := Concat(TypeArq,´Instalavel´);
VFT2_DRV_SOUND
: TypeArq := Concat(TypeArq,´Multimida´);
end;
end;
VFT_FONT : begin
TypeArq := Concat(TypeArq,´Fonte - Fonte ´);
case dwFileSubtype of
VFT2_UNKNOWN
: TypeArq := Concat(TypeArq, ´Desconhecida´);
VFT2_FONT_RASTER
: TypeArq := Concat(TypeArq,´Raster´);
VFT2_FONT_VECTOR
: TypeArq := Concat(TypeArq,´Vetorial´);
VFT2_FONT_TRUETYPE
: TypeArq := Concat(TypeArq,´TrueType´);
end;
end;
VFT_VXD : TypeArq := Concat(TypeArq,´Virtual Device´);
VFT_STATIC_LIB
: TypeArq := Concat(TypeArq,´Static-Link Lib.´);
end;
FileInfo.Add(TypeArq);
end;
end;
finally
FreeMem(Buffer, Succ(BufferSize));
Result := FileInfo.Text <> ´´;
end;
end;
end;

Exemplo de Uso:

procedure TForm1.Button1Click(Sender: TObject);
var
StrLst: TStringList;
begin
StrLst := TStringList.Create;
try
FileVerInfo(´C:\WINDOWS\SYSTEM\TAPI.DLL´, StrLst);
Memo1.Lines.Assign(StrLst);
finally
StrLst.Free;
end;
end;

Espero ter ajudado

Barcelos
osbarcelos@hotmail.com


GOSTEI 0
POSTAR