Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1126584485
_lbp
2005-09-13 08:08
2005.10.02
Знаю что в FoxPro команда Pack


1-1125900752
kMax
2005-09-05 10:12
2005.10.02
Скопировать файл с заменой


1-1126243376
Stepan
2005-09-09 09:22
2005.10.02
Отладка в Delphi


1-1126614631
Tor
2005-09-13 16:30
2005.10.02
Пауза без остановки процесса типа Sleep


1-1125922258
Barvetal
2005-09-05 16:10
2005.10.02
Посоветуйте библиотеку скинов (желательно анимированную)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский