Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Как запустить мою программу при открытии ссылки в браузере?

Есть программа, нужно сделать ссылку для неё, например, как у Steam: steam://open/friends. Она должна открываться в браузере и запускать нужное мне окно; Подскажите, как это делается, пожалуйста.


Ответ

Я буду объяснять на примере другой программы – sales logix (аббревиатура - slx), она регистрирует свой протокол slx:// например, ссылка может быть такой: slx://account/12345.
Штука реально крутая: можно было по почте кинуть такую ссылку коллеге и у него по клику на линке открывалось приложение с окном по клиента ID=12345.
Если вы хотите создать собственный протокол – то вам нужно две вещи сделать:
зарегистрировать протокол в операционной системе и программу, которая его будет обрабатывать; прописать в программе обработку протокола.
По этой ссылке вам предлагают вариант регистрации протокола через правку реестра (и так удобнее в корпоративном мире – раскатать reg-файл по нужным компам политиками Active Directory, чем руками ходить каждый настраивать), но если очень хочется без магии реестра и руками – то где-то в панели управления есть пункт типа "программы по умолчанию".
Копирую пример reg-файла, на случай если линк протухнет:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\slx] @="SalesLogix Protocol Handler" "URL Protocol"=""
[HKEY_CLASSES_ROOT\slx\DefaultIcon] @="C:\\Program Files\\SalesLogix\\salesLogix.exe"
[HKEY_CLASSES_ROOT\slx\shell]
[HKEY_CLASSES_ROOT\slx\shell\open]
[HKEY_CLASSES_ROOT\slx\shell\open\command] @="\"C:\\Program Files\\SalesLogix\\SalesLogixUrlLink.exe\" %1"
Ну и нужно собственно в своей программе сделать поддержку этого протокола.
Я думаю, что это абсолютно понятно, как сделать – в каждой программе есть метод Main:
static void Main(string[] param)
Вам нужно парсить переданные аргументы командной строки и, в соответствии с вашей логикой обрабатывать.
Если на компьютере будет установлена программа и зарегистрирован протокол, то вызываться будет и с веб-страники, и из почты. Можно даже в ярлыки эту ссылку вписывать, как это делает стим – и тоже будет работать.
Update. Передаваемая ссылка будет в args[0] целиком, парсить её нужно будет самостоятельно, отделяя протокол. Тест тривиальный:
В c:\temp\proba01.exe:
static void Main(string[] args) { var i = 0; foreach (var ar in args) { Console.WriteLine($"{i} = {ar}"); i++; } Console.ReadLine(); }
Делаем обработчик:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\s2x] @="SalesLogix Protocol Handler" "URL Protocol"=""
[HKEY_CLASSES_ROOT\s2x\DefaultIcon] @="C:\\temp\\proba01.exe"
[HKEY_CLASSES_ROOT\s2x\shell]
[HKEY_CLASSES_ROOT\s2x\shell\open]
[HKEY_CLASSES_ROOT\s2x\shell\open\command] @="\"C:\\temp\\proba01.exe\" %1"
Демо-страница:

test


На выходе имеем:

Комментариев нет:

Отправить комментарий