Есть программа, нужно сделать ссылку для неё, например, как у 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"
Демо-страница:
На выходе имеем:
Комментариев нет:
Отправить комментарий