![]() |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Zitat:
Wie groß ist denn Cmd bzw. Cmd-1, wenn das Eigenschaften-Item gerufen wird? Ich glaube, du solltest das Flag CMIC_MASK_UNICODE nicht setzen. ![]() Zitat:
Zitat:
Zitat:
Grüße Dalai |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Danke für die Anregung mit dem Unicode Flag, das werde ich nachher mal testen und erstelle auch ein paar Photos (bevor ich mich falsch Ausdrücke) was passiert wenn man ohne Failsafe arbeitet.
Ich werde erst morgen die offenen Fragen beantworten können, bitte sei mir nicht böse und Dankeschön nochmal! |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Liste der Anhänge anzeigen (Anzahl: 3)
Guten Morgen/Tag/Abend,
hier nun nochmal umgeschrieben so das mir Windows auch was dazu sagen kann...
Delphi-Quellcode:
Cmd Variable hat bei mir vom Menupunkt "Eigenschaften" immer den Wert 20. (Also 20-1 = 19)
procedure TMain.InvokeContextMenu(const Owner: TWinControl; const Path: String;
const X, Y: Integer); var Item: Integer; DeskFolder, Folder: IShellFolder; Eaten, Attributes: ULONG; pIdl, FolderpIdl: PItemIDList; ContextMenu: IContextMenu; ContextMenu2: IContextMenu2; Menu: HMENU; Pos: TPoint; Cmd: DWORD; CommandInfo: TCMInvokeCommandInfo; begin OleCheck(SHGetDesktopFolder(DeskFolder)); Attributes := 0; OleCheck(DeskFolder.ParseDisplayName(Handle, nil, PWideChar(WideString(ExtractFilePath(Path))), Eaten, FolderpIdl, Attributes)); OleCheck(DeskFolder.BindToObject(FolderpIdl, nil, IID_IShellFolder, Folder)); CoTaskMemFree(FolderpIdl); Attributes := 0; (* An dieser Stelle kommt Windows mit meiner Anfrage für Wurzelpfade nicht mehr weiter. ExtractFileName(Path) hab ich mit 'C', 'C:', 'C:\' ausgetauscht um halt das Wurzelverzeichniss zu erhalten. Das mag der so gar nicht als Wert haben wollen. Entweder kommt ein Fehlerfenster mit Inhalt: "Falscher Parameter" oder "Das System kann die angegebene Datei nicht finden. *) OleCheck(Folder.ParseDisplayName(INVALID_HANDLE_VALUE, nil, PWideChar(WideString(ExtractFileName(Path))), Eaten, PIDL, Attributes)); OleCheck(Folder.GetUIObjectOf(Handle, 1, pIdl, IID_IContextMenu, nil, ContextMenu)); CoTaskMemFree(pIdl); Menu := CreatePopupMenu; try OleCheck(ContextMenu.QueryContextMenu(Menu, 0, 1, $7FFF, CMF_EXPLORE)); ContextMenu.QueryInterface(IID_IContextMenu2, ContextMenu2); try Pos.X := X; Pos.Y := Y; Winapi.Windows.ClientToScreen(Owner.Handle, Pos); Bool(Cmd) := TrackPopupMenu(Menu, TPM_LEFTBUTTON or TPM_RIGHTBUTTON or TPM_RETURNCMD, Pos.X, Pos.Y, 0, Handle, nil); finally ContextMenu2 := nil; end; if Bool(Cmd) then begin FillChar(CommandInfo, SizeOf(CommandInfo), 0); CommandInfo.cbSize := SizeOf(CommandInfo); CommandInfo.hwnd := Handle; CommandInfo.lpVerb := PAnsiChar(MakeIntResource(Cmd - 1)); CommandInfo.nShow := SW_SHOWNORMAL; OleCheck(ContextMenu.InvokeCommand(CommandInfo)); end; finally DestroyMenu(Menu); end; end; Anbei noch mal ein aktuelleres Kompilat wo nun auch ein Menu gemalt wird wenn man nichts ausgewählt hat. Der obige Code ist dort verbaut. Animationscode wurde entfernt, Schattencode betrifft nur meine Anwendung (DropShadow). Die Fotos, das mit "Falscher Parameter" entstammt dem obigen Code, das mit dem bösen Fehler entstammt den alten Code wenn ich meine Sicherheitsabfragen entferne. |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Aus Interesse hab ich gestern deinen Code übernommen, etwas abgeändert, und damit rumgespielt. Wahrscheinlich kannst du auf die ganze relative Pfad-Geschichte - und damit die doppelte IShellFolder-Variable - verzichten, denn MS schreibt zu
![]() Zitat:
PS: Übrigens kannst du auf die Variablen Eaten und Attributes verzichten, wenn du stattdessen
Delphi-Quellcode:
als Parameter reingibst (sofern du deren Werte nicht benötigst).
Cardinal(nil^)
Grüße Dalai |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Bloß keine falsche Bescheidenheit, selbst wenn mein Eigentliches Problem immer noch da ist hast Du mir dennoch an anderer Stelle super weitergeholfen (Animation) und Tipps mit Umgang!
Ach ich liebe das Forum :kiss: Deine Anregung den "DeskFolder" nicht zu nutzen, da komme ich gerade noch nicht ganz klar. So wie ich die MS-Docs da verstanden hatte leiten sich alle PIDLs davon ab, was ja auch funktioniert hat. Vielleicht habe ich Dich da auch missverstanden. Wenn es keine Umstände bereitet, könntest Du mir bitte Deine Änderung zeigen? Die ungenutzten Variablen bleiben ungenutzt, soll heißen auf "Cardinal(nil^)" werde ich umstellen. Dankeschön! |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Zitat:
Ich hoffe, das war ausreichend klar erklärt. In meinen Änderungen hab ich sozusagen komplett auf die Variable Folder verzichtet (zum Test erstmal nur im Falle/Abschnitt des "Failsafes") und stattdessen DeskFolder verwendet. Grüße Dalai |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Joah, die zweite, tiefere, andere, whatever :-] Erklärung hat mich erleuchtet, ich hatte verkehrt herum gedacht.
Ich werde es mal durchtesten wie Du beschrieben hast bzw eine dritte Variante die mir gerade beim Lesen/Schreiben in den Sinn gekommen ist. Lösen wird was ich gerade im Hinterstübchen habe auch nicht mein Problem, aber der Gedanke Ballast loszuwerden ist immer Lobenswert :) |
AW: windows eigenschaften-dialog für datenträger anzeigen lassen
Was ich vor einiger Zeit noch sagen wollte, und mir grad wieder einfiel: Vielleicht hat Christian Ghisler, der Autor des Total Commander, einen Ansatz für dich oder kann sagen, woran es klemmt. Schließlich funktioniert das Aufrufen der Eigenschaften im TC auch bei Laufwerken. Du kannst ihm z.B. eine Mail schreiben an support [bei] ghisler [punkt] com. Das hier ist zwar kein Supportfall, aber ich weiß aus eigener Erfahrung, dass er sich selbst für andere Dinge Zeit nimmt, auch wenn es manchmal etwas dauern kann.
Grüße Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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