AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Registry] Windows Explorer Kontextmenü: Für alle Dateien
Thema durchsuchen
Ansicht
Themen-Optionen

[Registry] Windows Explorer Kontextmenü: Für alle Dateien

Ein Thema von Dunedain · begonnen am 2. Jan 2007 · letzter Beitrag vom 3. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Dunedain
(Gast)

n/a Beiträge
 
#1

[Registry] Windows Explorer Kontextmenü: Für alle Dateien

  Alt 2. Jan 2007, 19:05
Hallo,

ich habe ein kleines Programm geschrieben, welches als Parameter einen Dateinamen erwartet...

Ich würde das Programm jetzt gerne für eine (beliebige) Datei (und später auch für mehrere Dateien oder komplette Verzeichnisse) aus dem Kontextmenü des Explorers aufrufen. Aber genau hier komme ich nicht weiter. Für einen bekannten Dateityp ist das Einfügen eines Eintrages in das Kontextmenü ja nicht wirklich schwer (zumindest jetzt nicht mehr)...

Aber das ganze "global", also unabhängig von der Dateierweiterung einzufügen stellt mich vor eine zur Zeit unüberwindbare Hürde.

Hab mich auch schon ein bisschen mit google "unterhalten" (Stichwort: contextmenuhandlers), da war auch einiges zu finden, aber leider nichts, was mich weiter gebracht oder mir das System eines solchen Eintrages erklärt hätte.

Hat jemand vielleicht ne Idee, wo ich mich schlau machen kann?
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#2

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 2. Jan 2007, 19:39
Hallo Dunedain,
ich habe mal spontan in der Reg nachgesehen, da ich WinRAR installiert hab, welches genau so einen Eintrag in den Kontextmenüs erzeugt. So wie ich das sehe besteht der Trick lediglich darin als Dateityp bzw. Endung "*" zu verwenden.
Ich hoffe das bringt dich weiter.
Gruß

Mr_G
Jan
  Mit Zitat antworten Zitat
Benutzerbild von TwoFace
TwoFace

Registriert seit: 21. Jun 2003
Ort: Uffenheim
26 Beiträge
 
#3

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 2. Jan 2007, 19:42
Servus und frohes neues Jahr.

Hab das auch schon mal vor langer Zeit gemacht. Hier die Funktion um ne Erweiterung zu registrieren:
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 + '" -mount 0,"%1"');
      reg.CloseKey;
      result := true;
    end;
  finally
    FreeAndNil(reg);
  end;
end;
Und hier die zum löschen:
Delphi-Quellcode:
// 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;
Im Anhang befindet sich ein Screeny vom Schlüssel. Wie Mr_G richtig gesagt hat, für alle Dateien ist der Schlüssel "*".

PS: Für Schäden an der Registry übernehme ich keine Haftung.
Miniaturansicht angehängter Grafiken
regist_113.jpg  
  Mit Zitat antworten Zitat
Dunedain
(Gast)

n/a Beiträge
 
#4

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 2. Jan 2007, 19:52
Danke für die schnellen Antworten.

In gewisser Hinsicht habt Ihr beide Recht.

@ Mr_G
Der * war auch mein erster Anlaufpunkt. Hab natürlich auch versucht, bestehende Einträge zurück zuverfolgen (WinRar, 7-Zip, ...). Aber leider bin ich zu keinen Ergebnis gekommen, außer das "es" etwas mit der CLSID zu tun haben muss (welche vermutlich das Ziel des Aufrufes vom Kontextmenü darstellt?) was mich nicht weiter bringt, da der *-Schlüssel anders aufgebaut ist, wie die Schlüssel, die auf eine feste Dateierweiterung verweisen.

@ TwoFace:
Code funktioniert, aber leider nur, wenn ich eine bestimmte Dateierweiterung registrieren will. (Habs zwar selbst ein bischen anders gemacht, Ergebnis ist aber gleich)
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#5

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 2. Jan 2007, 20:11
Sorry... sowas hatte ich befürchtet.
Ich hab gerade einfach nochmal die Suche angeschmissen und es scheint so zu sein wie du bereits gesagt hast: Man verweist mit der CLSID auf eine Extension, die man in einer DLL zur Verfügung stellt (wenn ich das beim überfliegen richtig verstanden habe).
Lange rede kurzer Sinn: Lies dir den Beitrag einfach mal durch. Dort steht wo man ein Beispiel dazu finden kann (bei den Delphi eigenen Demos mit dabei) und wonach man in der MSDN am besten sucht.
Gruß
Mr_G
Jan
  Mit Zitat antworten Zitat
Dunedain
(Gast)

n/a Beiträge
 
#6

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 2. Jan 2007, 21:35
Das sieht schonmal sehr vielversprechend aus...
Auch wenn mir der Umweg über eine DLL gar nicht gefallen will...
Werde aber erst morgen dazu kommen, daran mal ein bischen rumzubasteln. Vielleicht kann mir jemand "in der Zeit" die Delphi Demo packen und hochladen? Verwende kein Delphi, sondern BCB, aber Delphi Code lässt sich auch dort verwenden...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 2. Jan 2007, 21:42
wie in den Beiträgen zu lesen ist musst du nicht über eine DLL gehen sondern kannst auch wie bei allen anderen Endungen den Command-Schlüssel verwenden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dunedain
(Gast)

n/a Beiträge
 
#8

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 3. Jan 2007, 16:15
Danke, es geht, akà
\*\shell\[Name]\command\@[AppName]

Aber wie kann ich zusätzlich Icons vor den Kontextmenüeinträgen anzeigen? Eine Kaskadierung (Untermenü) wäre auch schön...
(Ist bloß die Frage, ob das bei lediglich 2 Untermenüpunkten [Verschlüsseln|"Sicher" löschen] sinnvoll ist??? Was meint Ihr?)

Jaja, ich weiß: Warum einfach, wenns auch schwierig geht?

Jemand ne Idee?
  Mit Zitat antworten Zitat
Benutzerbild von TwoFace
TwoFace

Registriert seit: 21. Jun 2003
Ort: Uffenheim
26 Beiträge
 
#9

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 3. Jan 2007, 16:50
Servus

also wie das mit Untermenüs geht weiß ich leider auch nicht.
Hab nur rausgefunden, wie das wahrscheinlich mit den Icons funktioniert.

Als Beispiel WinRAR. Der Schlüssel
Code:
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\WinRAR
verweist auf deinen Schlüssel:
Bei mir:
Code:
{B41DB860-8EE4-11D2-9906-E49FADC173CA}
Wenn ich nach diesem Schlüssel suche, komm ich zu einem bei dem als Default-Wert "WinRAR" steht. Scroll ich nun weiter runter, bis ich bei WinRAR bin und diesen Schlüssel öffne, schaut das bei mir so aus, wie auf dem Bild im Anhang.
Beim Schlüssel "Defaulticon" steht als Wert "C:\Programme\WinRAR\WinRAR.exe,0" (ohne Anführungszeichen), welcher sich aus <<Pfad zur Anwendung>>,<<Index des Icons>> zusammensetzt.

Habs zwar noch nicht gecheckt, aber es erscheint mir sehr einleuchtend.

Greetz
TwoFace
Miniaturansicht angehängter Grafiken
winrar_175.jpg  
  Mit Zitat antworten Zitat
RobertP

Registriert seit: 19. Aug 2006
181 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: [Registry] Windows Explorer Kontextmenü: Für alle Dateie

  Alt 3. Jan 2007, 17:36
Moin,
ich hab bei meinem letzten Programm auch so nen Eintrag fürs Explorer Kontextmenü gebraucht und habs mit einer DLL gemacht. Ist eigentlich garnet so kompliziert wies am Anfang aussieht.
Dieses Beispiel hier funktioniert wunderbar. Icons und Untermenüs lassen sich so auch einbinden.
Robert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:36 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