![]() |
Explorer Menü für mehrere Dateien?
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; |
AW: Explorer Menü für mehrere Dateien?
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: ![]() 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 |
AW: Explorer Menü für mehrere Dateien?
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. ![]() 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. ![]() 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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