|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] *COM* | Как узнать имя класса по GUID |
|
Разное - [решено] *COM* | Как узнать имя класса по GUID
|
Ветеран Сообщения: 1180 |
Профиль | Отправить PM | Цитировать
Доброе время суток! Подскажите, пожалуйста, как попросить COM выдать имя класса (строчку), соответствующее заданному CLSID? Строчка есть в реестре, но самому лезть в реестр очень не хочется. Подойдёт ли функция ProgIdFromCLSID?
пример: GUID: {083863F1-70DE-11d0-BD40-00A0C911CE86} название расположено в: HKEY_CLASSES_ROOT\CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86} - значение по умолчанию имя класса: ActiveMovie Filter Class Manager Как разобрать по составу моникер? Есть моникер IMoniker* filter_path IMoniker::GetCLSID даёт {4315d437-5b8c-11d0-bd3b-00a0c911ce86} ProgIdFromCLSID(IMoniker::GetCLSID) даёт device.1 IMoniker::GetDisplayName даёт @device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\{9852A670-F845-491B-9BE6-EBD841B8A613} IMoniker::Enum даёт NULL я так понимаю, что это оставной моникер, корень которого "device.1". Как получить по раздельности все остальные ветки? |
|
Отправлено: 13:02, 01-10-2009 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать В общем так (результаты исследований):
ProgIdFromCLSID даёт результат только для объектов ActiveX, не ниже. Попросить систему разобрать по составу моникеры устройств нельзя, но их IMoniker::GetDisplayName вполне поддаётся осмыслению вручную (выделяем элементы, разделённые символами ':', '\\', '#', '{'..'}'). Тем не менее, есть "родной" способ проследить путь до устройства, который можно показывать пользователю (на человеческом языке). допустим у нас есть моникер устройства IMoniker. 1. Получаем GUID моникера функцией IMoniker::GetClassID - это класс "устройства" ("device.1") 2. Создаём перечислитель классов CLSID_SystemDeviceEnum с интерфейсом ICreateDevEnum 3. Получаем набор моникеров IEnumMoniker при помощи ICreateDevEnum::CreateClassEnumerator, указав полученный от моникера GUID 4. перебираем моникеры в наборе, получая из GUID и рекурсивно повторяем шаг 2 до тех пор, пока один из моникеров не совпадёт с исходным моникером. Проверить это можно функцией IMoniker::IsEqual таким образом, получается что нужно строить всю структуру классов полностью, независимо от того, хочу я узнать информацию про один класс, или про все Строчку на человеческом языке, соответсвующую классу можно получить через интерфейс IPropertyBag. Имя свойства целиком совпадает с ключом в реестре, в разделе описывающем этот класс. Работает только для объектов, полученных при помощи CreateClassEnumerator. Гарантируется как минимум "FriendlyName", но я обнаружил у себя раздел, судя по классиду, соответсвующий устройствам захвата видео, но не имеющий человеческих опознавательных строчек. А, да, ещё не все свойства имеют тип "строчка". |
Последний раз редактировалось pva, 03-10-2009 в 11:49. Причина: про имя забыл Отправлено: 11:44, 03-10-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Как узнать предыдущее имя компьютера? | Dimon3232 | Microsoft Windows 2000/XP | 15 | 22-08-2012 16:11 | |
Прочие БД - Как узнать имя пользователя в MS Access? | st031 | Программирование и базы данных | 0 | 30-08-2009 18:24 | |
Как узнать _полное_ имя пользователя? | fantik | Microsoft Windows NT/2000/2003 | 2 | 21-11-2006 18:13 | |
Как узнать имя процесса по смещению | Andre505 | Программирование и базы данных | 2 | 27-09-2003 13:55 | |
Как узнать имя Домена | Guest | Microsoft Windows 95/98/Me (архив) | 2 | 10-10-2002 16:24 |
|