Mega Code Archive

 
Categories / Delphi / LAN Web TCP
 

Register an own protocol [tcp]

{ +++ German: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Hallo alle zusammen, ich möchte euch zeigen, wie man eigene Protokolle registriert. (bzw. löscht) Wir schreiben dazu unser Protokoll in die Registry. +++ English: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Hello all together, I want to show you how to register own protocols. (and deleting) We will write our protocol into the registry. } { +++ German: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Diese Procedur öffnet die Registry und schreibt folgendes rein: HKEY_CLASSES_ROOT +NAME (STANDARD) URL:NAME (ERKLÄRUNG) EditFlags 2 Source Filter [leer] URL Protocol [leer] +SHELL +OPEN +COMMAND (STANDARD) ExecuteStr Der ExecuteStr sollte irgendwo %1 enthalten, da an dieser Stelle der Shellbefehl angegeben wird. BSP: NAME: Chat; Describtion: Chatprotokoll; ExecuteStr: "C:\ChatClient.exe %1". Chat://2002/ -> Führt "C:\Chatclient.exe Chat://2002/" aus. +++ English: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ This procedure opens the registry ein write the following into it. HKEY_CLASSES_ROOT +NAME (DEFAULT) URL:NAME (Describtion) EditFlags 2 Source Filter [empty] URL Protocol [empty] +SHELL +OPEN +COMMAND (DEFAULT) ExecuteStr The ExecuteStr should include somewhere %1 because at this position the shell-order will be included. Example: NAME: Chat; Describtion: Chatprotocol; ExecuteStr: "C:\ChatClient.exe %1". Chat://2002/ -> executes: "C:\Chatclient.exe Chat://2002/" } procedure RegisterProtocol(const Name, Describtion, ExecuteStr: string); var reg: TRegistry; begin reg := TRegistry.Create; try reg.RootKey := HKEY_CLASSES_ROOT; reg.OpenKey(Name, True); try reg.Writestring('', 'URL:' + Name +' (' + Describtion + ')'); reg.WriteInteger('EditFlags', 2); reg.WriteString('Source Filter', ''); reg.WriteString('URL Protocol', ''); reg.OpenKey('shell', True); reg.OpenKey('open', True); reg.OpenKey('command', True); reg.Writestring('', ExecuteStr); finally reg.CloseKey; end; finally reg.Free; end; end; { +++ German: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Diese Prozedur ermöglich das Löschen eines Protokolls. Vorsicht: AUCH HTTP FTP HTTPS können gelöscht werden!!! +++ English: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ This procedure allows you to delete a protocol again. Attention: HTTP FTP HTTPS can also be deleted. } procedure UnregisterProtocol(const Name: string); var reg: TRegistry; begin reg := TRegistry.Create; try reg.RootKey := HKEY_CLASSES_ROOT; reg.DeleteKey(Name); finally reg.Free; end; end; { +++ German: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Ein kleines Beispiel soll die Verwendung zeigen. Wir registrieren das Chatprotokoll und lesen die ParamStr aus. Nach dem registrieren gehen sie Start|Ausführen und geben sie "CHAT://OnlyaTest" ein. Danach klicken sie Button2 um das Protokoll wieder zu löschen. +++ English: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ A little example shall illustrate the using. We register the "chatprotocol" and read the ParamStr. After the registering you should go START|EXECUTE and enter "Chat://OnlyAText". After that you should click button2 to delete the protocol again. Komponenten / components: Memo1: TMemo; Button1: TButton; Button2: TButton; } procedure TForm1.Button1Click(Sender: TObject); var Name, Describtion, Executestr: string; begin Name := 'CHAT'; Describtion := 'BSN CHAT SERVER'; ExecuteStr := Application.ExeName + '%1'; RegisterProtocol(Name, Describtion, ExecuteStr); end; procedure TForm1.Button2Click(Sender: TObject); begin UnRegisterProtocol('CHAT'); end; procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to PARAMCOUNT do Memo1.Lines.Add(ParamStr(i)); end;