Feedback

C# - Eigenes URL-Protokoll registrieren

Veröffentlicht von am 10/17/2006
(6 Bewertungen)
HTTP-URLs kennt jeder. Die Windows-Shell ermöglicht es aber auch, eigene URL-Protokolle zu definieren. Davon machen einige Programme, wie z.B. die Visual Studio Hilfe gebrauch (ms-help:// ...). Mit ein paar Registry-Einträgen kann man auch ein eigenes URL-Protokoll einrichten. Damit lassen sich eigene Anwendungen per URL aus jeder Software ansprechen.
// using Microsoft.Win32; nicht vergessen!

/// <summary>
/// Registriert ein benutzerdefiniertes URL-Protokoll für die Verwendung mit der
/// Windows-Shell, dem Internet Explorer und Office.
/// 
/// Beispiel für einen URL eines benutzerdefinierten URL-Protokolls:
/// 
///   rainbird://RemoteControl/OpenFridge/GetBeer
/// </summary>
/// <param name="protocolName">Name des Protokolls (z.B. "rainbird" für "rainbird://...")</param>
/// <param name="applicationPath">Vollständiger Dateisystem-Pfad zur EXE-Datei, die den URL bei Aufruf verarbeitet (Der komplette URL wird als Befehlszeilenparameter übergteben)</param>
/// <param name="description">Beschreibung (z.B. "URL:Rainbird Custom URL")</param>
public void RegisterURLProtocol(string protocolName, string applicationPath, string description)
{
    // Neuer Schlüssel für das gewünschte URL Protokoll erstellen
    RegistryKey myKey=Registry.ClassesRoot.CreateSubKey(protocolName);

    // Protokoll zuweisen
    myKey.SetValue(null, description);
    myKey.SetValue("URL Protocol", string.Empty);

    // Shellwerte eintragen
    Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell");
    Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell\\open");
    myKey = Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell\\open\\command");

    // Anwendung festlegen, die das URL-Protokoll behandelt
    myKey.SetValue(null, "\"" + applicationPath,  + "\" %1");
}

4 Kommentare zum Snippet

SimonKnight6600 schrieb am 11/7/2006:
TOP Snippet! Genau das, was ich für ein aktuelles Projekt brauche :-)
Rainbird schrieb am 11/8/2006:
Danke!
markrene schrieb am 2/22/2008:
Hallo,

Super Snippet, aber leider funktioniert es nicht bei mir.

Es erscheint keine Fehlermeldung und wenn ich mir meine Registry anschaue, dann wurde kein Eintrag gemacht. Lese ich aber Skriptseitig die Einträge aus, ist der Key und subkey vorhanden. Woran kann das liegen?

Bitte um Hilfe!

Danke

Mark

protected void Page_Load(object sender, EventArgs e)
{
string protocolName = "aaaarunapp";
//string applicationPath = "%windir%\\system32\\calc.exe";
string applicationPath = @"C:\WINDOWS\system32\calc.exe";
string description = "Calculator";

// RegisterURLProtocol();
RegisterURLProtocol(protocolName, applicationPath, description);
}

public void RegisterURLProtocol(string protocolName, string applicationPath, string description)

{
//Neuer Schlüssel für das gewünschte URL Protokoll erstellen
RegistryKey myKey = Registry.ClassesRoot.CreateSubKey(protocolName);

// Protokoll zuweisen
myKey.SetValue(null, description);
myKey.SetValue("URL Protocol", string.Empty);

// Shellwerte eintragen
Registry.ClassesRoot.CreateSubKey(protocolName + "<A>\\Shell</A>");
Registry.ClassesRoot.CreateSubKey(protocolName + "<A>\\Shell\\open</A>");
myKey = Registry.ClassesRoot.CreateSubKey(protocolName + "<A>\\Shell\\open\\command</A>");

// Anwendung festlegen, die das URL-Protokoll behandelt
myKey.SetValue(null, "\"" + applicationPath +"\" %1");

}
Jan Welker schrieb am 2/23/2008:
Frag mal im Forum nach: dotnet-forum.de
 

Logge dich ein, um hier zu kommentieren!