Контекстное меню корзины
Модератор: motyara
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контекстное меню корзины
Разыскивается код на Delphi/C++Builder, вызывающий контекстное меню корзины:
Буду очень признателен за конкретную помощь в этом вопросе.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Охотник за багами
- Сообщения: 21
- Зарегистрирован: Чт фев 26, 2009 11:04 pm
Re: Контекстное меню корзины
Я покопался вчера получилось вывести контектсное меню "внутри" корзины, когда кликаешь по файлу. Наверное примерно в этом направлении и следует копать. Но вариант 2: сделать своё собственное меню и в нем сделать вызов команд типа Очистить корзину, открыть свойства корзины или ее содержимое. Для этого есть исходники.
Код: Выделить всё
код удалил. глядите постами ниже
Последний раз редактировалось admini Ср дек 02, 2009 10:56 pm, всего редактировалось 2 раза.
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
Это слишком уж приблизительное направление копания... честно говоря уже несколько программистов стараясь найти решение этой небольшой проблемы сломали лопаты пытаясь копать куда-то в этом направлении, я тоже уже перепробовал изрядное количество вариантов (и конечно же в поисковой системе полазил не пару минут). Казалось бы такая линейная функция, а тем не менее не так она проста как хотелось бы...
-
- Охотник за багами
- Сообщения: 21
- Зарегистрирован: Чт фев 26, 2009 11:04 pm
Re: Контекстное меню корзины
ну оказывается почти угадал)))
вот полностью рабочий код:
вот полностью рабочий код:
Код: Выделить всё
uses
ActiveX, ShlObj;
procedure ShowRecycleBinContextMenu(hWindow: THandle; pt: TPoint);
const
MIN_ID = 1;
MAX_ID = $7fff;
var
desktopFolder: IShellFolder;
recycleBinIDL: PItemIDList;
contextMenu: IContextMenu;
emptyMenu: HMENU;
idCommand: Integer;
commandInfo: TCMInvokeCommandInfo;
begin
//CoInitialize(nil);
SHGetDesktopFolder(desktopFolder);
SHGetSpecialFolderLocation(0, CSIDL_BITBUCKET, recycleBinIDL);
desktopFolder.GetUIObjectOf(0, 1, recycleBinIDL, IID_IContextMenu, nil, contextMenu);
emptyMenu := CreatePopupMenu();
contextMenu.QueryContextMenu(emptyMenu, 0, MIN_ID, MAX_ID, CMF_EXPLORE);
idCommand := Integer(TrackPopupMenu(
emptyMenu, TPM_RETURNCMD or TPM_LEFTALIGN, pt.X, pt.Y, 0, hWindow, nil));
if (idCommand >= MIN_ID) and (idCommand <= MAX_ID) then
begin
FillChar(commandInfo, SizeOf(commandInfo), 0);
with commandInfo do
begin
cbSize := SizeOf(commandInfo);
hwnd := hWindow;
nShow := SW_SHOWNORMAL;
lpVerb := PChar(idCommand - MIN_ID);
end;
contextMenu.InvokeCommand(commandInfo);
end;
CoTaskMemFree(recycleBinIDL);
DestroyMenu(emptyMenu);
//CoUninitialize();
end;
...
ShowRecycleBinContextMenu(Handle, Point(Left + 100, Top + 100));
...
-
- Автор программы
- Сообщения: 3432
- Зарегистрирован: Пт окт 12, 2007 3:26 pm
Действительно, код работает именно так как и нужно было. Большое спасибо за помощь в этом вопросе, начиная со следующего билда программа наконец обретет контекстное меню корзины, всплывающее при нажатии правой кнопкой мыши по функциональной клавише "F8 Удалить". Я уже и не предполагал что этот алгоритм существует...