Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm soll über Kontext-menü Prozedur ausführen (https://www.delphipraxis.net/74403-programm-soll-ueber-kontext-menue-prozedur-ausfuehren.html)

Radon 2. Aug 2006 18:30


Programm soll über Kontext-menü Prozedur ausführen
 
Hi

Ich -hoffe- die Frage gibts noch nicht..

Ich habe ein kleines Programm welches Daten shreddert. Dabei öffnet man dieses, über Durchsuchen kann man eben eine Datei öffnen, und eine Art Sicherheitsstufe auswählen, wie oft der File überschrieben werden soll. Soweit dazu.

Nun will ich das so einrichten, dass man über das Rechtsklick-Kontextmenü einen File auch shreddern kann, ohne extra das Programm öffnen zu müssen. Dazu müsste das Programm gestartet werden, mit 2 Informationen, die mitgesendet werden sollen. Erstmal der Filename, der sich ja aus dem angeklickten File ergibt, und der Sicherheitsstufe, die einfach einen Standartwert bekommt.

Ist das irgendwie machbar?


Sorry, bin Anfänger :oops:

Alien426 2. Aug 2006 19:01

Re: Programm soll über Kontext-menü Prozedur ausführen
 
Du kannst in der Registry unter HKEY_CLASSES_ROOT\*\shell\PROGRAMMNAME einen Standardwert (Zeichenfolge mit leerem Namen) mit dem Text erzeugen, der dann im Kontextmenü angezeigt werden soll. Unter HKEY_CLASSES_ROOT\*\shell\PROGRAMMNAME\command steht dann im Standardwert der Pfad zu deinem Programm und die Parameter, die übergeben werden (%1 für den Pfad der Datei, die gewählt wurde).

Delphi-Quellcode:
Reg := TRegistry.create;
try
  Reg.RootKey := HKEY_CLASSES_ROOT;
  if Reg.KeyExists('\*\shell\TEST') then
  begin
    TheMessage := 'Not all Registry entries were removed successfully.';
    if Reg.DeleteKey('\*\shell\TEST') then
      TheMessage := 'All Registry entries removed successfully.';
  end
  else
  begin
    TheMessage := 'Not all Registry entries were created successfully.';
    if Reg.OpenKey('\*\shell\TEST', true) then
      Reg.WriteString('', 'Shreddern...');
      if Reg.OpenKey('\*\shell\TEST\command', true) then
      begin
   Reg.WriteString('','"' + ParamStr(0) + '" "%1"');
   TheMessage := 'All Registry entries created successfully.';
      end;
  end;
finally
  Reg.CloseKey;
  Reg.Free;
end;
ShowMessage(TheMessage);
Für mehrere Sicherheitsstufen musst du wahrscheinlich mehrere Einträge anlegen. Statt * (alle Dateien) kannst du auch einen bestimmten Dateityp oder "Directory" für Ordner und "Drive" für Laufwerke benutzen.

Radon 2. Aug 2006 19:19

Re: Programm soll über Kontext-menü Prozedur ausführen
 
Hört sich ja schonmal brauchbar an. Danke!

Nur, wie verknüpfe ich das mit meinem Programm?

Oder ist der Code schon fumktional so?

mkinzler 2. Aug 2006 19:22

Re: Programm soll über Kontext-menü Prozedur ausführen
 
Zitat:

Zitat von Radon
Hört sich ja schonmal brauchbar an. Danke!

Nur, wie verknüpfe ich das mit meinem Programm?

Oder ist der Code schon fumktional so?

Du schreibst ja den Pfad und Namen deines Programmes in die Registry, dadurch wird dein Programm mit der datei als Parameter dann aufgerufen.

Radon 2. Aug 2006 19:34

Re: Programm soll über Kontext-menü Prozedur ausführen
 
Jau, soweit erkenn ich das auch. Das Programm wird dann gestartet und hat einen Parameter bekommen. Wie krieg ich das Programm jetzt dazu, den Parameter zu nehmen, ihn der rrichtigen Variable zuzuweisen und die entsprechende Hauptprozedur zu starten?

mkinzler 2. Aug 2006 19:43

Re: Programm soll über Kontext-menü Prozedur ausführen
 
Delphiprogramme erhalten ihre Parameter über den Array ParamStr wobei Index 0 die Exe ist und ab 1 die weiteren Parameter.

Radon 3. Aug 2006 10:41

Re: Programm soll über Kontext-menü Prozedur ausführen
 
okay. das heißt also ich müsste es so angehn: das Programm startet und überprüft, ob ParamStr(1) einen Wert hat. Wenn nicht, dann folgt das normale Programm. Wenn es einen Wert hat, dann soll er ohne das MainForm sichtbar zu machen eine andere Prozedur starten, die dann den ParamStr(1) = Filename zur weiteren benutzung gebraucht? Seh ich das richtig?

Balu der Bär 29. Okt 2006 17:50

Re: Programm soll über Kontext-menü Prozedur ausführen
 
Zitat:

Zitat von Alien426
Du kannst in der Registry unter HKEY_CLASSES_ROOT\*\shell\PROGRAMMNAME einen Standardwert (Zeichenfolge mit leerem Namen) mit dem Text erzeugen, der dann im Kontextmenü angezeigt werden soll. Unter HKEY_CLASSES_ROOT\*\shell\PROGRAMMNAME\command steht dann im Standardwert der Pfad zu deinem Programm und die Parameter, die übergeben werden (%1 für den Pfad der Datei, die gewählt wurde).

Da gibt es nur ein Problem, auf meinem Notebook z.B. gibt es HKEY_CLASSES_ROOT\*\shell gar nicht, sondern nur HKEY_CLASSES_ROOT\*\shellex. Ist es egal wo ich da reinschreibe?


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