AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Explorer Menü für mehrere Dateien?

Ein Thema von MicMic · begonnen am 30. Sep 2019 · letzter Beitrag vom 1. Okt 2019
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Explorer Menü für mehrere Dateien?

  Alt 30. Sep 2019, 17:03
Hallo,

folgenden Code habe ich aus dem Internet.
Mit der Funktion kann man das Explorer Popup-Menü öffen. Zumindest für eine Datei oder ein Verzeichnis (Parameter aFile).
Weiß vielleicht jemand, wie man mehrere Dateien und oder Verzeichnisse übergibt?

Gruß Mic

Delphi-Quellcode:
procedure ShowSysPopup(aFile: string; x, y: integer; HND: HWND);
var
  Root: IShellFolder;
  ShellParentFolder: IShellFolder;
  chEaten,dwAttributes: ULONG;
  FilePIDL,ParentFolderPIDL: PItemIDList;
  CM: IContextMenu;
  Menu: HMenu;
  Command: LongBool;
  ICM2: IContextMenu2;

  ICI: TCMInvokeCommandInfo;
  ICmd: integer;
  P: TPoint;
Begin
  OleCheck(SHGetDesktopFolder(Root));//Get the Desktop IShellFolder interface

  OleCheck(Root.ParseDisplayName(HND, nil,
    PWideChar(WideString(ExtractFilePath(aFile))),
    chEaten, ParentFolderPIDL, dwAttributes)); // Get the PItemIDList of the parent folder

  OleCheck(Root.BindToObject(ParentFolderPIDL, nil, IShellFolder,
  ShellParentFolder)); // Get the IShellFolder Interface of the Parent Folder

  OleCheck(ShellParentFolder.ParseDisplayName(HND, nil,
    PWideChar(WideString(ExtractFileName(aFile))),
    chEaten, FilePIDL, dwAttributes)); // Get the relative PItemIDList of the File

  ShellParentFolder.GetUIObjectOf(HND, 1, FilePIDL, IID_IContextMenu, nil, CM); // get the IContextMenu Interace for the file

  if CM = nil then Exit;
  P.X := X;
  P.Y := Y;

  ClientToScreen(HND, P);

  Menu := CreatePopupMenu;

  try
    CM.QueryContextMenu(Menu, 0, 1, $7FFF, CMF_EXPLORE or CMF_CANRENAME);
    CM.QueryInterface(IID_IContextMenu2, ICM2); //To handle submenus.
    try
      Command := TrackPopupMenu(Menu, TPM_LEFTALIGN or TPM_LEFTBUTTON or TPM_RIGHTBUTTON or
        TPM_RETURNCMD, p.X, p.Y, 0, HND, nil);
    finally
      ICM2 := nil;
    end;

    if Command then
    begin
      ICmd := LongInt(Command) - 1;
      FillChar(ICI, SizeOf(ICI), #0);
      with ICI do
      begin
        cbSize := SizeOf(ICI);
        hWND := 0;
        lpVerb := MakeIntResourceA(ICmd);
        nShow := SW_SHOWNORMAL;
      end;
      CM.InvokeCommand(ICI);
    end;
  finally
     DestroyMenu(Menu)
  end;
End;
  Mit Zitat antworten Zitat
Alt 1. Okt 2019, 01:06     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Explorer Menü für mehrere Dateien?

  Alt 1. Okt 2019, 08:38
Also ich will einfach das Menü haben, so wie's der Explorer nutzt.
Und bei mehrere markierten Dateien/Verzeichnissen, schaut dann z.B. das Popup-Menü anders aus.
Dort im Menü sind dann auch manchmal andere Menüpunkte vorhanden. Je nachdem was auf dem Rechner so installiert ist.

Ich habe jetzt auch was gefunden:
https://stackoverflow.com/questions/...783104#3783104

Das schaut jedenfalls so aus, als wäre es das richtige. Aber habe noch Probleme, wegen AnsiChar/WideChar und andere Fehler. Das wurde wohl für eine andere ältere Delphi Version geschrieben. Ich nutzte Delphi 10.3

Überlege schon, es ganz selber zu machen und mir die erforderlichen Infos aus der Registry zu holen. Z.B. wegen "Senden an..." oder wenn ein Viruskiller installiert ist, damit dieser dann auch im Menü angezeigt wird. Z.B. zeigt bei mir der Explorer (in einem Kontextmenü) "mit Windows Defender überprüfen" an. Die Infos zum Menü werden wohl alle irgendwo in der Registry stehen. Aber ob das der richtige Weg ist? Das Beispiel von "stackoverflow.com" läuft halt nicht auf anhieb und da jetzt schnell durchzusteigen... im Hirn ist grad viel zu viel Source.

Mic
  Mit Zitat antworten Zitat
Alt 1. Okt 2019, 10:14     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Explorer Menü für mehrere Dateien?

  Alt 1. Okt 2019, 18:58
Inzwischen habe ich viel ausprobiert aber nicht so zum laufen bekommen. Trotzdem Danke für deine Hilfe wegen Char/Widechar etc.
Aber etwas anderes habe ich inzwischen gefunden.
Vielleicht für andere auch nützlich. Damit geht's dann mit mehreren Dateien.

http://blog.issamsoft.com/?q=en/node/65

Jedoch ist bei mir z.B. das "Öffnen mit" leer. Zum Beispiel bei einer TXT Datei. Beim Explorer habe ich dagegen dann mehrere Auswahlmöglichkeiten.
Das Problem im letzten Kommentar auf der Seite, ist bei mir auch. Also wenn man z.B. nur "C:\" übergibt. Dann geht es nicht und macht ein Fehler.
Trotzdem geht es recht gut. Wobei ich dann z.B. der Menüpunkt "Löschen" gerne noch zuvor abfangen würde... also ein Dialog einbauen würde, ob der User wirklich löschen will. Auch der Menüpunkt "Umbenennen"... da muss ich mich ja dann selbst drum kümmern und eine Funktion zum umbenennen anbieten. Habe aber jetzt noch nicht geschaut, wie ich da einen gewählten Menüpunkt abfragen kann.

Auch eine andere Seite... ist vielleicht Interesant für andere.

https://www.zabkat.com/2xExplorer/sh...s_context.html

Da steht viel über dieses Kontextmenü und wie das alles im einzelnen funktioniert. Ich nutze immer den Google Übersetzer... hach hab ich schon gesucht. Auch wurde ich schon oft von Google für die Übersetzung gesperrt. einfach weil ich zu viel übersetzen lassen wollte Trotzdem verstehe ich nur ein viertel *lol

Aber das ist ja noch nicht alles. Bei so einem Menü würde ich dann gerne noch eigene Menüpunkte einfügen. Kein Plan
Ich suche halt immer so das Internet durch und nutze Keywords wie "TrackPopupMenu", "IID_IContextMenu" und finde somit manchmal was brauchbares, was sich leicht anpassen kann. Aber mit dem Kontextmenü... ist dann schon ne große Nummer. Ob ich da noch alles zusammensuchen kann?... alles nicht einfach (für mich).

Mic
  Mit Zitat antworten Zitat
Antwort Antwort


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:10 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