Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Информация о файле [D7, XP]


Страницы:   1 2 3 4

Chort ©   (2006-07-27 23:43:00) 

Здравствуйте! Помогите вытянуть информацию с .exe файлов средствами OpenDialog1. Т.е  необходимо чтобы при нажатии кнопки(пусть будет Button1)  появлялось окно выбора проги (.exe)
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;
И по выборе необходимого файла должна считыватся информация и показываться на экране : Размер, Версия продукта(и файла),Внутреннее имя, Исходное имя файла, Комментарий, Название продукта, Производитель,
Язык, и все что еще возможно извлечь. И как потом можно будет  управлять этими сведениями? Заранее спасибо!


Шпиён   (2006-07-28 02:05:00) [61]


> KilkennyCat ©   (28.07.06 02:00) [16]

Уговорил -)
MSDN 2006:
dwFileOS
Specifies the operating system for which this file was designed. This member can be one of the following values.
VOS_DOS
The file was designed for Microsoft MS-DOS.
VOS_NT
The file was designed for Microsoft Windows NT.
VOS__WINDOWS16
The file was designed for 16-bit Windows.
VOS__WINDOWS32
The file was designed for 32-bit Windows.
VOS_OS216
The file was designed for 16-bit OS/2.
VOS_OS232
The file was designed for 32-bit OS/2.
VOS__PM16
The file was designed for 16-bit Presentation Manager.
VOS__PM32
The file was designed for 32-bit Presentation Manager.
VOS_UNKNOWN
The operating system for which the file was designed is unknown to the system.
An application can combine these values to indicate that the file was designed for one operating system running on another. The following dwFileOS values are examples of this, but are not a complete list.

VOS_DOS_WINDOWS16
The file was designed for 16-bit Windows running on MS-DOS.
VOS_DOS_WINDOWS32
The file was designed for 32-bit Windows running on MS-DOS.
VOS_NT_WINDOWS16
The file was designed for Windows NT.
VOS_OS216_PM16
The file was designed for 16-bit Presentation Manager running on 16-bit OS/2.
VOS_OS232_PM32
The file was designed for 32-bit Presentation Manager running on 32-bit OS/2.


KilkennyCat   (2006-07-28 02:00:00) [62]

> [15] Шпиён   (28.07.06 01:57)

Беспокоить столь уважаемых таким пустяком ?! Ладно бы, водки выпить, шашлык скушать предложить...


Шпиён   (2006-07-28 01:57:00) [63]


> KilkennyCat ©   (28.07.06 01:56) [14]

"as is" - все вопросы - к авторам -)


KilkennyCat   (2006-07-28 01:56:00) [64]

> GetFileOS


как-то неочень полно...


Германн   (2006-07-28 01:55:00) [65]


> ууу....жадина :Р-))

Кажется мне, что я не далее чем пару часов назад уже где-то видел что-то подобное, но не ко мне, а к кому-то другому!


Шпиён   (2006-07-28 01:52:00) [66]


> Германн ©   (28.07.06 01:51) [11]

ууу....жадина :Р
-))


Германн   (2006-07-28 01:51:00) [67]


> Потому и прошу вариант, вдруг пригодится -)

Неа! "Вечером деньги, утром стулья, но деньги вперёд!"
Если уж речь пошла о "фискальном" аспекте, то предоплата "однозначно"! :-)


Шпиён   (2006-07-28 01:48:00) [68]

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit VerInfo;

interface

uses SysUtils, WinTypes, Dialogs, Classes;

type
 { define a generic exception class for version info, and an exception
   to indicate that no version info is available. }
 EVerInfoError   = class(Exception);
 ENoVerInfoError = class(Exception);
 eNoFixeVerInfo  = class(Exception);

 // define enum type representing different types of version info
 TVerInfoType =
   (viCompanyName,
    viFileDescription,
    viFileVersion,
    viInternalName,
    viLegalCopyright,
    viLegalTrademarks,
    viOriginalFilename,
    viProductName,
    viProductVersion,
    viComments);

const

 // define an array constant of strings representing the pre-defined
 // version information keys.
 VerNameArray: array[viCompanyName..viComments] of String[20] =
 ('CompanyName',
  'FileDescription',
  'FileVersion',
  'InternalName',
  'LegalCopyright',
  'LegalTrademarks',
  'OriginalFilename',
  'ProductName',
  'ProductVersion',
  'Comments');

type

 // Define the version info class
 TVerInfoRes = class
 private
   Handle            : DWord;
   Size              : Integer;
   RezBuffer         : String;
   TransTable        : PLongint;
   FixedFileInfoBuf  : PVSFixedFileInfo;
   FFileFlags        : TStringList;
   FFileName         : String;
   procedure FillFixedFileInfoBuf;
   procedure FillFileVersionInfo;
   procedure FillFileMaskInfo;
 protected
   function GetFileVersion   : String;
   function GetProductVersion: String;
   function GetFileOS        : String;
 public
   constructor Create(AFileName: String);
   destructor Destroy; override;
   function GetPreDefKeyString(AVerKind: TVerInfoType): String;
   function GetUserDefKeyString(AKey: String): String;
   property FileVersion    : String read GetFileVersion;
   property ProductVersion : String read GetProductVersion;
   property FileFlags      : TStringList read FFileFlags;
   property FileOS         : String read GetFileOS;
 end;

implementation

uses Windows;

const
 // strings that must be fed to VerQueryValue() function
 SFInfo                = '\StringFileInfo\';
 VerTranslation: PChar = '\VarFileInfo\Translation';
 FormatStr             = '%s%.4x%.4x\%s%s';

constructor TVerInfoRes.Create(AFileName: String);
begin
 FFileName := aFileName;
 FFileFlags := TStringList.Create;
 // Get the file version information
 FillFileVersionInfo;
 //Get the fixed file info
 FillFixedFileInfoBuf;
 // Get the file mask values
 FillFileMaskInfo;
end;

destructor TVerInfoRes.Destroy;
begin
 FFileFlags.Free;
end;

procedure TVerInfoRes.FillFileVersionInfo;
var
 SBSize: UInt;
begin
 // Determine size of version information
 Size := GetFileVersionInfoSize(PChar(FFileName), Handle);
 if Size <= 0 then         { raise exception if size <= 0 }
   raise ENoVerInfoError.Create('No Version Info Available.');

 // Set the length accordingly
 SetLength(RezBuffer, Size);
 // Fill the buffer with version information, raise exception on error
 if not GetFileVersionInfo(PChar(FFileName), Handle, Size, PChar(RezBuffer)) then
   raise EVerInfoError.Create('Cannot obtain version info.');

 // Get translation info, raise exception on error
 if not VerQueryValue(PChar(RezBuffer), VerTranslation,  pointer(TransTable),
 SBSize) then
   raise EVerInfoError.Create('No language info.');
end;

procedure TVerInfoRes.FillFixedFileInfoBuf;
var
 Size: Cardinal;
begin
 if VerQueryValue(PChar(RezBuffer), '\', Pointer(FixedFileInfoBuf), Size) then begin
    if Size < SizeOf(TVSFixedFileInfo) then
       raise eNoFixeVerInfo.Create('No fixed file info');
 end
 else
   raise eNoFixeVerInfo.Create('No fixed file info')
end;

procedure TVerInfoRes.FillFileMaskInfo;
begin
 with FixedFileInfoBuf^ do begin
   if (dwFileFlagsMask and dwFileFlags and VS_FF_PRERELEASE) <> 0then
     FFileFlags.Add('Pre-release');
   if (dwFileFlagsMask and dwFileFlags and VS_FF_PRIVATEBUILD) <> 0 then
     FFileFlags.Add('Private build');
   if (dwFileFlagsMask and dwFileFlags and VS_FF_SPECIALBUILD) <> 0 then
     FFileFlags.Add('Special build');
   if (dwFileFlagsMask and dwFileFlags and VS_FF_DEBUG) <> 0 then
     FFileFlags.Add('Debug');
 end;
end;

function TVerInfoRes.GetPreDefKeyString(AVerKind: TVerInfoType): String;
var
 P: PChar;
 S: UInt;
begin
 Result := Format(FormatStr, [SfInfo, LoWord(TransTable^),HiWord(TransTable^),
   VerNameArray[aVerKind], #0]);
 // get and return version query info, return empty string on error
 if VerQueryValue(PChar(RezBuffer), @Result[1], Pointer(P), S) then
   Result := StrPas(P)
 else
   Result := '';
end;

function TVerInfoRes.GetUserDefKeyString(AKey: String): String;
var
 P: Pchar;
 S: UInt;
begin
 Result := Format(FormatStr, [SfInfo, LoWord(TransTable^),HiWord(TransTable^),
   aKey, #0]);
 // get and return version query info, return empty string on error
 if VerQueryValue(PChar(RezBuffer), @Result[1], Pointer(P), S) then
   Result := StrPas(P)
 else
   Result := '';
end;

function VersionString(Ms, Ls: Longint): String;
begin
 Result := Format('%d.%d.%d.%d', [HIWORD(Ms), LOWORD(Ms),
    HIWORD(Ls), LOWORD(Ls)]);
end;

function TVerInfoRes.GetFileVersion: String;
begin
 with FixedFileInfoBuf^ do
   Result := VersionString(dwFileVersionMS, dwFileVersionLS);
end;

function TVerInfoRes.GetProductVersion: String;
begin
 with FixedFileInfoBuf^ do
   Result := VersionString(dwProductVersionMS, dwProductVersionLS);
end;

function TVerInfoRes.GetFileOS: String;
begin
 with FixedFileInfoBuf^ do
   case dwFileOS of
     VOS_UNKNOWN:  // Same as VOS__BASE
       Result := 'Unknown';
     VOS_DOS:
       Result := 'Designed for MS-DOS';
     VOS_OS216:
       Result := 'Designed for 16-bit OS/2';
     VOS_OS232:
       Result := 'Designed for 32-bit OS/2';
     VOS_NT:
       Result := 'Designed for Windows NT';

     VOS__WINDOWS16:
       Result := 'Designed for 16-bit Windows';
     VOS__PM16:
       Result := 'Designed for 16-bit PM';
     VOS__PM32:
       Result := 'Designed for 32-bit PM';
     VOS__WINDOWS32:
       Result := 'Designed for 32-bit Windows';

     VOS_DOS_WINDOWS16:
       Result := 'Designed for 16-bit Windows, running on MS-DOS';
     VOS_DOS_WINDOWS32:
       Result := 'Designed for Win32 API, running on MS-DOS';
     VOS_OS216_PM16:
       Result := 'Designed for 16-bit PM, running on 16-bit OS/2';
     VOS_OS232_PM32:
       Result := 'Designed for 32-bit PM, running on 32-bit OS/2';
     VOS_NT_WINDOWS32:
       Result := 'Designed for Win32 API, running on Windows/NT';
   else
     Result := 'Unknown';
   end;
end;

end.


Шпиён   (2006-07-28 01:29:00) [69]


> Германн ©   (28.07.06 01:24) [8]

заметил -) Но вот никак не могу привязать подмену авторской информации о файле к фискальным целям -)))))
Потому и прошу вариант, вдруг пригодится -)


Германн   (2006-07-28 01:24:00) [70]


> Шпиён   (28.07.06 00:56) [6]
> > Германн ©   (28.07.06 00:54) [5] > Разве что с "фискальными"
> целями. :-)это как?

Как - вариантов масса! А смайлик ты не заметил?


KilkennyCat   (2006-07-28 01:06:00) [71]

> [6] Шпиён   (28.07.06 00:56)

Это продавать с чеком. А на чеке написано: фискальный.


Шпиён   (2006-07-28 00:56:00) [72]


> Германн ©   (28.07.06 00:54) [5]


> Разве что с "фискальными" целями. :-)

это как?


Германн   (2006-07-28 00:54:00) [73]


> Шпиён   (28.07.06 00:37) [4]

Моё "я вообще пас" означало, что я ну в упор не понимаю как, для чего, зачем и т.п. "управлять этими сведениями".
Разве что с "фискальными" целями. :-)


Шпиён   (2006-07-28 00:37:00) [74]


> Германн ©   (28.07.06 00:31) [3]


> Ну а вот про И как потом можно будет  управлять этими сведениями?
>
> я вообще пас :(((

"Управлять" можно... если учесть, что информация хранится в ресурсах. Подробнее рассказывать не стоит, т.к. незачем приличному пользователю ее менять -)


Германн   (2006-07-28 00:31:00) [75]

2 KilkennyCat ©   (28.07.06 00:20) [2]

> И еще: OpenDialog1 позволяет получить только имя. Больше
> никаких средств у него нет. Имя и все. Файла, директории,
диска.

Давай не будем сбивать с толку "Начинающих" и напишем:
OpenDialog1 позволяет получить только имя, которое включает в себя:
 -Метку диска
 -Путь к файлу
 -Собственно имя файла.
:-)
2 Chort ©   (27.07.06 23:43)

> И по выборе необходимого файла

переводится как if OpenDialog1.Execute then begin.
А теперь задай вопрос как зная имя файла получить
Размер, Версия продукта(и файла),Внутреннее имя, Исходное имя файла, Комментарий, Название продукта, Производитель,
Язык, и все что еще возможно извлечь.


Ну а вот про И как потом можно будет  управлять этими сведениями?
я вообще пас :(((


KilkennyCat   (2006-07-28 00:20:00) [76]

И еще: OpenDialog1 позволяет получить только имя. Больше никаких средств у него нет. Имя и все. Файла, директории, диска.


KilkennyCat   (2006-07-28 00:18:00) [77]

Эта информация "управляется" изготовителем (читай: владельцем авторских прав), и обладателем имущественных прав (читай: владельцем программного обеспечения).


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо