Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Как читать из любого ЕХЕ файла данные...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
14-1126064115
КаПиБаРа
2005-09-07 07:35
2005.10.02
Цивилизацию погубят США?


3-1124689916
syte_ser78
2005-08-22 09:51
2005.10.02
Два сетевых подключения к базе paradox


14-1126377707
Ксардас
2005-09-10 22:41
2005.10.02
Что такое "снимок страницы из кэша"?


14-1126283905
wnew
2005-09-09 20:38
2005.10.02
DVD, SVCD, формат, coder, encoder


4-1123070759
Jet
2005-08-03 16:05
2005.10.02
Как отловить момент закрытия консольного приложения?