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 Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet.... (https://www.delphipraxis.net/140769-pfad-datein-bekommen-wenn-explorer-kontektmenue-oeffnet.html)

Speeeedfreak 25. Sep 2009 19:22


Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet....
 
Moin Moin,
schon mal Danke an alle hier vorab.... :hello:
Ich habe eine Super Idee für ein Programm aber ziemlich große Probleme bei der Umsetzung.
Ich habe das Kontektmenü des Explorer mit meinem Programmeintrag erweitert Null-Problemo.
Nun möchte ich das wenn mein Programm aus dem Menü ausgewählt wird, jede Datei in jeden
beliebigen Ordner in einen frei wählbaren Ordner kopiert wird. Das kopieren ist nicht das
Problem sondern der Pfad + Dateiname sind das Problem. Habe den ganzen Tag schon gegoogelt
und nach allen möglichen gesucht. Selbst bei MSDN hab ich leider das passende nicht gefunden.

Aber es muß ja was geben die Viren & Firewallprogramme bekommen ja auch alles mit....

Vielen Dank noch mal an alle

cu Speeeedfreak

:glaskugel:

fatalerror 26. Sep 2009 13:08

Re: Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet
 
Du erhältst doch den Pfad der ausgewählten Dateien über die ParamStr. D.h. welche Dateien du kopieren musst sind bei deinem Programmstart schon klar und das Ziel kannst du mit einer SelectDirectory Dialogbox abfragen. Der Rest ist nur noch kopieren der Dateien. Welchen Zusammenhang du da mit einem Virenschutzprogramm darstellst ist mir nicht ganz klar.

Speeeedfreak 26. Sep 2009 17:06

Re: Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet
 
Moin fatalerror,
erst mal Danke für deine Hilfe.... :-D
Die Funktion ParamStr kenne ich, allerdings glaube ich, das ich mich vielleicht ein bißchen falsch ausgedrückt habe.
Ich habe mir keinen eigenen Explorer gebastelt, sondern ich benötige den Pfad und den Dateinamen direkt von Windows.
Mein Prg. könnte ja schon im Hintergrund laufen und beim anklicken meines Eintrags im Kontektmenü des Explorer
bräuchte ich dann irgendwie den Pfad + Dateinamen von mir aus auch in der Zwischenablage wär ja kein Ding.

Hab auch schon etwas gegoogelt aber schwer was raus zu finden. Vielleicht geht es mit der Windows Shell Extensions,
oder ich bin völligst auf dem falschen Weg gelandet.

Wenn ich dich jetzt natürlich falsch verstanden habe dann sorry..... oder hast du ein bißchen Code für mich.

Danke Speeeedfreak :wink:

Luckie 26. Sep 2009 17:09

Re: Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet
 
Guck dir mal die Unit1 im Verzeichnis ExifReaderEx von meinem ExifReader an: http://www.michael-puff.de/Developer/Delphi/Programme/

Speeeedfreak 26. Sep 2009 17:25

Re: Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet
 
Hi Luckie,
danke für die schnelle Hilfe werd gleich mal schaun :shock:

Danke Speeeedfreak

fatalerror 26. Sep 2009 20:18

Re: Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet
 
Ich habe nie angenommen, dass Du einen eigenen Explorerersatz geschrieben hast.

Du hast dein Programm beim Explorer registriert. Nun beim Aufruf deines Programmes über das Kontextmenu startet der Explorer dein Programm und übergibt diesem Programm als Parameter den ausgewählten Dateinamen. Diesen findest du in paramstr. Dein Programm braucht also nicht dauernd im Hintergrund zu laufen.

So wie ich Luckies Beitrag verstanden habe, macht er genau das im FormCreate:

Luckies Code:

if ParamCount = 1 then
begin
Filename := ParamStr(1);
if FileExists(Filename) then
begin
..... hier kommt nun dein Code für das Kopieren der Datei(en)

Speeeedfreak 27. Sep 2009 13:33

Re: Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet
 
Moin ihr 2,
war die ganze Nacht vor meiner Kiste. Der Eintrag und das löschen von meinem Prg. im Kontektmenü ist
mittlerweile kein Problem mehr, aber dieser verdammte Pfad von den Files....

Ich mach´s kurz hier mein Code.... :wall: Bitte helft mir :gruebel:

Delphi-Quellcode:
function RegisterFileTypeCommand(fileExtension, menuItemText, target: string) : boolean;
var
  reg: TRegistry;
  fileType: string;
begin
  result := false;
  reg := TRegistry.Create;
  with reg do
  try
    RootKey := HKEY_CLASSES_ROOT;
    if OpenKey('.' + fileExtension, True) then
    begin
      fileType := ReadString('') ;
      if fileType = '' then
      begin
        fileType := fileExtension + 'file';
        WriteString('', fileType) ;
      end;
      CloseKey;
      if OpenKey(fileType + '\shell\' + menuItemText + '\command', True) then
      begin
        WriteString('', target +) ;
        CloseKey;
        result := true;
      end;
    end;
  finally
    Free;
  end;
end;

function UnRegisterFileTypeCommand(fileExtension, menuItemText: string) : boolean;
var
  reg: TRegistry;
  fileType: string;
begin
  result := false;
  reg := TRegistry.Create;
  with reg do
  try
    RootKey := HKEY_CLASSES_ROOT;
    if OpenKey('.' + fileExtension, True) then
    begin
      fileType := ReadString('') ;
      CloseKey;
    end;
    if OpenKey(fileType + '\shell', True) then
    begin
      DeleteKey(menuItemText) ;
      CloseKey;
      result := true;
    end;
  finally
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Registierung im Kontextmenü
  RegisterFileTypeCommand('pas','gMove ','E:\......meinePrg.exe') ;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //Unregister
  UnRegisterFileTypeCommand('pas','gMove') ;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Filename : String;
begin
  // Filepath bekommen... :)
  if ParamCount = 1 then
    begin
      Filename := ParamStr(1);
      if FileExists(Filename) then
      showmessage(Filename);
    end;
  end;
end.
Oder muß ich "GetModuleFileName"-Methode in einer DLL benutzten....

Danke Speeeedfreak

Speeeedfreak 27. Sep 2009 16:32

Re: Pfad + Datein. bekommen wenn Explorer Kontektmenü öffnet
 
Moin ihr 2,

mein Problem hat sich wie aus dem nix gelöst :thumb:
Windows war der Fehler einmal neu gebootet ohne den SourceCode
zu verändern und dann sah ich ungefähr so aus.... :wiejetzt:

Also fettes DANKE nochmal

LG Speeeedfreak :cheer: :hi: :dancer2: :dancer:


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