Все в порядке, кроме отсутствия подменю «Предоставить доступ».
[img]https://i.sstatic.net /Tp3fhUFJ.png[/img]
Любые другие подменю работают нормально и отображают подменю правильно, но не отображаются только подменю «Предоставить доступ». Показывает пустое подменю. Как я могу это исправить?
Я пытаюсь получить доступ к контекстному меню файла в Windows 11, используя следующий код: [code]#include #include #include #include #include #include #include #include
bool openShellContextMenuForObject(const std::wstring& path, int xPos, int yPos, void* parentWindow) { ITEMIDLIST* id = 0; std::wstring windowsPath = path; std::replace(windowsPath.begin(), windowsPath.end(), '/', '\\'); HRESULT result = SHParseDisplayName(windowsPath.c_str(), 0, &id, 0, 0); if (!SUCCEEDED(result) || !id) return false; //CItemIdListReleaser idReleaser(id);
IShellFolder* ifolder = 0;
LPCITEMIDLIST idChild = 0; result = SHBindToParent(id, IID_IShellFolder, (void**)&ifolder, &idChild); if (!SUCCEEDED(result) || !ifolder) return false; //CComInterfaceReleaser ifolderReleaser(ifolder);
IContextMenu* imenu = 0; result = ifolder->GetUIObjectOf((HWND)parentWindow, 1, (const ITEMIDLIST**)&idChild, IID_IContextMenu, 0, (void**)&imenu); if (!SUCCEEDED(result) || !ifolder) return false; //CComInterfaceReleaser menuReleaser(imenu);
HMENU hMenu = CreatePopupMenu(); if (!hMenu) return false;
if (SUCCEEDED(imenu->QueryContextMenu(hMenu, 0, 1, 0x7FFF, CMF_NORMAL))) { int iCmd = TrackPopupMenuEx(hMenu, TPM_RETURNCMD, xPos, yPos, (HWND)parentWindow, NULL);
return 0; } [/code] Все в порядке, кроме отсутствия подменю «Предоставить доступ». [img]https://i.sstatic.net /Tp3fhUFJ.png[/img]
Любые другие подменю работают нормально и отображают подменю правильно, но не отображаются только подменю «Предоставить доступ». Показывает пустое подменю. Как я могу это исправить?