Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Prüfen der registrierten Dateitypen (https://www.delphipraxis.net/110052-pruefen-der-registrierten-dateitypen.html)

matashen 12. Mär 2008 09:29


Prüfen der registrierten Dateitypen
 
Hallo zusammen,

ach Stundenlanger Suche im Internet muss ich doch mal die Frage hier stellen,

vieleicht gibts das schon irgendwo erklärt aber ich habs einfach nicht gefunden.

Und zwar gibt es viele verschiedene Dateiendungen die ich mit meinem Programm verknüpfen möchte oder eben die Verknüpfung löschen möchte.

Dazu muss ich aber erstmal Prüfen ob mein Programm in der Registry überhaupt drin ist.

Dazu hab ich folgende Funktion geschrieben


Delphi-Quellcode:
function CheckExt(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('');
        if (Reg.OpenKey('\' + 'Planmarker', True))//Mein Programmname
        and (Reg.OpenKey('DefaultIcon', True))
        and (Reg.KeyExists('\'+Description))
           then Result:=true
           else result:=false;
        Reg.CloseKey;
        end;
    finally
      Reg.Free;
    end;
  end;
end;
Der Code erkennt aber nur das die Endung registriert ist, nicht aber ob mein Programm als Hauptverknüpfung drin steht.
Und ich steh da irgendwie aufn Schlauch...

Gruß Matthias

DeddyH 12. Mär 2008 09:31

Re: Prüfen der registrierten Dateitypen
 
Was gibt denn FindExecutable zurück?

SirThornberry 12. Mär 2008 09:32

Re: Prüfen der registrierten Dateitypen
 
Bei der Dateiendung ist vermerkt welcher Schlüssel die Actionen dazu beherbergt. Also musst du dann den Schlüssel öffnen und schauen ob dort deine Anwendung eingetragen ist (du müsstest ja am besten wissen wo du was eingetragen hast)

Der.Kaktus 12. Mär 2008 09:51

Re: Prüfen der registrierten Dateitypen
 
Hallo,
schau mal hier Dateiendungen registrieren

matashen 12. Mär 2008 09:55

Re: Prüfen der registrierten Dateitypen
 
das hab ich erstmal per Hand im Explorer eingetragen.(zum testen)

Ich möchte ja erstmal prüfen ob Dateiendung .bmp , .pcx etc schon für mein Programm eingetragen ist und dann die möglichkeit geben diese Verknüpfung zu entfernen oder hinzuzufügen.

Ich dachte das Prüfen ist erstmal einfacher wie schreiben oder löschen, aber irgendwie häng ich da

ich dachte eben das der Eintrag dann in

Delphi-Quellcode:
Reg.KeyExists('\'+Description+ '\Shell\Open\Command')
geprüft werden könnte

bekomm da aber kein gutes Ergebnis.


wieso
FindExecutable
Ich will ja nicht die dazugehörige Anwendung starten ? Dachte das wird in zusammenhang ,it Shellexecute verwendet

@Kaktus
Ich suchte nicht die Funktion zum schreiben und löschen, darauf bin ich auch schon gestoßen, ich möchte ja erstmal prüfen. Die prüfung in deleteext hab ich ausprobiert, da bekomm ich genau wie bei meinem gebastel immer ein positives Ergebnis wenn die Erweiterung in der Registry existiert

Gruß Matthias

DeddyH 12. Mär 2008 10:11

Re: Prüfen der registrierten Dateitypen
 
Zitat:

Zitat von Win32 SDK
The FindExecutable function retrieves the name and handle to the executable (.EXE) file associated with the specified filename.


matashen 12. Mär 2008 10:15

Re: Prüfen der registrierten Dateitypen
 
Habs rausgefunden

Danke für die Tipps

Mein Neuer Code:

Delphi-Quellcode:
function CheckExt(Extension: String): Boolean;
var
  Reg: TRegistry;
  Description,entrystring: 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.Openkey('\'+Description+ '\Shell\Open\Command',false);
        Entrystring:=Reg.ReadString('');
        if entrystring=Format('"%s" "%s"', [paramstr(0), '%1'])
           then Result:=true
           else result:=false;
        Reg.CloseKey;
        end;
    finally
      Reg.Free;
    end;
  end;
end;
Gruß Matthias

Christian Seehase 12. Mär 2008 21:43

Re: Prüfen der registrierten Dateitypen
 
Moin Matthias,

zwei Sachen noch, die mir aufgefallen sind:

Das
Delphi-Quellcode:
        if entrystring=Format('"%s" "%s"', [paramstr(0), '%1'])
           then Result:=true
           else result:=false;
kannst Du auch so
Delphi-Quellcode:
Result := entrystring=Format('"%s" "%s"', [paramstr(0), '%1']);
schreiben.

Ausserdem gehört zu jedem erfolgreichen Reg.OpenKey auch ein Reg.CloseKey, da Du Dir ansonsten ein Resourcenleck einhandelst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz