Зарегистрировать программу Windows с протоколом mailto программно - PullRequest
36 голосов
/ 02 августа 2008

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

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

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

Edit:

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

Ответы [ 3 ]

18 голосов
/ 05 августа 2008

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

Решение этого вопроса на самом деле не имеет значения, какой язык программирования вы используете, если есть какой-то способ изменить настройки реестра 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: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 выбранного приложения хэшируется и не может быть подделан. Это королевская пита

12 голосов
/ 02 августа 2008

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

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

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

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

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

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

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

4 голосов
/ 02 августа 2008

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

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

...