Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
6-1143141281
Суслик
2006-03-23 22:14
2006.08.06
Просмотр HTTP трафика.


2-1153054681
UMU
2006-07-16 16:58
2006.08.06
При изменении разрешения экрана...


15-1152509704
Ega23
2006-07-10 09:35
2006.08.06
С Днём рождения! 8 июля


2-1153407511
Sirus
2006-07-20 18:58
2006.08.06
Выбор принтера


2-1153483846
logslava
2006-07-21 16:10
2006.08.06
Как отловить движение мыши





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский