Программно зарегистрировать программу Windows с протоколом mailto

Как мне сделать так, чтобы в моей программе было зарегистрировано mailto: ссылок?

Как мне тогда обработать это событие в моей программе?

Большинство решений, которые я нашел в результате быстрого поиска в Google, касаются того, как сделать это вручную, но мне нужно сделать это автоматически для пользователей моей программы, если они нажмут кнопку, например установить почтовый клиент по умолчанию.

Редактировать:

Удалена ссылка на Delphi, поскольку ответ не зависит от вашего языка.


person Liron Yahdav    schedule 01.08.2008    source источник
comment
Вот официальное решение Microsoft для программного изменения почтового клиента по умолчанию. Это Visual Basic, но я надеюсь, что концепция ясна из этого: http://support.microsoft.com/kb/299853   -  person Michael Stum    schedule 02.08.2008
comment
Из вашей ссылки: это отдельно от веб-браузера или почтового клиента по умолчанию, который используется для запуска произвольных URL-адресов из любой точки системы. Это еще одна вещь, которая меня интересовала, но на самом деле это не ответ на этот вопрос.   -  person Liron Yahdav    schedule 01.11.2008
comment
Обратите внимание, что ссылка на статью Microsoft kb больше недействительна, так как Microsoft сочла целесообразным удалить ее, и они никогда не разрешали архивирование на обратном пути. Пока кто-то не предоставит информацию, обратитесь к этому прекрасному обсуждению: superuser.com/questions/1045349/   -  person Ted Mittelstaedt    schedule 24.01.2020


Ответы (2)


@Dillie-O: Ваш ответ направил меня в правильном направлении (я должен был ожидать, что это просто изменение реестра), и у меня все заработало. Но я отмечу это как ответ, потому что добавлю дополнительную информацию, которую нашел во время работы над этим.

Решение этого вопроса на самом деле не зависит от того, какой язык программирования вы используете, если есть способ изменить настройки реестра Windows.

Наконец, вот ответ:

  • Чтобы связать программу с протоколом mailto для всех пользователей на компьютере, измените значение HKEY_CLASSES_ROOT\mailto\shell\open\command по умолчанию на:
    Исполняемый файл вашей программы %1
  • Чтобы связать программу с протоколом mailto для текущего пользователя, измените значение HKEY_CURRENT_USER\Software\Classes\mailto\shell\open\command по умолчанию на:
    Исполняемый файл вашей программы %1

%1 будет заменен полным URL-адресом mailto. Например, по ссылке:

<a href="mailto:[email protected]">Email me</a>

Будет выполнено следующее:
Исполняемый файл вашей программы mailto:[email protected]

Обновление (из комментария от shellscape):
Начиная с Windows 8 этот метод больше не работает должным образом. Win8 применяет следующий ключ: HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associati‌ons\URLAssociations\‌​MAILTO\UserChoice, для которого ProgID выбранного приложения хэшируется и не может быть подделан. Это королевская ПИТА.

person Liron Yahdav    schedule 05.08.2008
comment
Вы проверили, можете ли вы теперь пометить это как ответ? Я не знаю минимально необходимой репутации. - person tzot; 01.07.2010
comment
Начиная с Windows 8 этот метод больше не работает должным образом. Win8 применяет следующий ключ: HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\URLAssociations\MAILTO\UserChoice, для которого ProgID выбранного приложения хэшируется и не может быть подделан. Это королевская ПИТА - person shellscape; 15.12.2012

Из того, что я видел, есть несколько разделов реестра, которые устанавливают почтовый клиент по умолчанию. Один из них является:

Системный ключ: [HKEY_CLASSES_ROOT\mailto\shell\open\command]

Имя значения: (Default)

Тип данных: REG_SZ (строковое значение)

Данные значения: Mail program command-line.

Я не знаком с Delphi 7, но уверен, что там есть несколько библиотек для редактирования реестра, которые можно использовать для изменения этого значения.

В некоторых местах указано больше, чем этот ключ, в других — только этот ключ, поэтому вам может потребоваться немного проверить, чтобы найти правильный ключ(и).

person Dillie-O    schedule 01.08.2008