Entwickler-Ecke

Windows API - Dateityp registrieren


r2d2-aeg - Mi 23.12.09 15:19
Titel: Dateityp registrieren
Hi,
ich schreib mit Delphi gerade ein Archivierungs-Programm, dass den Dateityp '.xxx' als Archiv benutzt.

Wie kann ich den Dateityp dem Programm zuorden?

Wie kann ich ein Datei-Symbol festlegen?

Moderiert von user profile iconTino: Titel erweitert.
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mi 23.12.2009 um 15:32


Delete - Mi 23.12.09 15:38

Registrier den Dateityp in der Registry. Code dazu solltest du im Forum finden.


Bergmann89 - Mi 23.12.09 15:40

Hey,

wenns bloß auf deinem Rechner sein soll, einfach öffnen mit --> dein Programm un dann n Hackn bei immer öfnne mt rein. Symbol kannst du dann in nem beliebeigen Ordner unter Extras --> OrdnerOptionen --> DateiTypey --> XXX ändern.

Wenn den Programm sich selber regestrieren soll, dann geht das so:

Delphi-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:
function InstallExt(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): Boolean;
var
  Reg: TRegistry;
begin
  Result := False;
  if Extension <> '' then
  begin
    if Extension[1] <> '.' then
      Extension := '.' + Extension;

    Reg := TRegistry.Create;
    try
      Reg.RootKey := HKEY_CLASSES_ROOT;
      if Reg.OpenKey(Extension, True) then
      begin
       Reg.WriteString('', ExtDescription);
       if Reg.OpenKey('\' + ExtDescription, True) then
       begin
         Reg.WriteString('', FileDescription);
         if Reg.OpenKey('DefaultIcon', True) then
         begin
           Reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex]));
           if Reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then
           begin
             Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString]));
             Result:=True;
           end;
         end;
       end;
     end;
  finally
    Reg.Free;
  end;
  end;
end;

function UnInstallExt(Extension: String): Boolean;
var
  Reg: TRegistry;
  Description: String;
begin
  Result := False;
  if Extension <> '' then
    begin
    if Extension[1] <> '.' then
      Extension := '.' + Extension;
    Reg := TRegistry.Create;
    try
      Reg.RootKey := HKEY_CLASSES_ROOT;
      if Reg.KeyExists(Extension) then
        begin
        Reg.OpenKey(Extension, false);
        Description:=Reg.ReadString('');
        Reg.CloseKey;
        if Reg.KeyExists('\'+Description) then
          Result:=Reg.DeleteKey(Extension) and Reg.DeleteKey('\' + Description);
        end;
    finally
      Reg.Free;
    end;
  end;
end;


MfG Bergmann


r2d2-aeg - Fr 25.12.09 21:38

Danke für den Code! Funktioniert!
Aber noch eine Frage zu dem Quellcode,
was muss in ParamString und in IconIndex???

Als Parameter soll der Dateipfad der .xxx - Datei übergeben werden.
Und ich hab mir ein Icon erstellt, wie bekomm ich das als Icon für die Datei??


Delete - Fr 25.12.09 21:51

Binde es als Ressource in dein Programm ein und übergebe den Index der Ressource als Parameter bei der obigen Registrierungsfunktion.


Bergmann89 - Sa 26.12.09 14:14

Hey,

der Dateipfad der XXX-Datei wird automatisch mit übergeben. Der ParamString-Parameter is für feste Parameter, die immer gelten gedacht. Bsp.: "-setup" oder sowas. Ich hab '"%1"' als Parameter übergeben, damit wird dann der Dateipafad glaub ich nich mehr zerstückelt, sondern als ganzes übergeben...
Und wie Luckie schon gesagt hat, das Icon hängst du mit in die Exe rein. Wenn zu z.B. Index = 0 übergibst, müsste die XXX-Datei immer das gleiche Icon wie die Exe haben.

MfG Bergmann


r2d2-aeg - So 27.12.09 22:22

Jetzt bin ich glücklich!!! :D