У меня есть приложение, которое перечисляет файлы, и я позволяю пользователю щелкнуть правой кнопкой мыши файл, и мое приложение показывает контекстное меню Windows для выбранного файла.
Я использую SHParseDisplayName
, чтобы получить pidl для имени файла. Затем я связываюсь с родительским объектом:
IntPtr pidlLast = IntPtr.Zero;
SHBindToParent(pidl, typeof(IShellFolder).GUID, out oShellFolder, out pidlLast);
После того, как у меня будет родитель, я могу получить контекстное меню:
IntPtr result = IntPtr.Zero;
IShellFolder shellFolder = (IShellFolder)oShellFolder;
shellFolder.GetUIObjectOf(windowHandle, (uint)pidls.Count,
pidls.ToArray(), typeof(IContextMenu).GUID, 0, out result);
Это прекрасно работает для 1 элемента или для элементов с одним и тем же родителем, но как мне отобразить контекстное меню для элементов с разными родителями?