AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kontextmenü einer Datei ergänzen

Ein Thema von Andreas L. · begonnen am 12. Mär 2006
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

Kontextmenü einer Datei ergänzen

  Alt 12. Mär 2006, 10:30
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]
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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