Я искал сеть до последнего угла и не могу найти решение этой проблемы.
Я пытаюсь получить фоновое контекстное меню, отображаемое в проводнике Windows, но не могу сделать проклятое «НОВОЕ» подменю для заполнения его записей. Я не могу понять, почему он остается пустым.
Ища это, я нашел предложение, что CLSID_NewMenu должен быть создан вручную, но этот код также возвращает странную ошибку, которую я не могу понять.
{SHParseDisplayName(PChar('G:\copytest\src\'), nil, ParentFolderPIDL, 0, dwAttributes);}
hr := CoCreateInstance(CLSID_NewMenu,nil,CLSCTX_INPROC_SERVER,IID_IShellExtInit,ps);
hr := ps.Initialize(ParentFolderPIDL,lpdobj,0);
hr := ps.QueryInterface(IID_IContextMenu2,newContextMenu);
hr := newContextMenu.QueryContextMenu(Menu.Handle, 1, 1, 30000, CMF_NORMAL);
Showmessage(SysErrorMessage(GetLastError()));
Приведенный выше код возвращает 64 десятичного знака - «Доступно больше данных», что не имеет никакого смысла, так как данные не запрашиваются и буфер не передается - такая ошибка обычно возвращается при недостаточном размере буфера.
Приведенный выше код просто добавляет еще одно пустое подменю «Новое» в фоновое меню.
На самом деле оба пункта «Новый» (пункт меню) -> «Новый» (пункт подменю), который ничего не делает.
Пожалуйста, дайте мне знать, что я могу упустить, если у вас есть какие-либо подсказки, поскольку я схожу с ума от этой вещи.
Спасибо!