Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Level 2
400 / 274 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
1

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

06.12.2012, 00:01. Показов 1314. Ответов 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\ConsoleApplication1\bin\Debug\Consol eApplication1.exe %1", может вместо %1 надо написать что-нибудь другое? И где можно почитать об этом?

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

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

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

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

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

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

Вот обсуждалось с SendMessage и WM_COPYDATA.
1
Level 2
400 / 274 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
06.12.2012, 02:02  [ТС] 3
Вот в консольном приложении метод Main принимает аргумент, в котором содержится путь к файлу (параметр который принимает приложение), а в WinForms как получить путь к файлу?
0
Почетный модератор
Эксперт .NET
8700 / 3652 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.12.2012, 04:30 4
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 5
Т.е. в стандартных классах атрибуты не прописываются, скажем в 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
8700 / 3652 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.12.2012, 14:36 6
zelen, Environment.GetCommandLineArgs
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2012, 14:36

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.