Сейчас на форуме: jinoweb (+6 невидимых)

 eXeL@B —› Программирование —› Зарегистрирован ли в системе протокол
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 18 сентября 2018 15:25 · Поправил: Isaev
· Личное сообщение · #1

Допустим, если в Windows зарегистрирован какой-либо протокол, мы можем работать через него, например, вызвав через ShelExecute(Handle, 'open', 'myprot://hallo', nil, nil, ...
Если он не зарегистирован, то эта API не возвращает кода ошибки
Есть ли WinAPI чтобы проверить зарегистрирован ли он?
Можно тупо проверить существование ключа в реестре HKEY_CLASSES_ROOT/myprot, но если есть стандартные средства, зачем изобретать колесо...

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 18 сентября 2018 15:43 · Поправил: f13nd
· Личное сообщение · #2

Для ассоциаций файлов есть утилита assoc, для url associations похоже нету. А ключ в реестре вроде бы HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations Возможно где-то в wmi оно и зарыто, но это будет все равно не проще, не быстрей и не надежней, чем проверить пару ключей в реестре.

Ну и как экзотическое решение - вместо ShellExecute использовать CreateProcess с cmd.exe со своими stdout и stderr, с которых пропарсить результат

-----
2 оттенка серого





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 18 сентября 2018 16:29
· Личное сообщение · #3

f13nd ну как бы надёжнее использовать родное, наверное... они в след версии захотят хранить его в другой ветке и всем, кто читал напрямую садиться за правку своего софта? (утрирую конечно)

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 18 сентября 2018 16:29
· Личное сообщение · #4

f13nd пишет:
как экзотическое решение

Чего тут экзотического? ShellExecute это обертка для CreateProcess




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 18 сентября 2018 16:38
· Личное сообщение · #5

VOLKOFF пишет:
Чего тут экзотического? ShellExecute это обертка для CreateProcess

В смысле экзотика stdout анализировать, чтоб проверить отработало или нет.

Isaev пишет:
ну как бы надёжнее использовать родное, наверное...

А это и есть родное --> Link <--, если даже майкрософт советуют так делать.

Там вскользь упоминается интерфейс IApplicationAssociationRegistration:
Exposes methods that query and set default applications for specific file Association Type, and protocols at a specific Association Level.--> Link <--
Как бы вот, но есть проблема:
Minimum supported client Windows Vista [desktop apps only]
Minimum supported server Windows Server 2008 [desktop apps only]


-----
2 оттенка серого


| Сообщение посчитали полезным: Isaev

Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 20 сентября 2018 17:07
· Личное сообщение · #6

Code:
  1. Gets an enumeration interface that provides access to handlers associated with a given protocol.


https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nf-shobjidl_core-shassocenumhandlersforprotocolbyapplication


 eXeL@B —› Программирование —› Зарегистрирован ли в системе протокол
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати