Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
ВнизКак читать из любого ЕХЕ файла данные... Найти похожие ветки
← →
Dennis S (2005-09-06 13:54) [0]Конкретно вот эти:
Product Version: (здесь интересующие данные)
Company Name: (здесь интересующие данные)
Internal Name: (здесь интересующие данные)
Original Filename: (здесь интересующие данные)
такие строки тоже есть Description, Version, Copyright, Product...
Вообще какие-либо данные о версии файла...
Существует ли стандартная функция?
← →
Dennis S (2005-09-06 14:34) [1]Вот нашёл в iNET-е кое-что....
Выдаёт версию файла (проверенно)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
function GetFileVersion(const FileName: string): string;
type
PDWORD = ^DWORD;
PLangAndCodePage = ^TLangAndCodePage;
TLangAndCodePage = packed record
wLanguage: WORD;
wCodePage: WORD;
end;
PLangAndCodePageArray = ^TLangAndCodePageArray;
TLangAndCodePageArray = array[0..0] of TLangAndCodePage;
var
loc_InfoBufSize: DWORD;
loc_InfoBuf: PChar;
loc_VerBufSize: DWORD;
loc_VerBuf: PChar;
cbTranslate: DWORD;
lpTranslate: PDWORD;
i: DWORD;
begin
Result := "";
if (Length(FileName) = 0) or (not Fileexists(FileName)) then
Exit;
loc_InfoBufSize := GetFileVersionInfoSize(PChar(FileName), loc_InfoBufSize);
if loc_InfoBufSize > 0 then
begin
loc_VerBuf := nil;
loc_InfoBuf := AllocMem(loc_InfoBufSize);
try
if not GetFileVersionInfo(PChar(FileName), 0, loc_InfoBufSize, loc_InfoBuf)
then
exit;
if not VerQueryValue(loc_InfoBuf, "\\VarFileInfo\\Translation",
Pointer(lpTranslate), DWORD(cbTranslate)) then
exit;
for i := 0 to (cbTranslate div SizeOf(TLangAndCodePage)) - 1 do
begin
if VerQueryValue(
loc_InfoBuf,
PChar(Format(
"StringFileInfo\0%x0%x\FileVersion", [
PLangAndCodePageArray(lpTranslate)[i].wLanguage,
PLangAndCodePageArray(lpTranslate)[i].wCodePage])),
Pointer(loc_VerBuf),
DWORD(loc_VerBufSize)
) then
begin
Result := loc_VerBuf;
Break;
end;
end;
finally
FreeMem(loc_InfoBuf, loc_InfoBufSize);
end;
end;
end;
← →
Dennis S (2005-09-06 14:36) [2]Как получить всё ОСТАЛЬНОЕ? 8(
← →
CHES © (2005-09-06 14:37) [3]Не надо в нете искать, когда в help-e есть
procedure TForm1.Button1Click(Sender: TObject);
const
InfoNum = 10;
InfoStr: array[1..InfoNum] of string = ("CompanyName", "FileDescription",
"FileVersion", "InternalName", "LegalCopyright", "LegalTradeMarks",
"OriginalFileName", "ProductName", "ProductVersion", "Comments");
var
S: string;
n, Len, i: DWORD;
Buf: PChar;
Value: PChar;
begin
S := Application.ExeName; // Путь к файлу информация о котором интересует
n := GetFileVersionInfoSize(PChar(S), n);
if n > 0 then
begin
Buf := AllocMem(n);
Memo1.Lines.Add("VersionInfoSize = " + IntToStr(n));
GetFileVersionInfo(PChar(S), 0, n, Buf);
for i := 1 to InfoNum do
if VerQueryValue(Buf, PChar("StringFileInfo\040904E4\" + InfoStr[i]),
Pointer(Value), Len) then
Memo1.Lines.Add(InfoStr[i] + " = " + Value);
FreeMem(Buf, n);
end
else
Memo1.Lines.Add("No version information found");
end;
← →
Big Joe © (2005-09-06 14:50) [4]Прочитать владельца...
function GetFileOwner(FileName: string;
var Domain, Username: string): Boolean;
var
SecDescr: PSecurityDescriptor;
SizeNeeded, SizeNeeded2: DWORD;
OwnerSID: PSID;
OwnerDefault: BOOL;
OwnerName, DomainName: PChar;
OwnerType: SID_NAME_USE;
begin
GetFileOwner := False;
GetMem(SecDescr, 1024);
GetMem(OwnerSID, SizeOf(PSID));
GetMem(OwnerName, 1024);
GetMem(DomainName, 1024);
try
if not GetFileSecurity(PChar(FileName),
OWNER_SECURITY_INFORMATION,
SecDescr, 1024, SizeNeeded) then
Exit;
if not GetSecurityDescriptorOwner(SecDescr,
OwnerSID, OwnerDefault) then
Exit;
SizeNeeded := 1024;
SizeNeeded2 := 1024;
if not LookupAccountSID(nil, OwnerSID, OwnerName,
SizeNeeded, DomainName, SizeNeeded2, OwnerType) then
Exit;
Domain := DomainName;
Username := OwnerName;
finally
FreeMem(SecDescr);
FreeMem(OwnerName);
FreeMem(DomainName);
end;
GetFileOwner := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Domain, Username: string;
begin
GetFileOwner("YourFile.xyz", domain, username);
ShowMessage(username + "@" + domain);
end;
← →
kami © (2005-09-06 14:57) [5]Есть, называется GetFileVersionInfo
Пример - из TvFileVersionInfo :var
VerBuf: PChar;
VerSize: Integer;
VerBufValue: Pointer;
VerBufLen: Cardinal;
VerHandle: Cardinal;
VerKey: string;
//===============================================================
function GetInfo(const aKey: string): string;
begin
Result := "";
VerKey := Format("\StringFileInfo\%.4x%.4x\%s",
[LoWord(Integer(VerBufValue^)),
HiWord(Integer(VerBufValue^)), aKey]);
if VerQueryValue(VerBuf, PChar(VerKey), VerBufValue, VerBufLen) then
Result := StrPas(VerBufValue);
end;
function QueryValue(const aValue: string): string;
begin
Result := "";
// obtain version information about the specified file
if GetFileVersionInfo(PChar(sAppNamePath), VerHandle, VerSize, VerBuf) and
// return selected version information
VerQueryValue(VerBuf, "\VarFileInfo\Translation", VerBufValue, VerBufLen) then
Result := GetInfo(aValue);
end;
//====================================================
VerSize := GetFileVersionInfoSize(PChar(sAppNamePath), VerHandle);
if VerSize > 0 then
begin
VerBuf := AllocMem(VerSize);
try
CompanyName := QueryValue("CompanyName");
FileDescription := QueryValue("FileDescription");
FileVersion := QueryValue("FileVersion");
InternalName := QueryValue("InternalName");
LegalCopyRight := QueryValue("LegalCopyRight");
LegalTradeMarks := QueryValue("LegalTradeMarks");
OriginalFileName := QueryValue("OriginalFileName");
ProductName := QueryValue("ProductName");
ProductVersion := QueryValue("ProductVersion");
Comments := QueryValue("Comments");
SpecialBuildStr := QueryValue("SpecialBuild");
PrivateBuildStr := QueryValue("PrivateBuild");
finally
FreeMem(VerBuf, VerSize);
end
← →
Dennis S (2005-09-06 15:03) [6]2 Big Joe
Спасибо, но в твоём случае выдаётся инфа о пользователе файла, определяя текущего пользователя и тд...
Мне же нужна толко та инфа, которая зашита в самих ЕХЕ файлах...
То, что можно выставить в VersionInfo при компиляции файла.
← →
Big Joe © (2005-09-06 15:07) [7]А это ?
function GetVersion: string;
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
begin
VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, "\", Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
Result := IntToStr(dwFileVersionMS shr 16);
Result := Result + "." + IntToStr(dwFileVersionMS and $FFFF);
Result := Result + "." + IntToStr(dwFileVersionLS shr 16);
Result := Result + "." + IntToStr(dwFileVersionLS and $FFFF);
end;
FreeMem(VerInfo, VerInfoSize);
end;
procedure Form1.Button1Click(Sender: TObject);
begin
label1.Caption := GetVersion;
end;
← →
Dennis S (2005-09-06 18:07) [8]2 Big Joe
Спасибо, но я уже писал, что с Version уже разобрался...
2 kami
Вот это то, что я искал... :))
Универсальный ответ...
Огромное спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c