Расширение оболочки Windows с C#

Я желал записать, простые окна окружают расширение для добавления к контекстному меню, и C# является языком я большая часть использования эти дни. Действительно ли это - достойный выбор для расширения оболочки? До действительно ли интерфейсов легко получить с ним? Есть ли дополнительные издержки, которые заставляют меню быть медленнее для появления?

У кого-либо есть хорошие указатели для начала работы?

37
задан Pete McKinney 3 February 2010 в 18:54
поделиться

2 ответа

Да. Если вы не знаете, как следует обрабатывать исключение, вам лучше бросить его, а не просто проглотить его и распечатать след стека (или, что еще хуже, абсолютно ничего не делать).

Это поможет предотвратить некоторые чрезвычайно трудные для отладки ошибки в дальнейшем.

-121--2265250-

Синктактический сахар мой друг... компилятор преобразует вызов .HasValue в код, который не вызывает исключения: -)

-121--2182192-

Сообщение Рэймонда: Не записывайте расширения оболочки в процессе в управляемый код .


Недавнее продолжение: Теперь, когда версия 4 платформы .NET Framework поддерживает параллельное выполнение процессов, можно ли теперь записывать расширения оболочки в управляемый код?

Суть в том, что нет, это не нормально:

Было пересмотрено Руководство по внедрению внутрипроцессных расширений , и оно продолжает рекомендацию не записывать расширения оболочки и расширения Internet Explorer (и другие типы внутрипроцессных расширений) в управляемый код, даже если вы используете версию 4 или выше.

26
ответ дан 27 November 2019 в 04:52
поделиться

Рискуя выглядеть глупо, EZShellExtensions - прекрасная (но не бесплатная) платформа для разработки расширений оболочки на C #. . Вы можете написать простое расширение контекстного меню примерно с 20 строками кода и, что самое главное, никогда не придется возиться с COM-интерфейсами.Моя компания использует его (и их структуру расширения пространства имен) для набора расширений, которые в настоящее время используются десятками тысяч клиентов, и, чего бы это ни стоило, у нас никогда не было проблем с конфликтом CLR, описанным выше.

Вот небольшой пример, демонстрирующий, насколько это просто:

[Guid("00000000-0000-0000-0000-000000000000"), ComVisible(true)]
[TargetExtension(".txt", true)]
public class SampleExtension : ContextMenuExtension
{
   protected override void OnGetMenuItems(GetMenuitemsEventArgs e)
   {
      e.Menu.AddItem("Sample Extension", "sampleverb", "Status/help text");
   }

   protected override bool OnExecuteMenuItem(ExecuteItemEventArgs e)
   {
      if (e.MenuItem.Verb == "sampleverb")
         ; // logic
      return true;
   }

   [ComRegisterFunction]
   public static void Register(Type t)
   {
      ContextMenuExtension.RegisterExtension(typeof(SampleExtension));
   }

   [ComUnregisterFunction]
   public static void UnRegister(Type t)
   {
      ContextMenuExtension.UnRegisterExtension(typeof(SampleExtension));
   }
}
14
ответ дан 27 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: