大概のソフトには、現在のバージョン表示のメニューがあります。
頻繁にバージョンアップする人なんかだと、バージョン情報を更新しても、こっちの表示を書きかえるのを忘れたりする・・・・のは私だけ?(笑)
こっちの表示なんぞ、自動的に変わる様にしてしまえというやつです。
unit about;
interface
uses
Windows, SysUtils, Forms;
resourcestring
MailAddress = 'leafel@mcn.ne.jp';
WebAddress = 'http://hp.vector.co.jp/authors/VA015850/';
procedure AboutBox;
implementation
procedure AboutBox;
const
NL: string = #$D#$A;
var
BuffSize, Ignore: Cardinal;
P: Pointer;
FileDescription, LegalCopyright: PChar;
begin
BuffSize := GetFileVersionInfoSize(PChar(Application.ExeName), Ignore);
P := AllocMem(BuffSize);
GetFileVersionInfo(PChar(Application.ExeName), Ignore, BuffSize, P);
VerQueryValue(P, PChar('\StringFileInfo\041103A4\FileDescription'), Pointer(FileDescription), Ignore);
VerQueryValue(P, PChar('\StringFileInfo\041103A4\LegalCopyright'), Pointer(LegalCopyright), Ignore);
Application.MessageBox(
PChar(
FileDescription + NL +
LegalCopyright + NL +
'' + NL +
'mail: ' + MailAddress + NL +
'webpage: ' + WebAddress
),
PChar('About ' + Application.Title),
MB_OK
);
FreeMem(P);
end;
end.
こんな感じで、できます。
わかりづらいのは、VerQueryValue の第二引数でしょうか。
041103A4 って言うのは日本語だってことです。
0411 が日本語で、03A4 が シフトJIS を表すようです。
FileDescription、LegalCopyright が書いてあるとこには、欲しい情報が入ります。
CompanyName, FileDescription, FileVersion, InternalName, LegalCopyright, OriginalFilename, ProductName, ProductVersion などが定義されているみたいです。
当然ですが、読み込み元であるファイルのバージョン情報を正しくいれないと意味がありません(笑)
情報そのものがない場合には、エラーチェックをどこもしてないので、すごいことになること請け合いです(爆)