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

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

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

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

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

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

1.08.2008 22:08:14
Обратите внимание, что ссылка на статью Microsoft kb больше не действительна, так как Microsoft посчитала целесообразным удалить ее, и они никогда не разрешали архивирование на машине обратного хода. Пока кто-то не предоставит информацию, пожалуйста, обращайтесь к этому прекрасному обсуждению: superuser.com/questions/1045349/…
Ted Mittelstaedt 24.01.2020 01:04:17
3 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

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

<a href="mailto:user@example.com">Email me</a>

Будет выполнено следующее:
« Исполняемый файл вашей программы » «mailto: user@example.com»

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

18
14.09.2016 12:24:22
Вы проверили ли теперь вы можете пометить это как в ответ? Я не знаю минимально необходимой репутации.
tzot 30.06.2010 21:55:49
Начиная с Windows 8, этот метод больше не работает, как ожидалось. В Win8 используется следующий ключ: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associations \ URLAssociations \ MAILTO \ UserChoice, для которого ProgID выбранного приложения хэшируется и не может быть подделан. Это королевская
shellscape 15.12.2012 18:11:21

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

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

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

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

Значение: Mail program command-line.

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

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

12
16.12.2013 12:02:18

Вот официальное решение Microsoft для программного изменения почтового клиента по умолчанию. Это Visual Basic, но я надеюсь, что концепция ясна из этого:

http://support.microsoft.com/kb/299853

4
14.06.2013 14:22:37
Из вашей ссылки: «Это отдельно от стандартного веб-браузера или почтового клиента, который используется для запуска произвольных URL-адресов из любой точки системы». Это также еще одна вещь, которую мне было интересно, но не совсем ответ на этот вопрос.
Liron Yahdav 1.11.2008 16:26:35