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 Eintrag in Context Menu (https://www.delphipraxis.net/7236-eintrag-context-menu.html)

wb32 6. Aug 2003 14:03


Eintrag in Context Menu
 
Hallo alle zusammen, folgende Frage:

Hab schon gesucht aber keinen verwertbaren Source gefunden :(

Ich bastle an einem Programm das Dateien sicher und unwiederherstellbar löschen soll (Gutmann oder US DoD Methode).

Dazu ist es nötig einen Eintrag ins Context Menu zu machen.
Beim Rechtsklick auf eine Datei oder Ordner soll im Context Menu z.B. "sicher löschen mit xyz" erscheinen...

2 Fragen:

1. wie bekomme ich den Eintrag ins Context Menu
2. wie funktioniert die Übergabe odes Ordners oder Dateinamens an mein Programm ?

Danke für Eure Hilfe :)

Luckie 6. Aug 2003 14:06

Re: Eintrag in Context Menu
 
Forensuche -> "Kontextmenü" liefert zum Beispiel das: http://www.delphipraxis.net/internal...=kontextmen%FC

wb32 6. Aug 2003 14:20

Re: Eintrag in Context Menu
 
hmm das hab ich schon gesehen, nur leider kann ich damit wenig anfangen... wenn ich alles 100%ig wüsste dann würde ich nicht in einem Forum fragen wie es funktioniert oder ?

Das Du suchen kannst weiß ich mittlerweile *gg*...

Ich bin kein Delphi Vollprofi und wäre für ein wenig Source schon sehr dankbar :)

Luckie 6. Aug 2003 14:31

Re: Eintrag in Context Menu
 
Hm, woher soll ich wissen, ob du damit was anfangen kannst oder nicht? Ich kenne deinen Wissensstand nicht.

Desweiteren wäre es hilfreich, wenn du mal etwas präziser wirst, warum du damit nicht klar kommst.

Um an die Datei dranzukommen, die dir übergen wird kuck dir mal paramStr und ParamCount an.

sakura 6. Aug 2003 15:29

Re: Eintrag in Context Menu
 
Auf dieser Seite kannst Du Dir die Sourcen von Macro Cantù's Buch "Mastering Delphi 5" runter laden.

http://www.marcocantu.com/md5/md5dload.htm

Ca. in Kapitel 15 hat er das Thema ausführlich besprochen. Die Demo findest Du im entsprechenden Verzeichnis.

...:cat:...

wb32 6. Aug 2003 17:09

Re: Eintrag in Context Menu
 
also ich habe das programm fast fertig :)


habe die Komponente von

http://www.kaestnerpro.de/regworks.htm

benutzt...

Nur ein Problem ... wie ich die Dateiendung z.B. "blabla.xyz" für mein programm registriere ist klar das funzt auch aber wie bekomme ich es hin das ordner und sämtliche anderen dateien damit gelöscht werden können ?

ich meine wenn ich auf *.txt klicke soll im kontextmenu ebenfalls mein programm angezeigt werden...

Luckie 6. Aug 2003 17:18

Re: Eintrag in Context Menu
 
Das ist der falsche Weg. Hast du mal in dem Demo-Ordner gekuckt, auf den Christian Seehase in dem von mir verlinkten Thread verwiesen hat? Das macht genau das, was du willst.

sakura 6. Aug 2003 17:31

Re: Eintrag in Context Menu
 
Du musst Deine COM-Komponente nicht für eine bestimmte Endung sondern beim Reg-Eintrag "*" (dem ersten) eintragen.

...:cat:...

wb32 6. Aug 2003 20:05

Re: Eintrag in Context Menu
 
ahhja... und wie ?

sakura 6. Aug 2003 20:14

Re: Eintrag in Context Menu
 
Im Schlüssel HKCR\*\shellex\ContextMenuHandlers\ legst Du einen Schlüssel für Deine Software an. Als Standard-Wert (Name ist ein leerer String) speicherst Du die GUID Deines Handlers.

...:cat:...

wb32 6. Aug 2003 20:31

Re: Eintrag in Context Menu
 
jetzt willste mich aber rollen oder ???

Das sehe ich in der Registry auch aber ich weiß nicht wie man den Schlüssel dort anlegt und was genau dort drinstehen muss...

Man man man nu macht es doch nicht so schwer, Ihr wisst doch offensichtlich wie es geht was ist so schwer daran den Source rauszurücken ???

Ich sitze den ganzen Tag schon an dem Mist und komm nicht weiter...

wb32 6. Aug 2003 20:41

Re: Eintrag in Context Menu
 
ok ich habs... danke trotzdem für eure hilfe ...

für alle die es mal suchen:

Code:
procedure TForm1.addClick(Sender: TObject);
var
  Reg:TRegistry;
begin
  reg:=tregistry.create();
  Reg.RootKey:=HKEY_CLASSES_ROOT;

-> Reg.OpenKey('*\shell',true); // wird das benötigt ???
-> Reg.CloseKey;

  Reg.OpenKey('*\shell\'+Name,true);
  Reg.WriteString('',Title);//optional
  Reg.CloseKey;

  Reg.OpenKey('*\shell\'+Name+'\command',true);
  Reg.WriteString('',Adress); // adress="c:\test\meinprogramm.exe %1"
  Reg.CloseKey;

  reg.free;
end;

2 Fragen hab ich aber noch :)

1. die oben gezeigt stelle mit -> wird die benötigt ?
2. wie kann ich den eintrag wieder löschen ?

sakura 6. Aug 2003 20:50

Re: Eintrag in Context Menu
 
Immer mit der Ruhe. Ich wusste ja nicht, wo Dein Problem lag. Ich hatte vermutet, das die Regsitry zu nutzen nicht das Probem sei ;-)

1. Ist nicht nötig.

2. Den übergeordneten Reg-Pfad öffnen und mit DeleteKey den gewünschten Eintrag entfernen.

...:cat:...

wb32 6. Aug 2003 20:59

Re: Eintrag in Context Menu
 
ok das geht ...

Code:
begin
  reg:=tregistry.create();
  Reg.RootKey:=HKEY_CLASSES_ROOT;
  Reg.DeleteKey('*\shell\');
  reg.free;
end;
ich wusste nicht mehr ob shell vorher da war oder nicht...

ok für einzelne datein funktioniert es jetzt aber wie kann ich es in der registry eintragen das ich auch ordner damit aufrufen kann ?

sakura 6. Aug 2003 21:04

Re: Eintrag in Context Menu
 
Du solltest nicht gerade den Shell Eintrag löschen, da auch andere Apps (WinZIP; ICQ, ...) dort registriert sind.

Betreffs der Folder kann ich leider momentan nicht helfen, aber bei MSDN wirst Du bestimmt den Tipp finden.

...:cat:...

wb32 6. Aug 2003 21:08

Re: Eintrag in Context Menu
 
hmm ich hab auf beiden pcs WIN XP und hab jetzt gearde ma auf meinem anderen rechner geschaut der hat den shell ordner dort auch nicht, da ist und war auf meinem PC auch nichts weiter drin ...

also den drin lassen oder wie ists am besten ?

sakura 6. Aug 2003 21:17

Re: Eintrag in Context Menu
 
Auf jeden Fall nur dann löschen, wenn nichts drinne ist. Bei mir sind 5 Einträge drin. Wäre schade, wenn die weg wären ;-)

...:cat:...

Luckie 6. Aug 2003 21:20

Re: Eintrag in Context Menu
 
Zitat:

Zitat von sakura
Auf jeden Fall nur dann löschen, wenn nichts drinne ist. Bei mir sind 5 Einträge drin. Wäre schade, wenn die weg wären ;-)

Das fällt dann unter collateral damage. :mrgreen:

wb32 6. Aug 2003 21:36

Re: Eintrag in Context Menu
 
ok ich habs so geändert:

Code:
begin
  reg:=tregistry.create();
  Reg.RootKey:=HKEY_CLASSES_ROOT;
  if Reg.OpenKey('*\shell',false) then begin
    Reg.DeleteKey(Name);
     Reg.CloseKey;
    end;
  reg.free;
end;

und gleich das nächste problem, wenn ich mehr als eine datei aufrufe sollen diese natürlich auch von meinem programm geööfnet werden paramstr(0) und paramstr(1) enthalten die daten

mein programm startet aber bei 3 dateien dann 3x :( ???

es soll aber nur 1x starten und die anderen dateien ebanfalls bearbeiten...

Alexander 7. Aug 2003 09:50

Re: Eintrag in Context Menu
 
neue FRage neuer Thread ;-)

PS: Such mal in der code-Library, da steht irgendwo wie man es hinbekommt, dass die Anwendung nur einmal gestartet werden kann, dann musst du halt noch eine Message an dein Programm schicken (also praktisch von deinem Programm, das wieder beendet wird, zu deinem Programm, was weiter laufen soll.., um die Dateien zu übergeben.

Knut 9. Aug 2003 01:35

Re: Eintrag in Context Menu
 
wegen dem Ordner:
ich weiß nicht ob es dir hilft aber probiers vielleicht mal mit

HKEY_CLASSES_ROOT\Folder\shellex\ContextMenuHandle rs

viel spaß noch...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.

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