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

Вниз

описание файлов   Найти похожие ветки 

 
Салават   (2005-06-06 08:41) [0]

Как получить описание файла и вообще у каких файлов есть описания. Пример файл:notepad.exe описание:Блокнот.


 
dmitry501 ©   (2005-06-06 10:05) [1]

Салават   (06.06.05 8:41)
По английски описание файла notepad.exe будет notepad.


 
Салават   (2005-06-06 10:56) [2]

?? не понял :(  у каждой программы или dll- ки есть описание при наведении мышкой на файл оно появляется понятно что если винда английская то и описание у notepad.exe будет notepad.а как получить вот эту инфу с помощью SHGetFileInfo не получается там не то есть что-то подобное когда получаеш инфу у ярлыка но там COM обьекты неужели нету какойнить WinAPI функции.


 
Digitman ©   (2005-06-06 11:02) [3]

запятые расставлять религия не позволяет ?
галиматью твою читать врагу не пожелаешь)


> есть что-то подобное когда получаеш инфу у ярлыка но там
> COM обьекты


да, именно так.
только это не "описание файла", а "свойства документа".
реализуется это действительно с использованием СОМ-технологии и интерфейсов (IPropertyStorage, IPropertySetStorage)


 
Digitman ©   (2005-06-06 11:06) [4]


> описание при наведении мышкой на файл оно появляется


не гони ботву)

вот я навел мышку на notepad.exe (или на любой иной exe-файл) и увидел хинт - "Тип: Приложение".

ни о каком "блокноте" в ЭТОТ момен речи не идет.


 
Салават   (2005-06-06 11:08) [5]

Прошу прощения. Это значит чтобы получить свойства конкретного файла надо создать к нему ярлык, получить свойства документа и потом удалить ярлык? А нельзя без ярлыков?


 
Салават   (2005-06-06 11:12) [6]

Выбери свойства там действительно тип приложение а еще ниже описание Блокнот.


 
Digitman ©   (2005-06-06 11:12) [7]

а ярлык-то тут причем ?

свойствами документа обладает сам документ.


> свойства конкретного файла


я не понял, ты о файлах или о документах, хранящихся в файлах ?


 
Digitman ©   (2005-06-06 11:16) [8]


> Выбери свойства там действительно тип приложение а еще ниже
> описание Блокнот


с каких пор "наведи мышку" эквивалентно "просмотри свойства" ?


 
dmitry501 ©   (2005-06-06 11:19) [9]

Салават   (06.06.05 11:12) [6]
Это ты толкуешь про поле "комментарий", которое есть в ярлыке к программе. Туда можно занести любой текст, он и будет всплывать в хинте при наведении на ярлык.


 
Салават   (2005-06-06 11:20) [10]

Не знаю как у тебя но у меня при наведении на файл вылезает Hint:

Описание:Блокнот
Производитель: Корпорация Microsoft
Версия:
Дата создания
Размер


 
Салават   (2005-06-06 11:21) [11]

Нет это не комментарий


 
Digitman ©   (2005-06-06 11:22) [12]


> Салават   (06.06.05 11:20) [10]


слово "Блокнот" сидит в ярлыке.

напиши там, в ярлыке, "Л.Толстой, "Война и мир" - увидишь войну и мир


 
Digitman ©   (2005-06-06 11:24) [13]


> у каких файлов есть описания


термин и св-во "Описание" есть у *.lnk - файлов

куча таких файлов может ссылаться на один и тот же файл, соответственно и "описаний" может быть куча разных - все зависит от фантазии юзера


 
Салават   (2005-06-06 11:28) [14]

Да ё-к-л-м-н возмем любую exe , смотрим её свойства там есть описание программы еще раз пример:cmd.exe
Описание:Обработчик команд Windows


 
Anatoly Podgoretsky ©   (2005-06-06 11:35) [15]

Салават   (06.06.05 11:20) [10]
Здесь нет описания, это информация из каталога и ресурса Version


 
КиТаЯц ©   (2005-06-06 11:40) [16]

Держи, может поможет (если я правильно понял что надо)... ;)

procedure ShowProperties(Path: string);
 var SEInfo: TShellExecuteInfo;
begin
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do
  begin
     fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI;
     Wnd := Application.Handle;
     lpFile := PChar( Path );
     lpVerb := "Properties";
     lpParameters := "";
     hInstApp := 0;
     lpIDList := nil;
     lpDirectory := PChar(Path);
     nShow := SW_SHOWNORMAL;
  end;
  ShellExecuteEx(@SEInfo);
end;


 
Digitman ©   (2005-06-06 11:40) [17]

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\notepad.exe\shell

FriendlyCache = "Блокнотъ"


 
Салават   (2005-06-06 11:41) [18]

Можно поподробней пожалуста или ссылку на статью


 
КиТаЯц ©   (2005-06-06 11:48) [19]

>Салават   (06.06.05 11:41) [18]

>Можно поподробней пожалуста или ссылку на статью


Чего подробней?  [16] или  [17]?


 
Плохиш ©   (2005-06-06 11:48) [20]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/versioninfor mation.asp


 
Салават   (2005-06-06 12:23) [21]

Млин никак не получается!!!


 
Digitman ©   (2005-06-06 12:27) [22]

смажь)


 
Салават   (2005-06-06 12:31) [23]

через ярлык тоже не вытаскивается


 
Digitman ©   (2005-06-06 12:37) [24]

не тем , знач, смазывал


 
Anatoly Podgoretsky ©   (2005-06-06 13:00) [25]

Салават   (06.06.05 12:31) [23]
Что вытаскиваешь.


 
Салават   (2005-06-06 13:12) [26]

>Anatoly Podgoretsky
угу пытаюсь спасибо Плохишу


 
Anatoly Podgoretsky ©   (2005-06-06 13:22) [27]

Что пытаешься, может ищешь черную кошку в темной комнате.


 
Салават   (2005-06-06 13:53) [28]

Однако докапался спосибо увсем вот пример:
function FileDescription(AFileName:string): string;
var
 szName: array[0..255] of Char;
 P: Pointer;
 Value: Pointer;
 Len: UINT;
 GetTranslationString:string;
 FFileName: PChar;
 FValid:boolean;
 FSize: DWORD;
 FHandle: DWORD;
 FBuffer: PChar;
begin
 try
   FFileName := StrPCopy(StrAlloc(Length(AFileName) + 1), AFileName);
   FValid := False;
   FSize := GetFileVersionInfoSize(FFileName, FHandle);
   if FSize > 0 then
     try
       GetMem(FBuffer, FSize);
       FValid := GetFileVersionInfo(FFileName, FHandle, FSize, FBuffer);
     except
       FValid := False;
       raise;
     end;
   Result := "";
   VerQueryValue(FBuffer, "\VarFileInfo\Translation", p, Len);
   if P <> nil then
     GetTranslationString := IntToHex(MakeLong(HiWord(Longint(P^)), LoWord(Longint(P^))), 8);

   if FValid then
     begin
       StrPCopy(szName, "\StringFileInfo\" + GetTranslationString + "\FileDescription");
        if FValid then VerQueryValue(FBuffer, szName, Value, Len);
        Result := StrPas(PChar(Value));
     end;

 finally
   try
     if FBuffer <> nil then FreeMem(FBuffer, FSize);
   except
   end;
   try
     StrDispose(FFileName);
   except
   end;
 end;
end;


 
Digitman ©   (2005-06-06 13:56) [29]


> Салават   (06.06.05 13:53) [28]
> Однако докапался спосибо увсем вот пример:


малацца.
теперь попробуй применить этот алгоритм к любому созданному тобой текстовому файлу.

разве текстовый файл не в праве иметь "описание" ?)


 
Anatoly Podgoretsky ©   (2005-06-06 14:00) [30]

Ну точно кошку ищет.


 
Салават   (2005-06-06 15:07) [31]

>Digitman
по моему не в праве поскольку не имеет ресурса


 
Digitman ©   (2005-06-06 15:10) [32]


> Салават   (06.06.05 15:07) [31]


ну так вот ты сам себе и ответил на свой же вопрос !


 
Салават   (2005-06-06 15:18) [33]

>Digitman
без вас не смог бы и еще в том коде ошибка должно быть так
function FileDescription(AFileName:string): string;
var
 szName: array[0..255] of Char;
 P: Pointer;
 Value: Pointer;
 Len: UINT;
 GetTranslationString:string;
 FFileName: PChar;
 FValid:boolean;
 FSize: DWORD;
 FHandle: DWORD;
 FBuffer: PChar;
begin
 try
   FFileName := StrPCopy(StrAlloc(Length(AFileName) + 1), AFileName);
   FValid := False;
   FSize := GetFileVersionInfoSize(FFileName, FHandle);
   if FSize > 0 then
     try
       GetMem(FBuffer, FSize);
       FValid := GetFileVersionInfo(FFileName, FHandle, FSize, FBuffer);
     except
       FValid := False;
       raise;
     end;
   Result := "";

   if FValid then
   begin
   VerQueryValue(FBuffer, "\VarFileInfo\Translation", p, Len);
   if P <> nil then
     GetTranslationString := IntToHex(MakeLong(HiWord(Longint(P^)), LoWord(Longint(P^))), 8);
     StrPCopy(szName, "\StringFileInfo\" + GetTranslationString + "\FileDescription");
     VerQueryValue(FBuffer, szName, Value, Len);
     Result := StrPas(PChar(Value));
   end;

 finally
   try
     if FBuffer <> nil then FreeMem(FBuffer, FSize);
   except
   end;
   try
     StrDispose(FFileName);
   except
   end;
 end;
end;



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

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

Наверх




Память: 0.53 MB
Время: 0.039 c
1-1121630007
able
2005-07-17 23:53
2005.08.07
Перехват положения окна


14-1121319516
Ega23
2005-07-14 09:38
2005.08.07
С днем рождения! 14 июля


14-1121352024
Step[B.M.]
2005-07-14 18:40
2005.08.07
Цифровая АТС (АОН - Caller ID) как получить результат АОН на COM


5-1090750729
MSTX
2004-07-25 14:18
2005.08.07
Рисование на TButton


1-1121349544
webpauk
2005-07-14 17:59
2005.08.07
запись картинок из ImageList





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