PDA

Просмотр полной версии : Дескриптор меню



OTELLO
11.12.2004, 12:04
Народ, помогите плиз, как можно получить дескриптор контекстного меню рабочего стола?

Romeo
13.12.2004, 14:48
IShellFolderPtr spDesktop;
SHGetDesktopFolder(spDesktop);

IContextMenu spMenu;
spDesktop->CreateViewObject(NULL, IID_IContextMenu, (void **)&spMenu);

// далее можно манипулировать этим контекстным меню

P.S. Прямого способа получения хэндла не существует по той причине, что меню всякий раз заново создаётся перед тем, как показаться. Единственный выход - работать с ним через Shell.

OTELLO
13.12.2004, 18:06
Спасибки что откликнулся на просьбу, но не мог бы ты на Дельфе код написать, я не знаю Си =(( Или просто суть указать, я далее сам напишу. Заранее Спасиб!..

Romeo
13.12.2004, 18:50
Shell везде одинаковый так же, как и API. Ну предположим в Delphi нет смартпоинтеров (в чём я сомневаюсь), тогда код будет выглядить следующим образом:


var
pDesktop : ^IShellFolder;
pMenu: ^IContextMenu;

...

SHGetDesktopFolder(pDesktop);
^pDesktop.CreateViewObject(NULL, IID_IContextMenu, @pMenu);

...

{некие манипуляции}

...

pMenu->Release;
pDesktop->Release;

P.S. Могу и ошибаться: ни разу не писал под COM на Delphi. Да и вообще советую открыть стандартный делфийский help и найти там описание COM-интнерфейса IShellFolder.

Eugie
16.12.2004, 13:59
Ну предположим в Delphi нет смартпоинтеров (в чём я сомневаюсь)

Нет smart pointers, подтверждаю


var
pDesktop : ^IShellFolder;
pMenu: ^IContextMenu;


Указатели не нужны, соотв.параметры просто объявлены как var