ファイルのバージョン情報を取得する
|
101 |
FileVersionInfo |
動作確認 |
Delphi2007 |
更新日 |
2010/06/27(日) |
ファイルのプロパティ、[バージョン情報]タブに表示される
バージョン情報の値を取得する関数です。
────────────────────
{-------------------------------
// ファイルのプロパティ、バージョン情報を取得する
機能: ファイル、プロパティの[バージョン情報]タブに表示される
各種の値を取得します。
引数説明: TitleKey:バージョン情報の各値のタイトルを指定する
指定できるキー値は次のとおり、//以降はWindowsで表示される名称
CompanyName //会社名
FileDescription //説明 or ファイル記述子
FileVersion //ファイル バージョン
InternalName //内部名 or 内部ファイル名
LegalCopyright //著作権 or 著作権情報
LegalTrademarks //商標
OriginalFileName//正式ファイル名 or オリジナルファイル名
ProductName //製品名
ProductVersion //製品バージョン
Comments //コメント
参考:
履歴: 2003/09/28
//------------------------------}
function GetFileVersionInformation(FileName, TitleKey: String): String;
const
coTRANSLATION = '\\VarFileInfo\\Translation';
coSTR_FILE_INFO = '\\StringFileInfo\\';
var
fileVarsionInfoSize :Integer;
dummy :DWORD;
versionInfoSize :DWORD;
pFileVarsionInfo,
translation,
infoPointer :Pointer;
varValue :String;
begin
{バージョン情報サイズを得る}
fileVarsionInfoSize := GetFileVersionInfoSize(PChar(FileName), dummy);
if fileVarsionInfoSize > 0 then begin
{バージョン情報用メモリ確保}
GetMem(pFileVarsionInfo, fileVarsionInfoSize);
try
{バージョン情報リソース取得}
GetFileVersionInfo(PChar(FileName), 0, fileVarsionInfoSize, pFileVarsionInfo);
{変換テーブルへのポインタ取得}
VerQueryValue(pFileVarsionInfo, coTRANSLATION, translation, versionInfoSize);
{バージョン情報リクエスト文字列を初期化する}
varValue := coSTR_FILE_INFO +
IntToHex(LoWord(LongInt(translation^)), 4) +
IntToHex(HiWord(LongInt(translation^)), 4) + '\\';
if VerQueryValue(pFileVarsionInfo, PChar(varValue + PropertyStr),
infoPointer, versionInfoSize) then begin
{(注)ここは直接Resultに入れない方がいいはずです}
varValue := String(PChar(infoPointer));
Result := varValue;
end;
finally
{メモリ解放}
FreeMem(pFileVarsionInfo, fileVarsionInfoSize);
end;{try...}
end;
end;
{----------------------------------------
//テストコードは次の通り
procedure TForm1.Button3Click(Sender: TObject);
var
Target: String;
begin
with Memo1.Lines do
begin
Target := Application.ExeName;
Add(GetFileProperty(Target, 'CompanyName')); //会社名
Add(GetFileProperty(Target, 'FileDescription')); //説明 or ファイル記述子
Add(GetFileProperty(Target, 'FileVersion')); //ファイル バージョン
Add(GetFileProperty(Target, 'InternalName')); //内部名 or 内部ファイル名
Add(GetFileProperty(Target, 'LegalCopyright')); //著作権 or 著作権情報
Add(GetFileProperty(Target, 'LegalTrademarks')); //商標
Add(GetFileProperty(Target, 'OriginalFileName')); //正式ファイル名 or オリジナルファイル名
Add(GetFileProperty(Target, 'ProductName')); //製品名
Add(GetFileProperty(Target, 'ProductVersion')); //製品バージョン
Add(GetFileProperty(Target, 'Comments')); //コメント
end;
end;
//----------------------------------------}
//------------------------------
────────────────────
この関数を使って
アプリケーションのタイトルにバージョン情報を
含めて表示させるコードを書いてみます。
────────────────────
type
TVersionFormat = (vfMajorMinorReleaseBuild, vfMajorMinorRelease, vfMajorMinor);
{-------------------------------
// アプリケーションのタイトルを生成する
機能: 『タイトル ver 1.0.0』という文字列を生成する
Titleには『タイトル』
VersionJuntionTextには『 ver 』
VersionFormatに vfMajorMinorRelease を選択するとよい
備考:
履歴: 2006/09/18(月) 15:26
//------------------------------}
function ApplicationTitlePlusVersion(Title, VersionJuntionText: String;
VersionFormat: TVersionFormat): String;
function MajorMinorReleaseBuild: String;
begin //出力形式:メジャー.マイナー.リリース.ビルド
Result := GetFileVersionInformation(ParamStr(0), 'FileVersion');
end;
function MajorMinorRelease: String;
begin //出力形式:メジャー.マイナー.リリース
Result := ChangeFileExt(
GetFileVersionInformation(ParamStr(0), 'FileVersion'), '')
end;
function MajorMinor: String;
begin //出力形式:メジャー.マイナー
Result := ChangeFileExt( ChangeFileExt(
GetFileVersionInformation(ParamStr(0), 'FileVersion'), ''), '');
end;
var
VersionInfo: String;
begin
case VersionFormat of
vfMajorMinorReleaseBuild:
VersionInfo := MajorMinorReleaseBuild;
vfMajorMinorRelease:
VersionInfo := MajorMinorRelease;
vfMajorMinor:
VersionInfo := MajorMinor;
end;
if VersionInfo = '' then
begin
Result := Title;
end else
begin
Result := Title + VersionJuntionText + VersionInfo;
end;
end;
//------------------------------
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
{下:アプリケーションのタイトルを制御}
Application.Title := ApplicationTitlePlusVersion(Application.Title, ' ver ', vfMajorMinorRelease);
Self.Caption := ApplicationTitlePlusVersion(Self.Caption, ' ver ', vfMajorMinorRelease);
end;
//※FormCreateイベントでも記述可能
────────────────────
アプリケーションタイトルや
バージョン情報ダイアログなどで
バージョン表記をするとき、
情報を一元管理できるので結構便利です。
|