Вызов контекстного меню проводника

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Вызов контекстного меню проводника

Сообщение t116 » 08.11.2007 (Чт) 3:00

Можно ли вызвать сабж в VB?

Например, мне надо чтобы при клике по форме появлялось контекстное меню файла "C:\picture.jpg".

Есть API-функция для этого? Как это сделать, подскажите.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.11.2007 (Чт) 8:32

Если мне не изменяет память этот вопрос поднимался в пределах последних двух месяцев. Стоит поискать, вроде бы даже какой-то результат был
Весь мир матрица, а мы в нем потоки байтов!

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 08.11.2007 (Чт) 22:59

Поиск по ключевым словам вывел меня на темы, в которых обсуждалась возможность внесения своей программы в контекстное меню. А мне надо его вызывать в своей программе.

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 08.11.2007 (Чт) 23:01

Я тоже ничего не нашёл :roll:

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 08.11.2007 (Чт) 23:02

Может как вариант собирать инфу в реестре и делать своё меню?

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 08.11.2007 (Чт) 23:06

NIC писал(а):Может как вариант собирать инфу в реестре и делать своё меню?


нет

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 08.11.2007 (Чт) 23:49

Total Commander так делает.(вроде)

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 19.11.2007 (Пн) 21:16

Вот нашел, только вызов через DLL.
Вложения
ExplorerMenu.rar
(15.16 Кб) Скачиваний: 108
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 19.11.2007 (Пн) 22:15

Благодарен. :wink:

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 19.11.2007 (Пн) 23:14

А теперь вопрос: как узнать что вызывает эта DLL? :) Вероятно, кто знает asm, сможет перевести ее в VB6 (с помощью дебаггера). ASM-кодеры, HELP! :oops:
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 19.11.2007 (Пн) 23:22

Похоже она сама всё делает

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 20.11.2007 (Вт) 1:44

Arcady_XQST писал(а):Вот нашел, только вызов через DLL.


Сенкс.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 20.11.2007 (Вт) 2:48

Есть пример на Дельфи, как это сделать, без лишних длл. Погляжу постараюсь на вб перевести, выложу
Подпись проходит рефакторинг

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 20.11.2007 (Вт) 2:51

А можно прям на делфи выложить? :roll:

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 20.11.2007 (Вт) 3:19

Там в принципе и выкладывать-то нечего. В стандартной поставке Delphi есть пример Virtual ListView. В принципе программка чем-то напоминает проводник, но не хватает контекстного меню. Приделать его можно таким образом:
Код: Выделить всё
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
  ContextMenu : IContextMenu;
  menu : HMENU;
begin
  FIShellFolder.GetUIObjectOf(Handle, 1,
  ShellItem(ListView.Selected.index).ID,
  IID_IContextMenu, nil, ContextMenu);
  menu := CreatePopupMenu();
  ContextMenu.QueryContextMenu(menu, 0, 1, $7FFF, CMF_EXPLORE);
  TrackPopupMenu(menu,
  TPM_LEFTALIGN or TPM_LEFTBUTTON or TPM_RIGHTBUTTON or TPM_RETURNCMD,
  Mouse.CursorPos.x, Mouse.CursorPos.y, 0, Handle, nil);
  DestroyMenu(menu);
end;

На всякий случай выложу рабочий код ниже.
Вложения
VirtualListview.rar
(221 Кб) Скачиваний: 79
Подпись проходит рефакторинг

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 20.11.2007 (Вт) 3:28

Спасибо :wink:

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 20.11.2007 (Вт) 4:14

Пожалуйста, если интересно ещё, то в том же Delphi 7 есть набор компонентов ShellCtrls, там тоже вызывается контекстное меню проводника. Если есть желание можно поковырять их.
Подпись проходит рефакторинг

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 21.11.2007 (Ср) 23:56

Может пример VirtualListview.rar у меня глючит, но меню вызывается, но не работает! :?
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Re: Вызов контекстного меню проводника

Сообщение Lumen » 22.11.2007 (Чт) 4:01

Хм, действительно не работает... Надо разобраться почему...
Но ведь с другой стороны, топикстартеру надо было только показать меню, а не заставить его работать :D
t116 писал(а):Например, мне надо чтобы при клике по форме появлялось контекстное меню файла "C:\picture.jpg".

Как вариант можно попробовать по реестру инфу собрать и вызова TrackPopupMenu выполнять нужную команду самостоятельно. Или поковыряю исходники ShellCtrls посмотрю как там реализовано. Там менюшка точно работает.
Подпись проходит рефакторинг

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 22.11.2007 (Чт) 22:20

А вот здесь хороший пример. Блин, сколько всего надо-то... :D
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList  
cron