Lancer des applications externes depuis un navigateur avec des protocoles personnalisés

Lancer des applications depuis un navigateur peut être un raccourci très pratique. Par exemple, les liens Magnet peuvent être associés à un programme de téléchargement BitTorrent pour le lancer directement en prenant en compte le fichier à télécharger. Ils se présentent sous la forme :

magnet:?grosblabla

Le fait que l'OS comprenne qu'il doit lancer l'application (par exemple, uTorrent) quand il rencontre des liens Magnets est du à l'inscription au registre Windows à l'installation de l'application en question des clés suivantes :

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Magnet] @="Magnet URI" "URL Protocol"="" "Content Type"="application/x-magnet"
[HKEY_CLASSES_ROOT\Magnet\DefaultIcon] @="\"C:\\Program Files\\uTorrent\\uTorrent.exe\",0"
[HKEY_CLASSES_ROOT\Magnet\shell] @="open"
[HKEY_CLASSES_ROOT\Magnet\shell\open]
[HKEY_CLASSES_ROOT\Magnet\shell\open\command] @="\"C:\\Program Files\\uTorrent\\uTorrent.exe\" \"%1\""

%1 correspont au lien sur lequel on a cliqué.

De cette manière, cela fonctionne avec n'importe quel navigateur et l'OS comprendra que s'il rencontre le lien

magnet:?grosblabla

Il faudra qu'il lance cette commande :

C:\Program Files\uTorrent\uTorrent.exe magnet:?grosblabla

En personnalisant les clés du registre, on voit que l'on peut rapidement créer d'autres types de protocoles et y associer n'importe quel programme, et cela fonctionne correctement. J'ai eu besoin de cette technique lorsque j'ai voulu lancer un terminal via PuTTY directement sur un serveur depuis un navigateur La page en question contenait un grand nombre de lien vers des serveurs. J'ai donc créé les clés registres correspondantes pour pouvoir traiter des liens tels que :

ssh://utilisateur@host

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\SSH] @="SSH URI" "URL Protocol"="" "Content Type"="application/x-ssh"
[HKEY_CLASSES_ROOT\SSH\shell] @="open"
[HKEY_CLASSES_ROOT\SSH\shell\open]
[HKEY_CLASSES_ROOT\SSH\shell\open\command] @="\"C:\\Program Files\\PuTTY\\Putty.exe\" \"%1\""

De cette manière, le système appellera:

C:\Program Files\PuTTY\putty.exe ssh://utilisateur@host

Tout ça est bien beau, mais je suis confronté à un problème. PuTTY ne gère pas du tout un argument de type ssh://utilisateur@host, et au mieux, interprétra ssh://utilisateur comme le nom de l'utilisateur. Ou alors, vous aurez cette erreur :

Il a donc fallu trouver un moyen de contournement, puisque l'OS apellera forcément le programme avec l'adresse du lien en entier, y compris le nom du protocole.

Il faut donc encapsuler l'appel dans un autre programme, qui se chargera de transcrire l'adresse en ligne de commande compréhensible par PuTTY. Et ce programme, c'est CustomURL. L'exemple d'utilisation est assez parlant et je m'en vais vous montrer ma propre config, avec laquelle je gère le RDP (session Windows à distance), le SSH, et WinSCP (transfert de fichiers entre Windows et Linux en SCP):

Comme l'on peut le voir sur ces captures, lorsque le navigateur rencontre un lien ssh://user@host, il va lancer la commande suivante :

C:\Windows\system32\CustomURL.exe ssh://user@host

Ce programme va bidouiller sont entrée standard selon les règles que vous avez définies comme dans les captures plus haut, pour lancer cette commande suivante :

C:\Program Files\Putty\putty.exe -ssh user@host

Et la, ça fonctionne !

Attention, CustomURL ne gère, pour des raisons de sécurité, que trois paramètres :

  • Userinfo
  • Authority
  • Host

Damien Gustave

Read more posts by this author.