Форум: "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