![]() |
Kontextmenü des Explorers anzeigen
Hallo,
ich finde bei meinen Recherchen leider immer nur das Thema, wie man Einträge in das Kontextmenü des Explorers integriert. Ich suche aber eine Möglichkeit das Explorer Kontextmenü aus meiner eigenen Anwendung heraus an der aktuellen Mausposition anzuzeigen. Hat jemand einen Tipp, wie die entsprechende WinAPI Funktion lauten könnte? Den Rest finde ich dann schon heraus, nur leider fehlt mir bisher jeglicher Anhaltspunkt. Exceeder |
Re: Kontextmenü des Explorers anzeigen
irgendwo in der DP dürften sich auch noch die Originalcodes rumliegen, aus welchen ich dieses mal erstellt hatte
Delphi-Quellcode:
als HWnd z.B. das Handle deiner Form
Procedure ContextMenuForFile(Wnd: HWND; FileName: String; X, Y: Integer);
Var ContextMenu: IContextMenu; Popup: HMENU; CmdInfo: TCMInvokeCommandInfo; PIDL: PItemIDList; ShellFolder: IShellFolder; Eaten, Attr: LongWord; FileDir: String; Begin If SHGetDesktopFolder(ShellFolder) <> NO_ERROR Then Exit; FileDir := ExtractFileDir(FileName); FileName := ExtractFileName(FileName); If (FileDir <> '') and ((ShellFolder.ParseDisplayName(Wnd, nil, PChar(FileDir), Eaten, PIDL, Attr) <> NO_ERROR) or (ShellFolder.BindToObject(PIDL, nil, IID_IShellFolder, Pointer(ShellFolder)) <> NO_ERROR)) or (ShellFolder.ParseDisplayName(Wnd, nil, PChar(FileName), Eaten, PIDL, Attr) <> NO_ERROR) or (ShellFolder.GetUIObjectOf(Wnd, 1, PIDL, IID_IContextMenu, nil, Pointer(ContextMenu)) <> NO_ERROR) Then Exit; Popup := CreatePopUpMenu; If Popup = 0 Then Exit; Try If Failed(ContextMenu.QueryContextMenu(Popup, 0, 1, $7FFF, CMF_NORMAL)) Then Exit; FillChar(CmdInfo, Sizeof(TCMInvokeCommandInfo), 0); CmdInfo.cbSize := SizeOf(TCMInvokeCommandInfo); CmdInfo.lpVerb := PAnsiChar(TrackPopupMenuEx(Popup, TPM_LEFTALIGN or TPM_RETURNCMD or TPM_RIGHTBUTTON or TPM_HORIZONTAL or TPM_VERTICAL, X, Y, Wnd, nil)) - 1; CmdInfo.nShow := SW_SHOWNORMAL; If CmdInfo.lpVerb = PAnsiChar(-1) Then Exit; ContextMenu.InvokeCommand(CmdInfo); Finally DestroyMenu(Popup); End; End; |
Re: Kontextmenü des Explorers anzeigen
Vielleicht interessiert dich auch
![]() |
Re: Kontextmenü des Explorers anzeigen
Danke ihr beiden. Funktioniert einwandfrei. Sogar vom TrayIcon aus, wenn man als Windows Handle einfach das Application.Handle übergibt.
Exceeder |
Re: Kontextmenü des Explorers anzeigen
Zitat:
was aber nicht geht und ich weiß auch nicht wieso, ist "öffnen mit", also wenn dort schon Anwendungen als Untermenü drinstehn, werden diese zwar angezeigt und lassen sich auch auswählen, aber es wird immer der "öffnen mit..."-Dialog angezeigt :? |
Re: Kontextmenü des Explorers anzeigen
Also wenn es ein paar Euro kosten darf, sind die
![]() Sehr schön finde ich auch die Möglichkeit, ein Delphi TPopupMenu anzugeben, dass dann mit dem Explorer Kontextmenü zusammen angezeigt wird. So kann man leicht eigene, programmspezifische Funktionen dem Kontextmenü hinzufügen, und steht nicht for dem "entweder / oder" Problem. ShellTree und ShellList und weitere visuelle Controls sind auch dabei und lassen den Preis fair erscheinen, aber die brauchst Du wohl nicht. |
Re: Kontextmenü des Explorers anzeigen
Einträge einzufügen, zu ändern oder zu löschen dürfte nicht das Problem darstellen.
Wenn ich das richtig versteh, dann müßte man einfach nur zwischen dem Holen/Laden des Menüs ContextMenu.QueryContextMenu und dem Anzeigen ContextMenu.InvokeCommand(CmdInfo); diese Änderungen vornehmen :angel2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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