Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1

Добавить пункт контекстного меню через реестр

06.12.2012, 00:01. Показов 1866. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем привет. Есть следующий код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static void Main(string[] args)
        {
            string menu_name = @".MP3\shell\NewMenuOption";
            string command = @".MP3\shell\NewMenuOption\command";
            RegistryKey regmenu = null;
            RegistryKey regcmd = null;
            try
            {
                regmenu = Registry.ClassesRoot.CreateSubKey(menu_name);
                if (regmenu != null)
                    regmenu.SetValue("", "новый пункт");
                regcmd = Registry.ClassesRoot.CreateSubKey(command);
                if (regcmd != null)
                    regcmd.SetValue("", @"I:\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe %1");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                if (regmenu != null)
                    regmenu.Close();
                if (regcmd != null)
                    regcmd.Close();
            }
        }
Я пытаюсь добавить пункт меню для файлов mp3 формата, но почему то пункт не добавляется... Пробовал добавлять для другого формата, работало хорошо. Так в чём проблема? Почему не добавляется пункт в меню? Заранее спасибо.

Добавлено через 1 час 49 минут
Так, вроде разобрался, у меня на компе установлен AIMP и в значении по умолчанию было установлено значение AIMP.mp3, поэтому пункт меню надо добавлять там... Теперь появился другой вопрос. Когда я выделяю несколько файлов mp3 формата, то на каждый файл запускается отдельная копия программы, как сделать чтобы пути к каждому из файлов передавались массивом в моё приложение? Ведь метод Main консольного приложения принимает массив аргументов:
C#
1
static void Main(string[] args)
P.S. - я в реестре записываю путь к программе так: "I:\ConsoleApplication1\ConsoleApplicati on1\bin\Debug\ConsoleApplication1.exe %1", может вместо %1 надо написать что-нибудь другое? И где можно почитать об этом?

Добавлено через 1 час 4 минуты
Никто не знает как сделать чтобы при нажатии на пункте меню, когда выделены несколько файлов, не открывалось несколько экземпляров приложения, а передавались пути к файлам в текущее приложение? Может кучеряво объяснил? Помогите пожалуйста.
P.S. - надо использовать SendMessage?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2012, 00:01
Ответы с готовыми решениями:

Программно добавить/удалить пункт контекстного меню
Как програмно добавить/удалить пункту контекстного меню ?

Убрать пункт контекстного меню
Доброго времени суток. Установил QTTabBar и как следствие появился пункт в контекстном меню "настроить папку". Хочу от него...

Пропал пункт контекстного меню
Доброго времени суток. Помогите, кто знает: после одной из чисток реестра у меня пропал пункт контекстного меню Создать--Текстовый файл....

5
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.12.2012, 01:11
Цитата Сообщение от FakiR Посмотреть сообщение
P.S. - надо использовать SendMessage?
Да, но не обязательно. Можно использовать MemoryMappedFiles, NamedPipes, TCP, и это еще не весь список, несколько вариантов еще точно найдется.

Вот обсуждалось с SendMessage и WM_COPYDATA.
1
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
06.12.2012, 02:02  [ТС]
Вот в консольном приложении метод Main принимает аргумент, в котором содержится путь к файлу (параметр который принимает приложение), а в WinForms как получить путь к файлу?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.12.2012, 04:30
FakiR, точно также, просто изменить объявление функции.
C#
1
void Main() { }
C#
1
int Main() { return 0; }
C#
1
void Main( string[] args ) { }
C#
1
int Main( string[] args ) { return 0; }
1
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
06.12.2012, 11:33
Т.е. в стандартных классах атрибуты не прописываются, скажем в Application? нужно писать что то типа:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static string[] arr;
static public string[] CommandLineArgs
{
         get { return arr; }
         set { arr = value; }
}
[STAThread]
static void Main(string[] args)
{
       arr = args;
       .............
}
 
//а потом из программы просто обращаясь
string[] ar = Program.CommandLineArgs; //получать значения
?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.12.2012, 14:36
zelen, Environment.GetCommandLineArgs
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2012, 14:36
Помогаю со студенческими работами здесь

2013 Исчез пункт из контекстного меню
Здрям! Был офис 2010, х86. Был макрос, который работал от кнопки: Private WithEvents ConfirmAppointment As Office.CommandBarButton ...

Добавления пункт контекстного меню windows
я прочитал несколько статей/тем, из которых ясно, что для добавления пункт контекстного меню windows необходимо играть с HKEY_CLASSES_ROOT....

Спрятать пункт контекстного меню под Shift
Доброго времени суток. Как спрятать пункты контекстного меню Скопировать в Облако@mail.ru Переместить в Облако@mail.ru Чтобы они...

Как удалить пункт из контекстного меню корзины?
Доброго времени суток. Установил себе аваст. Соответственно в контекстном меню корзины появился пункт "Сканувати дані кошика за...

Вызвать пункт контекстного меню со своими аргументами
Доброго времени суток! Не совсем относится к C++. Возникла такая ситуация, как получить команду, которая вызывает контекстное меню?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru