Data de atributos do Executável
Bom dia a todos.
Tenho a seguinte dúvida.
Tenho uma rotina que pega Nome do Executável, Data de Criação, Data de Modificação e Data de Último Acesso.
Porém ao compilar e gerar o executável, ao comparar as datas de Criação, Modificação e Último Acesso, o Executável do Delphi sempre mostra a data correta, porém a hora sempre com 3 horas a mais.
Exemplo:
1) Data de Criação
- Executável do Delphi: 21/06/2012 12:10:24
- Propriedades do Executável: Hoje, 21 de junho de 2012, 1 hora atrás (No caso, 09:10(botão direito em cima do executável e clico em propriedades)
Para todos os atributos do tipo data hora, no executável do delphi, sempre 3 horas a mais.
Como resolver isto?
Tenho a seguinte dúvida.
Tenho uma rotina que pega Nome do Executável, Data de Criação, Data de Modificação e Data de Último Acesso.
Porém ao compilar e gerar o executável, ao comparar as datas de Criação, Modificação e Último Acesso, o Executável do Delphi sempre mostra a data correta, porém a hora sempre com 3 horas a mais.
Exemplo:
1) Data de Criação
- Executável do Delphi: 21/06/2012 12:10:24
- Propriedades do Executável: Hoje, 21 de junho de 2012, 1 hora atrás (No caso, 09:10(botão direito em cima do executável e clico em propriedades)
Para todos os atributos do tipo data hora, no executável do delphi, sempre 3 horas a mais.
Como resolver isto?
Fábio Sela
Curtidas 0
Melhor post
Marco Salles
21/06/2012
So uma pergunta antes de proseguir
A unidade IOUtils tem muitas funçoes ja prontas que retornam isto ..
de uma olhadano record TFILE
Por exemplo a data da criação de um Arquivo
Showmessage(DateTimetostr(TFile.GetCreationTime(CaminhoDoSeuArquivo)));
exitem muitas funçoes que me parecem serem iguais a que vc esta escrevendo , porém de modo Nativo do Delph
Sem ter que recorrer a funçoes de terceiros
A unidade IOUtils tem muitas funçoes ja prontas que retornam isto ..
de uma olhadano record TFILE
Por exemplo a data da criação de um Arquivo
Showmessage(DateTimetostr(TFile.GetCreationTime(CaminhoDoSeuArquivo)));
exitem muitas funçoes que me parecem serem iguais a que vc esta escrevendo , porém de modo Nativo do Delph
Sem ter que recorrer a funçoes de terceiros
GOSTEI 1
Mais Respostas
Marco Salles
21/06/2012
Poderia fornecer a rotina que utiliza para mostrar a Data com a Hora ???
GOSTEI 0
Fábio Sela
21/06/2012
Rotida que pega as datas:
procedure TfrmAtritubos.BitBtn5Click(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
//edtNomeExec.text := edtCaminhoExe.Text; // Esta rotina mostra o nome do executável com o caminho completo
edtNomeExec.text := ExtractFileName(edtCaminhoExe.Text); // Esta rotina mostra apenas o nome do executável.
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
Segue rotina completa:
unit untAtributos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Menus;
type
TfrmAtritubos = class(TForm)
edtCaminhoExe: TEdit;
Label1: TLabel;
edtNomeExec: TEdit;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
edtUltimoAcesso: TEdit;
Label6: TLabel;
BitBtn1: TBitBtn;
edtDataCriacao: TEdit;
edtDataModificacao: TEdit;
MainMenu1: TMainMenu;
Arquivo1: TMenuItem;
Abrir1: TMenuItem;
Sais1: TMenuItem;
dlgAbrir: TOpenDialog;
BitBtn2: TBitBtn;
Verso1: TMenuItem;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
edtVersaoSystemGlass: TEdit;
Label7: TLabel;
DatadaUltimaModificaoDesteExecutvel1: TMenuItem;
ltimaModificao1: TMenuItem;
btnAtributos: TBitBtn;
Label3: TLabel;
procedure btnAtributosClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Sais1Click(Sender: TObject);
procedure Abrir1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Verso1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure ltimaModificao1Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
private
{ Private declarations }
Function VersaoExeArqExt(pCaminhoExec:String): String;
public
{ Public declarations }
end;
var
frmAtritubos: TfrmAtritubos;
implementation
{$R *.dfm}
Function VersaoExe: String;
type
PFFI = ^vs_FixedFileInfo;
var
F : PFFI;
Handle : Dword;
Len : Longint;
Data : Pchar;
Buffer : Pointer;
Tamanho : Dword;
Parquivo: Pchar;
Arquivo : String;
begin
Arquivo := Application.ExeName;
Parquivo := StrAlloc(Length(Arquivo) + 1);
StrPcopy(Parquivo, Arquivo);
Len := GetFileVersionInfoSize(Parquivo, Handle);
Result := ;
if Len > 0 then
begin
Data:=StrAlloc(Len+1);
if GetFileVersionInfo(Parquivo,Handle,Len,Data) then
begin
VerQueryValue(Data, ,Buffer,Tamanho);
F := PFFI(Buffer);
Result := Format(%d.%d.%d.%d,
[HiWord(F^.dwFileVersionMs),
LoWord(F^.dwFileVersionMs),
HiWord(F^.dwFileVersionLs),
Loword(F^.dwFileVersionLs)]
);
end;
StrDispose(Data);
end;
StrDispose(Parquivo);
end;
Function TfrmAtritubos.VersaoExeArqExt(pCaminhoExec:String): String;
type
PFFI = ^vs_FixedFileInfo;
var
F : PFFI;
Handle : Dword;
Len : Longint;
Data : Pchar;
Buffer : Pointer;
Tamanho : Dword;
Parquivo: Pchar;
Arquivo : String;
CaminhoExec : String;
begin
Arquivo := pCaminhoExec;//C:\Output\SystemGlass\SystemGlass.exe;
Parquivo := StrAlloc(Length(Arquivo) + 1);
StrPcopy(Parquivo, Arquivo);
Len := GetFileVersionInfoSize(Parquivo, Handle);
Result := ;
if Len > 0 then
begin
Data:=StrAlloc(Len+1);
if GetFileVersionInfo(Parquivo,Handle,Len,Data) then
begin
VerQueryValue(Data, \,Buffer,Tamanho);
F := PFFI(Buffer);
Result := Format(%d.%d.%d.%d,
[HiWord(F^.dwFileVersionMs),
LoWord(F^.dwFileVersionMs),
HiWord(F^.dwFileVersionLs),
Loword(F^.dwFileVersionLs)]
);
end;
StrDispose(Data);
end;
StrDispose(Parquivo);
end;
procedure TfrmAtritubos.btnAtributosClick(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
edtNomeExec.text := edtCaminhoExe.Text;
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
procedure TfrmAtritubos.BitBtn1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmAtritubos.Sais1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmAtritubos.Abrir1Click(Sender: TObject);
Var
Arquivo : string;
begin
//--> dlgAbrir.Execute: somente ocorre se o usuário inserir um nome
//--> Para o arquivo e clicar no botão salvar do save dialog
if (dlgAbrir.Execute) then //--> Sempre usar if para dialogs
begin
//--> Carregamos o caminho do arquivo na variável arquivo
Arquivo := dlgAbrir.FileName;
//--> Salvamos o texto do memo para o arquivo especificado.
edtCaminhoExe.text := Arquivo;
end;
end;
procedure TfrmAtritubos.BitBtn2Click(Sender: TObject);
Var
Arquivo : string;
begin
//--> dlgAbrir.Execute: somente ocorre se o usuário inserir um nome
//--> Para o arquivo e clicar no botão salvar do save dialog
if (dlgAbrir.Execute) then //--> Sempre usar if para dialogs
begin
//--> Carregamos o caminho do arquivo na variável arquivo
Arquivo := dlgAbrir.FileName;
//--> Salvamos o texto do memo para o arquivo especificado.
edtCaminhoExe.text := Arquivo;
end;
end;
procedure TfrmAtritubos.Verso1Click(Sender: TObject);
begin
ShowMessage( A atual versão do sistema é: + VersaoExe);
end;
procedure TfrmAtritubos.BitBtn3Click(Sender: TObject);
begin
edtNomeExec.Clear;
edtDataCriacao.Clear;
edtDataModificacao.Clear;
edtUltimoAcesso.Clear;
end;
procedure TfrmAtritubos.BitBtn4Click(Sender: TObject);
Var
CaminhoExec : String;
begin
//ShowMessage(VersaoExeArqExt);
edtVersaoSystemGlass.Text := VersaoExeArqExt(edtCaminhoExe.Text);
end;
procedure TfrmAtritubos.ltimaModificao1Click(Sender: TObject);
// Retirado do Site:
// http://www.tecnobyte.com.br/dica4.html#dica75
var
DataExe: String;
Titulo: integer;
Caminho : String;
NomeExec : String;
Versao : String;
begin
NomeExec := edtNomeExec.Text;
Caminho := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + \ + NomeExec;
Titulo := FileOpen(NomeExec, 0);
//edtDataExecModificado.Text := DateTimeToStr(FileDateToDateTime(FileAge(ParamStr(0))));
// Mostra a data da ultima modificação deste executável.
//edtDataExecModificado.Text := DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName)));
ShowMessage(DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName))));
end;
procedure TfrmAtritubos.BitBtn5Click(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
//edtNomeExec.text := edtCaminhoExe.Text; // Esta rotina mostra o nome do executável com o caminho completo
edtNomeExec.text := ExtractFileName(edtCaminhoExe.Text); // Esta rotina mostra apenas o nome do executável.
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
end.
procedure TfrmAtritubos.BitBtn5Click(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
//edtNomeExec.text := edtCaminhoExe.Text; // Esta rotina mostra o nome do executável com o caminho completo
edtNomeExec.text := ExtractFileName(edtCaminhoExe.Text); // Esta rotina mostra apenas o nome do executável.
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
Segue rotina completa:
unit untAtributos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Menus;
type
TfrmAtritubos = class(TForm)
edtCaminhoExe: TEdit;
Label1: TLabel;
edtNomeExec: TEdit;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
edtUltimoAcesso: TEdit;
Label6: TLabel;
BitBtn1: TBitBtn;
edtDataCriacao: TEdit;
edtDataModificacao: TEdit;
MainMenu1: TMainMenu;
Arquivo1: TMenuItem;
Abrir1: TMenuItem;
Sais1: TMenuItem;
dlgAbrir: TOpenDialog;
BitBtn2: TBitBtn;
Verso1: TMenuItem;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
edtVersaoSystemGlass: TEdit;
Label7: TLabel;
DatadaUltimaModificaoDesteExecutvel1: TMenuItem;
ltimaModificao1: TMenuItem;
btnAtributos: TBitBtn;
Label3: TLabel;
procedure btnAtributosClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Sais1Click(Sender: TObject);
procedure Abrir1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Verso1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure ltimaModificao1Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
private
{ Private declarations }
Function VersaoExeArqExt(pCaminhoExec:String): String;
public
{ Public declarations }
end;
var
frmAtritubos: TfrmAtritubos;
implementation
{$R *.dfm}
Function VersaoExe: String;
type
PFFI = ^vs_FixedFileInfo;
var
F : PFFI;
Handle : Dword;
Len : Longint;
Data : Pchar;
Buffer : Pointer;
Tamanho : Dword;
Parquivo: Pchar;
Arquivo : String;
begin
Arquivo := Application.ExeName;
Parquivo := StrAlloc(Length(Arquivo) + 1);
StrPcopy(Parquivo, Arquivo);
Len := GetFileVersionInfoSize(Parquivo, Handle);
Result := ;
if Len > 0 then
begin
Data:=StrAlloc(Len+1);
if GetFileVersionInfo(Parquivo,Handle,Len,Data) then
begin
VerQueryValue(Data, ,Buffer,Tamanho);
F := PFFI(Buffer);
Result := Format(%d.%d.%d.%d,
[HiWord(F^.dwFileVersionMs),
LoWord(F^.dwFileVersionMs),
HiWord(F^.dwFileVersionLs),
Loword(F^.dwFileVersionLs)]
);
end;
StrDispose(Data);
end;
StrDispose(Parquivo);
end;
Function TfrmAtritubos.VersaoExeArqExt(pCaminhoExec:String): String;
type
PFFI = ^vs_FixedFileInfo;
var
F : PFFI;
Handle : Dword;
Len : Longint;
Data : Pchar;
Buffer : Pointer;
Tamanho : Dword;
Parquivo: Pchar;
Arquivo : String;
CaminhoExec : String;
begin
Arquivo := pCaminhoExec;//C:\Output\SystemGlass\SystemGlass.exe;
Parquivo := StrAlloc(Length(Arquivo) + 1);
StrPcopy(Parquivo, Arquivo);
Len := GetFileVersionInfoSize(Parquivo, Handle);
Result := ;
if Len > 0 then
begin
Data:=StrAlloc(Len+1);
if GetFileVersionInfo(Parquivo,Handle,Len,Data) then
begin
VerQueryValue(Data, \,Buffer,Tamanho);
F := PFFI(Buffer);
Result := Format(%d.%d.%d.%d,
[HiWord(F^.dwFileVersionMs),
LoWord(F^.dwFileVersionMs),
HiWord(F^.dwFileVersionLs),
Loword(F^.dwFileVersionLs)]
);
end;
StrDispose(Data);
end;
StrDispose(Parquivo);
end;
procedure TfrmAtritubos.btnAtributosClick(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
edtNomeExec.text := edtCaminhoExe.Text;
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
procedure TfrmAtritubos.BitBtn1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmAtritubos.Sais1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmAtritubos.Abrir1Click(Sender: TObject);
Var
Arquivo : string;
begin
//--> dlgAbrir.Execute: somente ocorre se o usuário inserir um nome
//--> Para o arquivo e clicar no botão salvar do save dialog
if (dlgAbrir.Execute) then //--> Sempre usar if para dialogs
begin
//--> Carregamos o caminho do arquivo na variável arquivo
Arquivo := dlgAbrir.FileName;
//--> Salvamos o texto do memo para o arquivo especificado.
edtCaminhoExe.text := Arquivo;
end;
end;
procedure TfrmAtritubos.BitBtn2Click(Sender: TObject);
Var
Arquivo : string;
begin
//--> dlgAbrir.Execute: somente ocorre se o usuário inserir um nome
//--> Para o arquivo e clicar no botão salvar do save dialog
if (dlgAbrir.Execute) then //--> Sempre usar if para dialogs
begin
//--> Carregamos o caminho do arquivo na variável arquivo
Arquivo := dlgAbrir.FileName;
//--> Salvamos o texto do memo para o arquivo especificado.
edtCaminhoExe.text := Arquivo;
end;
end;
procedure TfrmAtritubos.Verso1Click(Sender: TObject);
begin
ShowMessage( A atual versão do sistema é: + VersaoExe);
end;
procedure TfrmAtritubos.BitBtn3Click(Sender: TObject);
begin
edtNomeExec.Clear;
edtDataCriacao.Clear;
edtDataModificacao.Clear;
edtUltimoAcesso.Clear;
end;
procedure TfrmAtritubos.BitBtn4Click(Sender: TObject);
Var
CaminhoExec : String;
begin
//ShowMessage(VersaoExeArqExt);
edtVersaoSystemGlass.Text := VersaoExeArqExt(edtCaminhoExe.Text);
end;
procedure TfrmAtritubos.ltimaModificao1Click(Sender: TObject);
// Retirado do Site:
// http://www.tecnobyte.com.br/dica4.html#dica75
var
DataExe: String;
Titulo: integer;
Caminho : String;
NomeExec : String;
Versao : String;
begin
NomeExec := edtNomeExec.Text;
Caminho := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + \ + NomeExec;
Titulo := FileOpen(NomeExec, 0);
//edtDataExecModificado.Text := DateTimeToStr(FileDateToDateTime(FileAge(ParamStr(0))));
// Mostra a data da ultima modificação deste executável.
//edtDataExecModificado.Text := DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName)));
ShowMessage(DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName))));
end;
procedure TfrmAtritubos.BitBtn5Click(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
//edtNomeExec.text := edtCaminhoExe.Text; // Esta rotina mostra o nome do executável com o caminho completo
edtNomeExec.text := ExtractFileName(edtCaminhoExe.Text); // Esta rotina mostra apenas o nome do executável.
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
end.
GOSTEI 0
Marco Salles
21/06/2012
Hummm , calma ai
A rotina que esta dando erro seria esta ?
procedure TfrmAtritubos.ltimaModificao1Click(Sender: TObject);
// Retirado do Site:
// http://www.tecnobyte.com.br/dica4.html#dica75
var
DataExe: String;
Titulo: integer;
Caminho : String;
NomeExec : String;
Versao : String;
begin
NomeExec := edtNomeExec.Text;
Caminho := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + \ + NomeExec;
Titulo := FileOpen(NomeExec, 0);
//edtDataExecModificado.Text := DateTimeToStr(FileDateToDateTime(FileAge(ParamStr(0))));
// Mostra a data da ultima modificação deste executável.
//edtDataExecModificado.Text := DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName)));
ShowMessage(DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName))));
end;
A rotina que esta dando erro seria esta ?
procedure TfrmAtritubos.ltimaModificao1Click(Sender: TObject);
// Retirado do Site:
// http://www.tecnobyte.com.br/dica4.html#dica75
var
DataExe: String;
Titulo: integer;
Caminho : String;
NomeExec : String;
Versao : String;
begin
NomeExec := edtNomeExec.Text;
Caminho := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + \ + NomeExec;
Titulo := FileOpen(NomeExec, 0);
//edtDataExecModificado.Text := DateTimeToStr(FileDateToDateTime(FileAge(ParamStr(0))));
// Mostra a data da ultima modificação deste executável.
//edtDataExecModificado.Text := DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName)));
ShowMessage(DatetimeToStr(FileDateToDateTime(FileAge(Application.ExeName))));
end;
GOSTEI 0
Fábio Sela
21/06/2012
a rotina que está com problemas é esta:
procedure TfrmAtritubos.BitBtn5Click(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
//edtNomeExec.text := edtCaminhoExe.Text; // Esta rotina mostra o nome do executável com o caminho completo
edtNomeExec.text := ExtractFileName(edtCaminhoExe.Text); // Esta rotina mostra apenas o nome do executável.
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
procedure TfrmAtritubos.BitBtn5Click(Sender: TObject);
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
Caminho, NomeExec : String;
HoraLocal : TDateTime;
begin
if (edtCaminhoExe.Text = ) then
Begin
ShowMessage(O campo Caminho do Exec. não pode estar em branco);
End;
//edtNomeExec.text := edtCaminhoExe.Text; // Esta rotina mostra o nome do executável com o caminho completo
edtNomeExec.text := ExtractFileName(edtCaminhoExe.Text); // Esta rotina mostra apenas o nome do executável.
NomeExec := edtNomeExec.Text;
{ arquivo }
FindFirst(NomeExec,faAnyFile,SearchFile);
try
{ Criação }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
edtDataCriacao.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
edtDataModificacao.text := DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
edtUltimoAcesso.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
GOSTEI 0
Deivison Melo
21/06/2012
function GetVersionExe(pExeFile: string): string;
var
_Size: DWORD;
_VerInfo: Pointer;
_ValueSize: DWORD;
_Value: PVSFixedFileInfo;
_Dummy: DWORD;
_V1, _V2, _V3, _V4: Word;
begin
_Size := GetFileVersionInfoSize(PChar(pExeFile), _Dummy) ;
GetMem(_VerInfo, _Size);
GetFileVersionInfo(PChar(pExeFile), 0, _Size, _VerInfo);
VerQueryValue(_VerInfo, \, Pointer(_Value), _ValueSize);
with _Value^ do
begin
_V1 := dwFileVersionMS shr 16;
_V2 := dwFileVersionMS and $FFFF;
_V3 := dwFileVersionLS shr 16;
_V4 := dwFileVersionLS and $FFFF;
end;
FreeMem(_VerInfo, _Size);
Result := Copy(IntToStr(100 + _V1), 3, 2) + . +
Copy(IntToStr(100 + _V2), 3, 2) + . +
Copy(IntToStr(100 + _V3), 3, 2) + . +
Copy(IntToStr(100 + _V4), 3, 2);
end;
var
_Size: DWORD;
_VerInfo: Pointer;
_ValueSize: DWORD;
_Value: PVSFixedFileInfo;
_Dummy: DWORD;
_V1, _V2, _V3, _V4: Word;
begin
_Size := GetFileVersionInfoSize(PChar(pExeFile), _Dummy) ;
GetMem(_VerInfo, _Size);
GetFileVersionInfo(PChar(pExeFile), 0, _Size, _VerInfo);
VerQueryValue(_VerInfo, \, Pointer(_Value), _ValueSize);
with _Value^ do
begin
_V1 := dwFileVersionMS shr 16;
_V2 := dwFileVersionMS and $FFFF;
_V3 := dwFileVersionLS shr 16;
_V4 := dwFileVersionLS and $FFFF;
end;
FreeMem(_VerInfo, _Size);
Result := Copy(IntToStr(100 + _V1), 3, 2) + . +
Copy(IntToStr(100 + _V2), 3, 2) + . +
Copy(IntToStr(100 + _V3), 3, 2) + . +
Copy(IntToStr(100 + _V4), 3, 2);
end;
GOSTEI 0
Deivison Melo
21/06/2012
OU ainda
http://codigodelphi.blogspot.com.br/2009/09/pega-informacoes-de-versao-de-qualquer.html
http://codigodelphi.blogspot.com.br/2009/09/pega-informacoes-de-versao-de-qualquer.html
GOSTEI 0
Fábio Sela
21/06/2012
Deivison, explique um pouco melhor esta função.
se possível com um exemplo, por gentileza.
Grato.
se possível com um exemplo, por gentileza.
Grato.
GOSTEI 0
Fábio Sela
21/06/2012
Valeu Marco. Vou dar uma Olhada nisso.
Grato.
Grato.
GOSTEI 0
Fábio Sela
21/06/2012
Da um erro ao tentar compilar:
Coloco a expressão:
Showmessage(DateTimetostr(TFile.GetCreationTime(edtCaminhoExe.Text)));
e aparece mensagem:
[Error] untAtributos.pas(319): Undeclared identifier: TFile
Coloco a expressão:
Showmessage(DateTimetostr(TFile.GetCreationTime(edtCaminhoExe.Text)));
e aparece mensagem:
[Error] untAtributos.pas(319): Undeclared identifier: TFile
GOSTEI 0
Fábio Sela
21/06/2012
descobri, é porque to tentando compilar em delphi7.
coloquei o projeto no delphi 10 e compilou.
pode encerrar o topico.
grato.
coloquei o projeto no delphi 10 e compilou.
pode encerrar o topico.
grato.
GOSTEI 0