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

Вниз

Как получить информацию о процессе   Найти похожие ветки 

 
Handle   (2006-04-16 15:31) [0]

Как получить информацию о процессе такую как
FileDescription
FileVersion
ProductName
ProductVersion
CompanyName


 
begin...end ©   (2006-04-16 15:42) [1]

Это информация об исполняемом файле, а не о процессе. Зная путь к файлу, её можно получить с помощью GetFileVersionInfoSize + GetFileVersionInfo. Значения конкретных параметров затем можно будет выбрать через VerQueryValue.

См. многочисленные примеры в Сети, а также http://delphimaster.net/view/4-1139198374/


 
Handle   (2006-04-16 18:42) [2]


> begin...end ©   (16.04.06 15:42) [1]

Спасибо


 
Handle   (2006-04-16 19:01) [3]

To

> begin...end ©   (16.04.06 15:42) [1]


С FileVersion,ProductVersion понятно
А вот с FileDescription я чёто никак не допру,как это получить?


 
begin...end ©   (2006-04-16 20:40) [4]

> Handle   (16.04.06 19:01) [3]

> А вот с FileDescription я чёто никак не допру,как это получить?

Точно так же, как и FileVersion, ProductVersion и прочее. В ветке по ссылке, которую я привёл в [1], есть ссылка на пример в MSDN -- там как раз получается FileDescription. В одном файле может храниться информация о версии на нескольких языках -- это учтено в примере: там вначале получается список этих языков и кодовых страниц, а затем для каждого элемента списка запрашивается значение блока FileDescription, т.е. получается описание файла на каждом из доступных языков.

Поэтому всё, что нужно было -- перевести этот пример с Си на Паскаль. Например, так:

const
 FileName = "D:\Windows\system32\calc.exe";
type
 PLangAndCodePage = ^TLangAndCodePage;
 TLangAndCodePage = packed record
   wLanguage: Word;
   wCodePage: Word;
 end;
var
 I, InfoSize, BlockLength: Cardinal;
 pInfo: Pointer;
 pLangCP: PLangAndCodePage;
 pDesc: PChar;
begin
 InfoSize := GetFileVersionInfoSize(PChar(FileName), Cardinal(nil^));
 if InfoSize <> 0 then
 begin
   GetMem(pInfo, InfoSize);
   try
     if GetFileVersionInfo(PChar(FileName), 0, InfoSize, pInfo) then
       if VerQueryValue(pInfo, "\VarFileInfo\Translation", Pointer(pLangCP), BlockLength) then
         for I := 0 to Pred(BlockLength div sizeof(TLangAndCodePage)) do
         begin
           if VerQueryValue(pInfo, PChar(Format("\StringFileInfo\%.4x%.4x\FileDescription", [pLangCP.wLanguage, pLangCP.wCodePage])), Pointer(pDesc), BlockLength) then
             ShowMessage(pDesc);
           Inc(pLangCP)
         end
   finally
     FreeMem(pInfo, InfoSize)
   end
 end
end


 
Handle   (2006-04-16 22:13) [5]


> begin...end ©   (16.04.06 20:40) [4]

Спасибо что откликнулся на мою проблему.



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.046 c
3-1149057311
Kolmax
2006-05-31 10:35
2006.08.06
Импорт данных


15-1150354588
ilya39
2006-06-15 10:56
2006.08.06
Стоит ли ехать в Питер перед саммитом G8?


9-1132840610
VolanD666
2005-11-24 16:56
2006.08.06
Просто хочу убедиться :-)


2-1153297021
Piero
2006-07-19 12:17
2006.08.06
MessageBox с кнопками на русском


2-1152841836
Toy
2006-07-14 05:50
2006.08.06
DBText и DBComboBox