Вложенное контекстное меню

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Вложенное контекстное меню

Сообщение vepr1985 » 02.12.2009 (Ср) 14:02

Добрый день. У меня такая задача:надо чтобы по команде(н-р клик)
в контекстное меню файлов(любое расширение) встраивалось моё контекстное меню
Как винрар или 7-zip. Только на несколько уровней вложенности - 3.Я пока только 2 сделал
На основании этих статей
1)http://www.theserverside.net/articles/showarticle.tss?id=ShellExtensions
2)http://www.gotdotnet.ru/blogs/gaidar/6487/

у меня работает только на моей машине. На других меню не появляется. Подскажите в чём дело?
Framework одинаковый, реестр смотрел - записи идут
Я не идиот, и это не мои слова!
Тема не решена и не закрыта
Последний раз редактировалось vepr1985 02.12.2009 (Ср) 14:28, всего редактировалось 2 раз(а).

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Вложенное контекстное меню

Сообщение Денис » 02.12.2009 (Ср) 14:18

vepr1985 писал(а):Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!????


И такой самокритичный финал!
Изображение
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 02.12.2009 (Ср) 14:25

ну так продолжим. В чём у меня косяк может быть?
(про идиота:видимо что-то сучайно скопирил)

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 02.12.2009 (Ср) 15:02

Думал может что-то в реестр не прописывается - так всё вроде на месте

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4254
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Вложенное контекстное меню

Сообщение iGrok » 02.12.2009 (Ср) 15:52

Про идиота - нормальный человек столько восклицательных(вопросительных) знаков не поставит.

А вот по теме - у тебя com-сервер то на другом компе регистрируется? Или ты только ссылки в реестр пишешь?
label:
cli
jmp label

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 02.12.2009 (Ср) 17:10

Да я не обиделся на идиота - просто паниковать стал,не могу решение найти, нигде не пишут до конца про это. На русском по-крайней мере.
По теме: не знаю - видимо нет.
А какой командой его регистрировать? Моя прога просто вызывает dll

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 02.12.2009 (Ср) 17:17

const string clsid = "{6B3A1F0C-C382-40d6-AA13-33B0AB46EEAA}";
string guid = "{6B3A1F0C-C382-40d6-AA13-33B0AB46EEAA}";
string pathDLL = Application.StartupPath+@"\MENU.dll";
private void button1_Click(object sender, EventArgs e)
{
// Регистрируем COM и dll
Assembly mAsm = Assembly.LoadFrom(pathDLL);

try
{
RegistrationServices mReg = new RegistrationServices();
mReg.RegisterAssembly(mAsm, 0);
//RegistryKey key;
//key = Registry.LocalMachine.OpenSubKey(
//@"Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks", true);
//key.SetValue(clsid, "SimpleExtension");
//key.Close();
}
catch(Exception ex)
{
MessageBox.Show (ex.Message);
}
}

private void button2_Click(object sender, EventArgs e)
{
try
{
// Отменяем регистрацию COM и dll
Assembly mAsm = Assembly.LoadFile(pathDLL);
RegistrationServices mReg = new RegistrationServices();
mReg.UnregisterAssembly(mAsm);
//RegistryKey key;
//key = Registry.LocalMachine.OpenSubKey(
//@"Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks", true);
//key.DeleteValue (clsid);
//key.Close();
}
catch(Exception ex)
{
MessageBox.Show (ex.Message);
}
}

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 02.12.2009 (Ср) 17:47

а регистрация в самой dll записана
Код: Выделить всё
#region Registration
      [System.Runtime.InteropServices.ComRegisterFunctionAttribute()]
      static void DLLRegisterServer(String str1)
      {
         try
         {
            // For Winnt set me as an approved shellex
            RegistryKey root;
            RegistryKey rk;
            root = Registry.LocalMachine;
            
                rk = root.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", true);
                //rk.SetValue(guid.ToString(), "BatchResults shell extension");
                rk.SetValue(guid, "FrontLine");//.ToString(), "FrontLine");
                //rk.SetValue(str1, "FrontLine");               
                rk.Close();

            // Set "Folder\\shellex\\ContextMenuHandlers\\BatchResults" regkey to my guid
            root = Registry.ClassesRoot;
                //rk = root.CreateSubKey("BatchResultsFile\\shellex\\ContextMenuHandlers\\BatchResults");
                rk = root.CreateSubKey("*\\shellex\\ContextMenuHandlers\\FrontLine");// новое
                rk = root.OpenSubKey("*\\shellex\\ContextMenuHandlers\\FrontLine", true);// новое
                rk.SetValue("", guid);//.ToString());//rk.SetValue("", str1);
                rk.Close();
         }
         catch(Exception e)
         {
            System.Console.WriteLine(e.ToString());
         }
      }

      [System.Runtime.InteropServices.ComUnregisterFunctionAttribute()]
      static void DllUnregisterServer(String str1)
      {
         try
         {
            RegistryKey root;
            RegistryKey rk;

            // Remove ShellExtenstions registration
            root = Registry.LocalMachine;
            rk = root.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", true);
                rk.DeleteValue(guid);//rk.DeleteValue(str1);
            rk.Close();
            // Delete  regkey
            root = Registry.ClassesRoot;
                //root.DeleteSubKey("BatchResultsFile\\shellex\\ContextMenuHandlers\\BatchResults");
                root.DeleteSubKey("*\\ShellEx\\ContextMenuHandlers\\FrontLine");
         }
         catch(Exception e)
         {
            System.Console.WriteLine(e.ToString());
         }
      }
      #endregion

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 03.12.2009 (Чт) 11:57

Получается я не регистрирую сам COM сервер?

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 03.12.2009 (Чт) 15:53

Кто-нибудь ответит?

vepr1985
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 02.12.2009 (Ср) 13:34

Re: Вложенное контекстное меню

Сообщение vepr1985 » 08.12.2009 (Вт) 17:32

попробовал regsvr32 - не получилось ругается на отсутствие точки входа


Вернуться в C#

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

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

    TopList