(Gast)
n/a Beiträge
|
Kontextmenü einer Datei ergänzen
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]
|
|
Zitat
|