如何获得文件的版权信息,包括公司名,文件描述,版本号等,谢谢了! 你不是给出了API吗?看看《Delphi 5开发人员指南》第382页,有一个TVerInfoRes类,可以解决你的问题,如果你没有书,可以到网上去找该书的配套源码,很好找的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很少的代码阿,怎么会看不懂呢?遇到不懂的API,就到MSDN去查这样你会长进很快的 到torry上查找Version,上面有许多带例子的程序!!! unit GetFileInfoUtils;interfaceuses Windows; type TFileInfo = packed record CommpanyName: string; FileDescription: string; FileVersion: string; InternalName: string; LegalCopyright: string; LegalTrades: string; OriginalFileName: string; ProductName: string; ProductVersion: string; SpecialBuild: string; PrivateBuild: string; Comments: string; VsFixedFileInfo: VS_FIXEDFILEINFO; UserDefineValues: Array of string; end;function GetFileVersionInfomation(const FileName: string; var Info: TFileInfo;const UserDefine: Array of string):Boolean;implementationuses SysUtils;function GetFileVersionInfomation(const FileName: string; var Info: TFileInfo;const UserDefine: Array of string):Boolean;const SFInfo = '\StringFileInfo\';var VersionInfo: Pointer; InfoSize: DWORD; InfoPointer: Pointer; Translation: Pointer; VersionValue: string; unused: DWORD; iUseDefineNum:Integer;begin unused := 0; Result := False; InfoSize := GetFileVersionInfoSize(pchar(FileName), unused); if InfoSize > 0 then begin GetMem(VersionInfo, InfoSize); Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo); if Result then begin VerQueryValue(VersionInfo, '\VarFileInfo\Translation', Translation, InfoSize); VersionValue := SFInfo + IntToHex(LoWord(Longint(Translation^)), 4) + IntToHex(HiWord(Longint(Translation^)), 4) + '\'; VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName'), InfoPointer, InfoSize); Info.CommpanyName := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription'), InfoPointer, InfoSize); Info.FileDescription := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion'), InfoPointer, InfoSize); Info.FileVersion := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName'), InfoPointer, InfoSize); Info.InternalName := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize); Info.LegalCopyright := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize); Info.LegalTrades := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize); Info.OriginalFileName := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductName'), InfoPointer, InfoSize); Info.ProductName := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize); Info.ProductVersion := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'SpecialBuild'), InfoPointer, InfoSize); Info.SpecialBuild := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'PrivateBuild'), InfoPointer, InfoSize); Info.PrivateBuild := string(pchar(InfoPointer)); VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments'), InfoPointer, InfoSize); Info.Comments := string(pchar(InfoPointer)); if VerQueryValue(VersionInfo, '\', InfoPointer, InfoSize) then Info.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^); for iUseDefineNum := Low(UserDefine) to High(UserDefine) do begin if VerQueryValue(VersionInfo,PChar(VersionValue + UserDefine[iUseDefineNum]),InfoPointer,InfoSize) then begin Info.UserDefineValues[iUseDefineNum] := string(pchar(InfoPointer)); end; end; {if UserDefine <> '' then begin if VerQueryValue(VersionInfo, pchar(VersionValue + UserDefine), InfoPointer, InfoSize) then Info.UserDefineValue := string(pchar(InfoPointer)); end;} end; FreeMem(VersionInfo); end;end;end. 如何在 cxgrid 根据QUERY结果自动生成列? delphi checkbox问题求教 串口通讯的问题?在线等!在线等!在线等!在线等!在线等!在线等!在线等!在线等!在线等!在线等!在线等!急!急!急!急!急!急! 存在多个网络连接时,如何保证ping包走各自的网关?请看内容,谢谢先! 怎么退出EXCEL,要完全关闭后台进程! IE儲存檔案的問題? maskedit格式问题,向大家请教!! 在校学生就没有工资??气死我了 参数问题 有100分 绝对 有关于DELPHI5中SERVER控件的用法的文章吗? 怎样完全断开与数据库的连接? Delphi&SQL Server﹗﹗﹗
遇到不懂的API,就到MSDN去查
这样你会长进很快的
uses
Windows;
type
TFileInfo = packed record
CommpanyName: string;
FileDescription: string;
FileVersion: string;
InternalName: string;
LegalCopyright: string;
LegalTrades: string;
OriginalFileName: string;
ProductName: string;
ProductVersion: string;
SpecialBuild: string;
PrivateBuild: string;
Comments: string;
VsFixedFileInfo: VS_FIXEDFILEINFO;
UserDefineValues: Array of string;
end;function GetFileVersionInfomation(const FileName: string; var Info: TFileInfo;const UserDefine: Array of string):Boolean;implementation
uses
SysUtils;function GetFileVersionInfomation(const FileName: string; var Info: TFileInfo;const UserDefine: Array of string):Boolean;
const
SFInfo = '\StringFileInfo\';
var
VersionInfo: Pointer;
InfoSize: DWORD;
InfoPointer: Pointer;
Translation: Pointer;
VersionValue: string;
unused: DWORD;
iUseDefineNum:Integer;
begin
unused := 0;
Result := False;
InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);
if InfoSize > 0 then
begin
GetMem(VersionInfo, InfoSize);
Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo);
if Result then
begin
VerQueryValue(VersionInfo, '\VarFileInfo\Translation', Translation, InfoSize);
VersionValue := SFInfo + IntToHex(LoWord(Longint(Translation^)), 4) +
IntToHex(HiWord(Longint(Translation^)), 4) + '\';
VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);
Info.CommpanyName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);
Info.FileDescription := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);
Info.FileVersion := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName'), InfoPointer, InfoSize);
Info.InternalName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);
Info.LegalCopyright := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize);
Info.LegalTrades := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);
Info.OriginalFileName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductName'), InfoPointer, InfoSize);
Info.ProductName := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);
Info.ProductVersion := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'SpecialBuild'), InfoPointer, InfoSize);
Info.SpecialBuild := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'PrivateBuild'), InfoPointer, InfoSize);
Info.PrivateBuild := string(pchar(InfoPointer));
VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments'), InfoPointer, InfoSize);
Info.Comments := string(pchar(InfoPointer));
if VerQueryValue(VersionInfo, '\', InfoPointer, InfoSize) then
Info.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);
for iUseDefineNum := Low(UserDefine) to High(UserDefine) do
begin
if VerQueryValue(VersionInfo,PChar(VersionValue + UserDefine[iUseDefineNum]),InfoPointer,InfoSize) then
begin
Info.UserDefineValues[iUseDefineNum] := string(pchar(InfoPointer));
end;
end;
{if UserDefine <> '' then
begin
if VerQueryValue(VersionInfo, pchar(VersionValue + UserDefine), InfoPointer, InfoSize) then
Info.UserDefineValue := string(pchar(InfoPointer));
end;}
end;
FreeMem(VersionInfo);
end;
end;end.