Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.041 c
15-1152592598
antonn
2006-07-11 08:36
2006.08.06
вопросик по авибилетам...


2-1152855145
petvv
2006-07-14 09:32
2006.08.06
FastReport


15-1152612327
SoftService
2006-07-11 14:05
2006.08.06
Оцените проект


15-1152545626
Andy BitOff
2006-07-10 19:33
2006.08.06
У кого есть опыт работы с компон. Developer Express


2-1153426580
Батыр
2006-07-21 00:16
2006.08.06
Текстовый Массив




   Наверх