Einzelnen Beitrag anzeigen

Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#5

Re: Kommunikation zwischen Web-Browser und Delphi-Programm

  Alt 12. Nov 2009, 12:46
Den Source gabs mal im SwissDelphiCenter.

Aber noch ein Hinweis zum verwenden eines eigenes Protokolls: Ein Protokoll ist ein Sicherheits Risiko, ein Angreifer könnte einer Webseite soetwas plazieren bla und diesen link per JS aufrufen. Deshalb empfielt es sich bei der generierung der Links einen Token al la myone://something?token=4554655654654 an alle URLs dranzuhängen und diesen Token im Programm mit dem richtigen Server abzugleichen. Damit hat ein Angreifer kaum noch Chancen.

Hier die Version die ich verwendet habe:
Delphi-Quellcode:
  UOperatingSystem = class
  public
   // [url]http://www.swissdelphicenter.ch/torry/showcode.php?id=2272[/url]
   /**
    * @param Name Bezeichnung des Protokolls z.B. http, ftp oder myone
    * @param Describtion Beschreibung z.B. MyCompany Protokoll zur einfachen Anzeige von xyz aus dem Browser
    * @param ExecuteStr Anwendung die gestartet werden soll, wichtig ist hier das %1 am Ende damit die URL auch übergeben wird z.B. 'C:\myone.exe %1'
    */
    class procedure RegisterProtocol(const Name, Describtion, ExecuteStr: string);
    class procedure UnregisterProtocol(const Name: string);
  end;

...

{ UOperatingSystem }

class procedure UOperatingSystem.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;

class procedure UOperatingSystem.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;
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat