1. 程式人生 > >Delphi 獲取檔案的版本等資訊

Delphi 獲取檔案的版本等資訊

delphi 獲取檔案的版本等資訊

function GetFileVersion(AFileName: string): string;
var
n, Len: DWORD;
Buf : PChar;
Value: Pointer;
szName: array [0..255] of Char;
Transstring: string;
begin
Len := GetFileVersionInfoSize(PChar(AFileName), n);
if Len > 0 then
begin
Buf := AllocMem(Len);
if GetFileVersionInfo(Pchar(AFileName), n, Len, Buf) then
begin
Value := nil;
VerQueryValue(Buf, '/VarFileInfo/Translation', Value, Len);
if Value <> nil then
Transstring := IntToHex(MakeLong(HiWord(LongInt(Value^)),
LoWord(LongInt(Value^))),8);
StrPCopy(szName, '/stringFileInfo/' + Transstring + '/FileVersion');
if VerQueryValue(Buf, szName, Value, Len) then
Result := StrPas(Pchar(Value));
end;
FreeMem(Buf, n);
end;
end;

如何用Delphi程式設計讀出一個DLL檔案的版本號,請給示例

好,給幾個函式還不行,那就給段程式碼吧:

procedure TForm1.Button1Click(Sender: TObject);
var
dwVerInfoSize, dwVerHnd: DWORD;
hMem: THandle;
lpvMem, lszVer: Pointer;
szGetName: array[0..255] of Char;
cchVer: UINT;
fRet: Boolean;
vsffi: VS_FIXEDFILEINFO;
begin
dwVerInfoSize := GetFileVersionInfoSize('Shell32.dll', dwVerHnd);
if Boolean(dwVerInfoSize) then
begin
hMem := GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpvMem := GlobalLock(hMem);
GetFileVersionInfo('Shell32.dll', dwVerHnd, dwVerInfoSize, lpvMem);
StrCopy(szGetName, '/');
lszVer := nil;
fRet := VerQueryValue(lpvMem, szGetName, lszVer, cchVer);
if fRet and Boolean(cchVer) and Boolean(lszVer) then
begin
vsffi := VS_FIXEDFILEINFO(lszVer^);
ShowMessage('檔案版本: ' +
IntToStr(HIWORD(vsffi.dwFileVersionMS)) + '.' +
IntToStr(LOWORD(vsffi.dwFileVersionMS)) + '.' +
IntToStr(HIWORD(vsffi.dwFileVersionLS)) + '.' +
IntToStr(LOWORD(vsffi.dwFileVersionLS)));
end;
GlobalUnlock(hMem);
GlobalFree(hMem);
end;
end;


如何獲取一個可執行檔案的版本號?

function GetFileVersion(fn: string; var ma, mi, r ,b: integer):boolean;//得到本程式的版本號
var
buf, p: pChar;
sver: ^VS_FIXEDFILEINFO ;
i: LongWord;
begin
i:= GetFileVersionInfoSize(pchar(fn), i);
new(sver);
p:= pchar(sver);
GetMem(buf, i);
ZeroMemory(buf, i);
result:= false;
if GetFileVersionInfo(pchar(fn), 0, 4096, pointer(buf)) then
if VerQueryValue(buf, '/', pointer(sver), i) then begin
ma:= sVer^.dwFileVersionMS shr 16;
mi:= sver^.dwFileVersionMS and $0000ffff;
r:= sver^.dwFileVersionLS shr 16;
b:= sver^.dwFileVersionLS and $0000ffff;
result:= true;
end;
Dispose(p);
FreeMem(buf);
end;

=====================================================================================

//得到檔案版本
    function GetVersionString(FileName: string): string;
    var
     VerInfoSize: DWORD;
     VerInfo: Pointer;
     VerValueSize: DWORD;
     Dummy: DWORD;
     VerValue: PVSFixedFileInfo;
    begin
     Result := '';
     VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
     if VerInfoSize = 0 then Exit;
     GetMem(VerInfo, VerInfoSize);
     GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, VerInfo);
     VerQueryValue(VerInfo, '/', Pointer(VerValue), VerValueSize);
     Result := IntToStr(VerValue^.dwFileVersionMS shr 16) + '.' +
     IntToStr(VerValue^.dwFileVersionMS and $FFFF) + '.' +
     IntToStr(VerValue^.dwFileVersionLS shr 16) + '.' +
     IntToStr(VerValue^.dwFileVersionLS and $FFFF);
     FreeMem(VerInfo);
    end;
    可以取出bpl的版本號的啊
    測試程式碼如下:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //指定某個檔案的版本號
     ShowMessage(GetVersionString('d:/Program Files/Borland/Delphi7/Bin/applet70.bpl'));
    //如果是當前應用程式則以下程式碼:
     showmessage(GetVersionString(application.ExeName));
    end;

==================================================================================================

在Delphi中獲取和修改檔案的時間

本文介紹了在Delphi中利用系統函式和Windows API函式呼叫來獲取和修改檔案的時間資訊的方法。

熟悉Windows 95/98的朋友一定經常會用單擊滑鼠右鍵的方法來檢視所選定的檔案的屬性資訊。在屬性選單中會列出該檔案的建立時間、修改時間和訪問時間。這些資訊常常是很有用的,它們的設定一般都是由作業系統(也就是由Dos/Windows等等)自動完成的,不會讓使用者輕易修改。

這裡,我向大家介紹在Delphi中如何實現檔案時間的獲取和修改方法。Delphi中提供了很完備的

Windows API函式的呼叫介面,可以方便的進行高階Windows程式設計。利用Delphi中的FindFirst函式可以得到一個檔案的屬性記錄,該記錄中的FindData域中就記載了詳細的檔案時間資訊。然而遺憾的是,FindData中的時間資訊是不能直接得到的。因此,有人(編者按:很遺憾不知此人姓名)編寫了一個轉換函式來完成檔案時間格式的轉換。下面給出了具體的實現方法,僅供參考:
function CovFileDate(Fd:_FileTime):TDateTime;
{ 轉換檔案的時間格式 }
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
有了上面的函式支援,我們就可以獲取一個檔案的時間資訊了。以下是一個簡單的例子:
procdeure GetFileTime(const Tf:string);
{ 獲取檔案時間,Tf表示目標檔案路徑和名稱 }
const
Model=yyyy/mm/dd,hh:mm:ss; { 設定時間格式 }
var
Tp:TSearchRec; { 申明Tp為一個查詢記錄 }
T1,T2,T3:string;
begin
FindFirst(Tf,faAnyFile,Tp); { 查詢目標檔案 } T1:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftCreationTime)));
{ 返回檔案的建立時間 }
T2:=FormatDateTime(Model,
CovFileDate(Tp.FindData.ftLastWriteTime)));
{ 返回檔案的修改時間 }
T3:=FormatDateTime(Model,Now));
{ 返回檔案的當前訪問時間 }
FindClose(Tp);
end;
設定檔案的時間要複雜一些,這裡介紹利用Delphi中的DataTimePicker元件來輔助完成這一複雜的操作。下面的例子利用了四個DataTimePicker元件來完成檔案建立時間和修改時間的設定。注意:檔案的訪問時間用修改時間來代替。使用下面的例子時,請在您的Form上新增四個DataTimePicker元件。其中第一和第三個DataTimePicker元件中的Kind設定為dtkDate,第二個和第四個DataTimePicker元件中的Kind設定為dtkTime.
procedure SetFileDateTime(const Tf:string);
{ 設定檔案時間,Tf表示目標檔案路徑和名稱 }
var
Dt1,Dt2:Integer;
Fs:TFileStream;
Fct,Flt:TFileTime;
begin
Dt1:=DateTimeToFileDate(
Trunc(Form1.DateTimePicker1.Date) + Frac(Form1.DateTimePicker2.Time));
Dt2:=DateTimeToFileDate(
Trunc(Form1.DateTimePicker3.Date) + Frac(Form1.DateTimePicker4.Time));
{ 轉換使用者輸入在DataTimePicker中的資訊 }
try
FS := TFileStream.Create(Tf, fmOpenReadWrite);
try
if DosDateTimeToFileTime(LongRec(DT1).Hi, LongRec(DT1).Lo, Fct) and
LocalFileTimeToFileTime(Fct, Fct) and
DosDateTimeToFileTime(LongRec(DT2).Hi, LongRec(DT2).Lo, Flt) and
LocalFileTimeToFileTime(Flt, Flt)
then SetFileTime(FS.Handle,
@Fct, @Flt, @Flt);
{ 設定檔案時間屬性 }
finally
FS.Free;
end;
except
MessageDlg(日期修改操作失敗!,
mtError, [mbOk], 0);
{ 因為目標檔案正在被使用等原因而導致失敗 }
end;
end;
以上簡單介紹了檔案時間屬性的修改方法,請注意:修改檔案時間的範圍是從公元1792年9月19日開始的,上限可以達到公元2999年或更高。另外,請不要將此技術用於破壞他人檔案等非正當途徑。

==================================================================================================

delphi 獲取檔案建立,修改時間

function CovFileDate(Fd:_FileTime):TDateTime;
{ 轉換檔案的時間格式 }
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;

procedure TForm1.Button2Click(Sender: TObject);
const
Model='yyyy/mm/dd'; { 設定時間格式 }
var
Tp:TSearchRec; { 申明Tp為一個查詢記錄 }
T1,T2,T3:string;
begin
FindFirst('D:/SQL10.TXT',faAnyFile,Tp); { 查詢目標檔案 }
T1:=FormatDateTime(Model,CovFileDate(Tp.FindData.ftCreationTime));
{ 返回檔案的建立時間 }
T2:=FormatDateTime(Model,CovFileDate(Tp.FindData.ftLastWriteTime));
{ 返回檔案的修改時間 }
T3:=FormatDateTime(Model,Now);
{ 返回檔案的當前訪問時間 }
FindClose(Tp);
end;

==================================================================================================

相關推薦

Delphi 獲取檔案版本資訊

delphi 獲取檔案的版本等資訊 function GetFileVersion(AFileName: string): string; var n, Len: DWORD; Buf : PChar; Value: Pointer; szName: array [0..2

js獲取ip地址,作業系統,瀏覽器版本資訊,可相容

  這次呢,說一下使用js獲取使用者電腦的ip資訊,剛開始只是想獲取使用者ip,後來就順帶著獲取了作業系統和瀏覽器資訊。   先說下獲取使用者ip地址,包括像ipv4,ipv6,掩碼等內容,但是大部分都要根據瀏覽器的支援情況來決定,目前主流瀏覽器對於ipv4的支援是統一的。第一種

Qt 獲取exe版本詳細資訊

【El_equilibrio 原創】      核心函式:VerQueryValue       VerQueryValue這個函式用於從版本資源中獲取資訊。呼叫這個函式前,必須先用GetFileVersionInfo函式獲取版本資源資訊。這個函式會檢查資源資訊,並將

獲取應用名稱、應用版本、裝置型號、系統版本資訊

有時我們在 App 中提交一些統計資訊或者使用者反饋資訊時,為了能更好地進行分析,通常會附帶上當前應用程式的名稱、版本號、裝置型號、以及裝置系統版本。下面演示如何獲取這些資訊。 1,效果圖

利用WinAPI(GetFileVersionInfo)獲取檔案版本資訊

1)檔案版本資訊在Windows內部,按照以下格式儲存:例如:2.10.0.256->dwFileVersionMS = 0x0002000A 高4位元組 = 2 = 0x0002; 低4位元組 = 10 = 0x000AdwFileVersionLS = 0x0000

Asp.Net獲取電腦名,IP地址及當前使用者名稱,作業系統,瀏覽器,.NET版本資訊的方法

 1. 在ASP.NET中專用屬性:    獲取伺服器電腦名:Page.Server.ManchineName    獲取使用者資訊:Page.User    獲取客戶端電腦名:Page.Request.UserHostName    獲取客戶端電腦IP:Page.Reque

Android 獲取手機廠商、系統版本資訊

在開發中 我們有時候會需要獲取當前手機的系統版本來進行判斷,或者需要獲取一些當前手機的硬體資訊。 android.os.Build類中。包括了這樣的一些資訊。我們可以直接呼叫 而不需要新增任何的許可權和方法。 android.os.Build.BOARD

Linux檢視作業系統版本 核心版本資訊 uname和lsb release

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

根據身份證獲取性別生日資訊

(1)根據身份證獲取性別 方法1: private string sex(string identityCard) { string sex = ""; //處理18位的身份證號碼從號碼中得到生日和性別程式碼 if (identityCard.Length ==

c++ 獲取檔案版本

連結器->輸入->附加依賴項 新增Version.lib,msdn上記錄的是新增mincore.lib,這個是錯的。 標頭檔案:Winver.h GetCurrentVersion() { wchar_t versionCurrent[25]; wchar_t versio

【python】啟動一個http服務,用於獲取檔案中的資訊

使用場景:想要在瀏覽器下檢視某個機器下的目錄檔案;想使用wget臨時的下載某個機器下的檔案。 首先在目標機器下使用python啟動一個http服務: python -m SimpleHTTPServer     ---------這樣會啟動一個埠為預設埠8000的HTTP

微信授權獲取使用者openId資訊

在我們開發小程式的時候,需要通過授權獲取使用者的資訊。 第一種使用wx.getUserInfo直接獲取微信頭像,暱稱 // 必須是在使用者已經授權的情況下呼叫 wx.getUserInfo({ success: function(res) { var userInfo = res.u

C#通過shell32獲取檔案詳細備註資訊

1.從系統Window/System32資料夾中Copy出 Shell32.dll Com元件 將Shell32.dll檔案引用到專案中,並設定“嵌入互操作型別”為false 2.程式碼例項: ShellClass sh = new ShellClass(); Fold

使用ShellClass獲取檔案屬性詳細資訊

首先引用COM元件         Microsoft Shell Controls And Automation      這裡需要注意         DLL的屬性Embed Interop Type 設為False      否則會引起互操作型別異常  

C++ 獲取檔案版本號的程式碼

// Test.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <Windows.h> #include <tchar.h> #include <string> #include

linux 通過Ip獲取主機名資訊gethostbyaddr()

#include <stdlib.h> #include <stdio.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #

Delphi獲取檔名、檔名不帶副檔名、檔名的方法;delphi 獲取檔案所在路徑

取檔名 ExtractFileName(FileName); 取副檔名: ExtractFileExt(filename); 取檔名,不帶副檔名: 方法一: Function ExtractFileNameNoExt(FileString: S

php獲取伺服器作業系統資訊

下面是PHP獲取當前伺服器資訊的基本語句。 PHP程式版本: <?PHP echo PHP_VERSION; ?> ZEND版本: <?PHP echo zend_version(

Android通過build.gradle配置應用版本資訊

android { compileSdkVersion Integer.parseInt(System.properties['compileSdkVersion']) buildTo

Linux 程式獲取檔案系統掛載資訊

linux shell可以通過檢視/etc/mtab或者/proc/mounts檔案來獲取當前檔案系統掛載資訊,程式內直接讀取/etc/mtab或者/proc/mounts,解析字串較為繁瑣,可以使用GNU C Library提供的mntent.h中的庫函式