Entwickler-Ecke

Internet / Netzwerk - ED2K-Link - Daten an laufenden Prozess per IE senden


MaxiTB - Mi 11.06.03 20:01
Titel: ED2K-Link - Daten an laufenden Prozess per IE senden
Wer kennt es nicht, das liebe Maultier.

Frage - hat jemand eine Ahnung, wie ich einen eigenen Link an ein laufendes Programm weitersenden kann, so wie der ED2K an den emule ?

Zweck:
Z.B. Skins aus dem Internet laden und automatisch installieren.

Die Applikation lauft natürlich - nur wie verknüpf ich sie jetzt mit dem IE und zweitens, wie bekommt meine App die Daten übermittelt (z.B. URL) ?

Schon jemand damit rumgespielt ?


MaxiTB - Mi 11.06.03 20:17
Titel: Re: ED2K-Link - Daten an laufenden Prozess per IE senden
MaxiTB an Motzi hat folgendes geschrieben:
Hehe - nop - stell dir vor:

Meine App läuft auf dem Rechner.
Der User klickt auf meiner HP auf einen Link wie mxnet://<Blablabla>
Nun soll der IE das an mein Proggi weiterleiten, damit es das auswerten kann.

Also funken tut sowas, siehe e-mule, weiß nur nicht wie ...


Ich hoffe, jetzt ists verständlicher ausgedrückt - scheinbar wars oben nicht recht glücklich formuliert ...


mars - Mi 11.06.03 21:05

Ich habs noch nie ausprobiert, aber der ein Schlüssel findet sich dazu in der Registry:
Unter HKEY_CLASSES_ROOT habe ich den Ordner ed2k. Und so sieht der aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ed2k]
@="URL: ed2k Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\ed2k\DefaultIcon]
@="C:\\Internet\\eMule\\emule.exe"

[HKEY_CLASSES_ROOT\ed2k\shell]
@="open"

[HKEY_CLASSES_ROOT\ed2k\shell\open]

[HKEY_CLASSES_ROOT\ed2k\shell\open\command]
@="\"C:\\Internet\\eMule\\eMule.exe\" \"%1\""
"OldDefault"="\"C:\\Internet\\eMule\\eMule.exe\" \"%1\""


Hoffe, es hat geholfen...


MaxiTB - Mi 11.06.03 21:08
Titel: Jep ...
Bin dem selben auf der Spur gewesen.
Alle Einträge von Protokollen haben diesen Schlüssel gemeinsam:
"URL Protocol"=""

Das ist wahrscheinlich der springende Punkt an der Sache - ich werde es mal ein bisserl austesten ;-) ...


mars - Mi 11.06.03 21:15

Würdest du posten, wenn du's rausgefunden hast? Interessiert mich auch... :wink:


MaxiTB - Mi 11.06.03 21:17
Titel: Was denkst du wohl ?
Klare Sache - werde es gleich mal ausprobieren ...

Hat meine CommonLib wieder ein Feature mehr. *g*


MaxiTB - Mi 11.06.03 22:14
Titel: Wie versprochen
Die Unit:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
unit uiShlRegUrl;

interface

{2003-06-11 N ================================================================}

type iShlRegUrlCmd=class(TObject)

  private

    fName: string;
    fCmd: string;
    fTitle: string;

  public

    constructor Create;

    property Name: string read fName write fName;
    property Command: string read fCmd write fCmd;
    property Title: string read fTitle write fTitle;

  end;

{2003-06-11 N ================================================================}

type iShlRegUrl=class(TObject)

  private

    fIcon: string;
    fPrt: string;
    fTitle: string;

  public

    constructor Create(aProtocol: string);

    procedure Make;
    procedure MakeCmd(aCmd: iShlRegUrlCmd);
    procedure Remove;
    procedure RemoveCmd(aCmd: iShlRegUrlCmd);

    property Icon: string read fIcon write fIcon;
    property Protocol: string read fPrt write fPrt;
    property Title: string read fTitle write fTitle;

  end;

implementation

uses
  SysUtils,
{$IFDEF MSWINDOWS}
  Registry,
  Windows,
{$ENDIF}
  uiSysBase,
  uiSysCore;

{2003-06-11 N ================================================================}

constructor iShlRegUrlCmd.Create;
begin
  guard('iShlRegUrlCmd.Create');

  fName:='Open';
  fTitle:='Open';

  unguard;
end;

{2003-06-11 N ================================================================}

constructor iShlRegUrl.Create(aProtocol: string);
begin
  guard('iShlRegUrl.Create');

  fIcon:='';
  fPrt:=aProtocol;
  fTitle:=qSysAppinfo.AppCompany+' '+qSysAppinfo.AppName+' '+UpperCase(fPrt)+' protocol';

  unguard;
end;

{2003-06-11 N ================================================================}

procedure iShlRegUrl.Make;
  {$IFDEF MSWINDOWS} var lReg: TRegistry; {$ENDIF}
begin
  guard('iShlRegUrl.Make');

  if fPrt='' then trap(vTrapIllegalName);

  {$IFDEF MSWINDOWS}

  lReg:=TRegistry.Create;

  lReg.RootKey:=HKEY_CLASSES_ROOT;

  lReg.OpenKey(fPrt, true);
  lReg.WriteString('', 'URL:'+fTitle);
  lReg.WriteString('URL Protocol','');
  lReg.CloseKey;

  if fIcon<>'' then
  begin
    lReg.OpenKey(fPrt+'\DefaultIcon', true);
    lReg.WriteString('', fIcon);
    lReg.CloseKey;
  end;

  FreeAndNil(lReg);

  {$ENDIF}

  unguard;
end;

{2003-06-11 N ================================================================}

procedure iShlRegUrl.MakeCmd(aCmd: iShlRegUrlCmd);
  {$IFDEF MSWINDOWS} var lReg: TRegistry; {$ENDIF}
begin
  guard('iShlRegUrl.MakeCmd');

  if fPrt='' then trap(vTrapIllegalName);

  {$IFDEF MSWINDOWS}

  lReg:=TRegistry.Create;

  lReg.RootKey:=HKEY_CLASSES_ROOT;

  lReg.CreateKey(fPrt+'\shell');
  lReg.CloseKey;

  lReg.OpenKey(fPrt+'\shell\'+aCmd.Name, true);
  lReg.WriteString('', aCmd.Title+' ('+qSysAppinfo.AppCompany+' '+qSysAppinfo.AppName+')');
  lReg.CloseKey;

  lReg.OpenKey(fPrt+'\shell\'+aCmd.Name+'\command', true);
  lReg.WriteString('', aCmd.Command);
  lReg.CloseKey;

  FreeAndNil(lReg);

  {$ENDIF}

  unguard;
end;

{2003-06-11 N ================================================================}

procedure iShlRegUrl.Remove;
var
  {$IFDEF MSWINDOWS}lReg: TRegistry; {$ENDIF}
begin
  guard('iShlRegUrl.Remove');

  if fPrt='' then trap(vTrapIllegalName);

  {$IFDEF MSWINDOWS}

  lReg:=TRegistry.Create;

  lReg.RootKey:=HKEY_CLASSES_ROOT;

  lReg.DeleteKey(fPrt+'\DefaultIcon');
  lReg.DeleteKey(fPrt);

  FreeAndNil(lReg);

  {$ENDIF}

  unguard;
end;

{2003-06-11 N ================================================================}

procedure iShlRegUrl.RemoveCmd(aCmd: iShlRegUrlCmd);
  {$IFDEF MSWINDOWS}var lReg: TRegistry; {$ENDIF}
begin
  guard('iShlRegUrl.RemoveCmd');

  if fPrt='' then trap(vTrapIllegalName);

  {$IFDEF MSWINDOWS}

  lReg:=TRegistry.Create;

  lReg.RootKey:=HKEY_CLASSES_ROOT;

  lReg.DeleteKey(fPrt+'\shell\'+aCmd.Name+'\command');
  lReg.DeleteKey(fPrt+'\shell\'+aCmd.Name);
  lReg.DeleteKey(fPrt+'\shell');

  FreeAndNil(lReg);

  {$ENDIF}

  unguard;
end;

end.


Ein kleines Demo:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  lCmd: iShlRegUrlCmd;
  lReg: iShlRegUrl;
begin
  lCmd:=iShlRegUrlCmd.Create;
  lReg:=iShlRegUrl.Create('mxnet');

  lCmd.Command:=ParamStr(0)+' %1';

  lReg.Title:='Maxisoft Net Protocol';

  lReg.Make;
  lReg.MakeCmd(lCmd);

  lReg.Free;
  lCmd.Free;
end.


Ich weiß, ich weiß - in der Unit steht eine Menge, was ihr nicht gebrauchen könnt ... sehts von der Seite: Durch das nicht mögliche Copy&Paste müßt ihr euch selber reindenken. ;-)

Auch wenns nicht wirklich schwer ist ... :lol:

Einen Hacken hat die Sache aber doch ... ein IE Fenster wird geöffnet !
Trotz vielem herumprobieren, bin ich nicht draufgekommen, warum es z.B. beim mule nicht aufgemacht wird.

Aber vielleicht liegst auch daran, daß der mule das Fenster gleich wieder killt ? (Fenstername = URL ...) Was solls - vielleicht kommt ja noch wer drauf ...

Auf jedem Fall viel Spaß mit dem Code !