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

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

Как получить информацию о процессе [D6, D7, WinXP]


Handle ©   (2006-04-16 15:31:00) 

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


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


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

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


begin...end   (2006-04-16 20:40:00) [2]

> 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 19:01:00) [3]

To

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


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


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


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

Спасибо


begin...end   (2006-04-16 15:42:00) [5]

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

См. многочисленные примеры в Сети, а также http://www.delphimaster.ru/cgi-bin/forum.pl?id=1139198374&n=5


Наверх

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