为了账号安全,请及时绑定邮箱和手机立即绑定

Windows Shell扩展与C#

Windows Shell扩展与C#

C#
呼唤远方 2019-11-28 14:17:41
我想编写一个简单的Windows Shell扩展以添加到上下文菜单中,而C#是这些天我最常用的语言。它是Shell扩展的不错选择吗?接口易于使用吗?是否有其他额外的开销导致菜单弹出的速度较慢?有人有很好的入门指南吗?
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

Raymond的文章:不要在托管代码中编写进程内Shell扩展。


最近的后续工作:.NET Framework版本4支持进程内并行运行时,现在可以在托管代码中编写Shell扩展了吗?


底线是,不,这不行:


已修订了实现进程内扩展的指南,并且继续建议不要在托管代码中编写shell扩展和Internet Explorer扩展(以及其他类型的进程内扩展),即使您使用的是版本4或更高版本。


查看完整回答
反对 回复 2019-11-28
?
12345678_0001

TA贡献1802条经验 获得超5个赞

冒着风险,EZShellExtensions是用C#开发Shell扩展的绝佳(但非免费)框架。您可以编写一个简单的上下文菜单扩展,其中包含约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));

   }

}


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 764 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信