![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить контекстное меню отдельного расширения оболочки
Context © (2008-06-30 13:34:00)Добрый день !
Есть программа, устанавливающая свое подменю в меню эксплорера. Задача - получить это самое подменю для диска C и выполнить один из его пунктов.
Context (2008-07-01 13:05:00) [1]>clickmaker © (30.06.08 13:46) [1]
Ну, одним IContextMenu(2) тут не обойдешься, насколько я понимаю.
Вот кусок кода:
CoInit := CoInitialize(nil);
try
OleCheck(SHGetDesktopFolder(Desktop));
OleCheck(SHGetSpecialFolderLocation(0, CSIDL_DRIVES, PathPIDL));
OleCheck(Desktop.BindToObject(PathPIDL, nil, IID_IShellFolder, Pointer(ShellFolder)));
ShellFolder.ParseDisplayName(WC.Handle, nil, StringToOleStr(Path),
pchEaten, FilePIDL[0], Attr);
OleCheck(CoCreateInstance(StringToGUID('{969223c0-26aa-11d0-90ee-444553540000}'), nil, CLSCTX_INPROC_SERVER, IUnknown, I));
OleCheck(I.QueryInterface(IID_IShellExtInit, SEI));
OleCheck(SEI.Initialize(FilePIDL[0], nil, 0));
OleCheck(I.QueryInterface(IID_IContextMenu, ICMenu));
ICMenu2 := nil;
ShellContextMenu := CreatePopupMenu;
if Succeeded(ICMenu.QueryContextMenu(ShellContextMenu, 0,
1, $7FFF, CMF_EXPLORE)) and
Succeeded(ICMenu.QueryInterface(IContextMenu2, ICMenu2)) then
CallbackWindow := CreateMenuCallbackWnd(ICMenu2);
try
PopupMenuResult := TrackPopupMenu(ShellContextMenu, TPM_LEFTALIGN or TPM_LEFTBUTTON
or TPM_RIGHTBUTTON or TPM_RETURNCMD,
MousePoint.X, MousePoint.Y, 0, CallbackWindow, nil);
finally
ICMenu2 := nil;
end;
До TrackPopupMenu доходит без ошибок, но меню не выводит.
clickmaker (2008-06-30 13:46:00) [2]через IContextMenu, видимо