116 votes

Comment enregistrer un protocole URL personnalisé dans Windows ?

Comment puis-je enregistrer un protocole personnalisé avec Windows de sorte que, lorsque je clique sur un lien dans un courriel ou sur une page Web, mon application s'ouvre et les paramètres de l'URL lui sont transmis ?

0 votes

107voto

LIUFA Points 3642
  1. Aller à Start alors dans Find type regedit -> il devrait s'ouvrir Registry editor

  2. Cliquez sur Right Mouse sur HKEY_CLASSES_ROOT puis New -> Key

enter image description here

  1. Dans la clé, donnez le nom en minuscules par lequel vous voulez que les urls soient appelées (dans mon cas, ce sera testus://sdfsdfsdf ) puis cliquez sur Right Mouse sur testus -> alors New -> String Value et ajouter URL Protocol sans valeur.

enter image description here

  1. Ensuite, ajoutez d'autres entrées comme vous l'avez fait avec le protocole ( Right Mouse New -> Key ) et créer une hiérarchie comme testus -> shell -> open -> command et à l'intérieur command changement (Default) vers le chemin où .exe que vous voulez lancer, si vous voulez passer des paramètres à votre exe, insérez le chemin de l'exe dans le champ "" et ajouter "%1" pour ressembler : "c:\testing\test.exe" "%1"

enter image description here

  1. Pour tester si cela fonctionne, allez sur Internet Explorer (pas Chrome o Firefox ) et entrer testus:have_you_seen_this_man cela devrait enflammer votre .exe (on vous demande si vous voulez le faire - dites Oui) et passez dans args testus://have_you_seen_this_man .

Voici un exemple d'application console à tester :

using System;

namespace Testing
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args!= null && args.Length > 0)
            Console.WriteLine(args[0]);
            Console.ReadKey();
        }
    }
}

J'espère que cela vous fera gagner du temps.

40voto

Jonas Gulle Points 3435

Je pense que cela est couvert dans MSDN, veuillez voir Enregistrement d'une application à un protocole URL .

5 votes

J'écrivais l'application basée sur oauth et la procédure décrite dans le MSDN fonctionne parfaitement avec Mozilla Firefox et Opera (11.6)

11 votes

Cela fonctionne dans tous les navigateurs sous Windows. C'est un problème au niveau du système, pas du navigateur.

7 votes

J'ai voté en haut, mais s'il vous plaît, éditez la réponse pour inclure les informations pertinentes du lien, conformément à la politique du SO. Merci !

22voto

MSalters Points 74024

Le lien MSDN est intéressant, mais les informations sur la sécurité ne sont pas complètes. L'enregistrement du gestionnaire doit contenir "%1", et non %1. Il s'agit d'une mesure de sécurité, car certaines sources URL décodent incorrectement %20 avant d'invoquer votre gestionnaire de protocole personnalisé.

PS. Vous obtiendrez l'URL entière, pas seulement les paramètres de l'URL. Mais l'URL peut être maltraitée, en plus de la conversion %20->espace déjà mentionnée. Il est utile d'être conservateur dans la conception de votre syntaxe d'URL. N'ajoutez pas de // au hasard, sinon vous vous retrouverez dans la pagaille qu'est file://.

0 votes

Que voulez-vous dire exactement par "désordre que le fichier://" est ?

6 votes

Il n'y a pas de correspondance formelle de dossier : URLs aux chemins locaux. Il n'y a même pas de consensus sur l'utilisation de deux ou trois barres obliques de tête, ou sur l'utilisation de barres obliques avant ou arrière lorsque le chemin fait référence à un répertoire Windows.

0 votes

Commentaire tardif, je sais. Mais est-il également possible d'accéder d'une manière ou d'une autre aux paramètres de l'URL uniquement sans le gestionnaire de protocole ?

2voto

Shubham Kumar Points 24

Il existe un module npm à cet effet.

lien : https://www.npmjs.com/package/protocol-registry

Donc, pour faire cela dans nodejs, il suffit d'exécuter le code ci-dessous :

Installez-le d'abord

npm i protocol-registry

Utilisez ensuite le code ci-dessous pour enregistrer votre dossier de participation.

const path = require('path');

const ProtocolRegistry = require('protocol-registry');

console.log('Registering...');
// Registers the Protocol
ProtocolRegistry.register({
    protocol: 'testproto', // sets protocol for your command , testproto://**
    command: `node ${path.join(__dirname, './index.js')} $_URL_`, // $_URL_ will the replaces by the url used to initiate it
    override: true, // Use this with caution as it will destroy all previous Registrations on this protocol
    terminal: true, // Use this to run your command inside a terminal
    script: false
}).then(async () => {
    console.log('Successfully registered');
});

Alors supposons que quelqu'un ouvre testproto://test alors un nouveau terminal sera lancé en exécutant :

node yourapp/index.js testproto://test

Il prend également en charge tous les autres systèmes d'exploitation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X