Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Windows API / MS.NET Framework API (https://www.delphipraxis.net/20-library-windows-api-ms-net-framework-api/)
-   -   Delphi Kontextmenü einer Datei ergänzen (https://www.delphipraxis.net/65084-kontextmenue-einer-datei-ergaenzen.html)

Andreas L. 12. Mär 2006 09:30


Kontextmenü einer Datei ergänzen
 
Hi,
ich habe hier 2 kleine Funktionen gebastelt die es ermöglichen einen Kontextmenüeintrag eines beliebigen Dateityps für dein Programm zu erstellen oder wieder zu löschen.

Unit "Registry" einbinden

Delphi-Quellcode:
//app muss den kompletten Dateipfad + Dateiname des Programms beinhalten, fileext soll die Erweiterung sein (ohne Punkt), caption ist der Text der angezeigt werden soll
function RegConMenu(app, fileext, caption: String): Boolean;
var
  reg: TRegistry;
begin
  Result:=True;
  try
    reg:=TRegistry.Create;
    reg.RootKey:=HKEY_CLASSES_ROOT;
    //Zum Schlüssel des angegebenen Dateitypen springen, falls nicht vorhanden wird dieser erstellt
    reg.OpenKey('.'+fileext+'\Shell\'+caption+'\command',true);
    //Anwendung eintragen, %1 übergibt den Dateinamen
    reg.WriteString('','"'+app+'" %1');
    reg.CloseKey;
  except
    Result:=False;
  end;
  reg.free;
end;

//fileext ist die Erweiterung (ohne Punkt), caption ist der Text des Menüpunkts, wird delfiletype mit true beantwortet wird die gesamte Dateierweiterung aus der registrzy gelöscht, mit false nur der Kontextmenüeintrag
function DelConMenu(fileext, caption : String; delfiletype : Boolean):Boolean;
var
  reg: TRegistry;
begin
  result:=true;
  try
    reg:=TRegistry.Create;
    reg.RootKey:=HKEY_CLASSES_ROOT;
    if delfiletype then
    begin
      //Schlüssel löschen
      reg.DeleteKey('.'+fileext);
    end
    else
    begin
      //Zum Schlüssel des angegebenen Dateitypen springen
      reg.OpenKey('.'+fileext+'\Shell\',false);
      //Schlüssel löschen
      reg.DeleteKey(caption);
    end;
    reg.CloseKey;
  except
    Result:=False;
  end;
  reg.free;
end;
Matze hat die Codes noch ein wenig erweitert und korrigiert:
Delphi-Quellcode:
// app muss den kompletten Dateipfad + Dateiname des Programms beinhalten
// fileext soll die Erweiterung sein (ohne Punkt)
// caption ist der Text der angezeigt werden soll
function RegConMenu(app, fileext, caption: String): Boolean;
var
  reg: TRegistry;
begin
  result := false;

  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    // Zum Schlüssel des angegebenen Dateitypen springen,
    // falls nicht vorhanden wird dieser erstellt
    if reg.OpenKey('.' + fileext + '\Shell\' + caption + '\command', true) then
    begin
      //Anwendung eintragen, %1 übergibt den Dateinamen
      reg.WriteString('', '"' + app + '" %1');
      reg.CloseKey;
      result := true;
    end;
  finally
    FreeAndNil(reg);
  end;
end;

// fileext ist die Erweiterung (ohne Punkt)
// caption ist der Text des Menüpunkts
// wird delfiletype mit true beantwortet wird die gesamte Dateierweiterung aus der
// registry gelöscht, mit false nur der Kontextmenüeintrag
function DelConMenu(fileext, caption: String; delfiletype: Boolean): Boolean;
var
  reg: TRegistry;
begin
  result := false;

  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    if delfiletype then
    begin
      //Schlüssel löschen
      if reg.KeyExists('.' + fileext) then
        reg.DeleteKey('.' + fileext);
    end else
    begin
      //Zum Schlüssel des angegebenen Dateitypen springen
      if reg.OpenKey('.' + fileext + '\Shell\', false) then
      begin
        //Schlüssel löschen
        reg.DeleteKey(caption);
        reg.CloseKey;
        result := true;
      end;
    end;
  finally
    FreeAndNil(reg);
  end;
end;
Und noch 2 Beispiel aufrufe:
Erstellen eines Eintrages:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if RegConMenu('C:\Programme\blubb.exe','xform','Öffnen mit blubb') then
  begin
    ShowMessage('Der Kontextmenüeintrag wurde erfolgreich erstellt!');
  end
  else
  begin
    ShowMessage('Der Kontextmenüeintrag konnte nicht erstellt werden! Evtl. fehlen Ihnen die nötigen Benutzerrechte!');
  end;
end;
Löschen eines Eintrages:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if DelConMenu('xform','Öffnen mit blubb', true) then
  begin
    ShowMessage('Der Kontextmenüeintrag wurde erfolgreich entfernt!');
  end
  else
  begin
    ShowMessage('Der Kontextmenüeintrag konnte nicht entfernt werden! Evtl. fehlen Ihnen die nötigen Benutzerrechte!');
  end;
end;
Hier noch eine etwas ausführlichere Beschreibung + Screenshots: http://softprose.any-key.de/?page=do...cle=regfileext

[edit=Chakotay1308]Beitrag erweitert und Code angepasst. Mfg, Chakotay1308[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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