当前位置: 首页 > news >正文

通过SharpShell快速实现Windows Shell扩展

在.NET 4引入了CLR in-process side-by-side特性后,我们也可以通过C#编写Windows Shell了。我们可以在微软的All-In-One Code Framework里面找到相关示例,在院子里也有几篇文章介绍它:

  1. Windows Shell扩展系列文章 1 - .NET 4 编写Windows Shell上下文菜单扩展
  2. Windows Shell扩展系列文章 2 - .NET 4为扩展的Windows Shell上下文菜单项添加位图图标

但是,研究过这些示例后便会发现:虽然用C#编写Shell扩展比用C++简单不少,但仍然比较繁琐,有许多需要注意的地方,一不小心就会出错

今天,在CodePlex上发现了一个SharShell的项目,通过它可以快速创建Shell扩展,非常方便。例如,对如如下的一个菜单扩展:

    

只需要用如下几句话就能实现:

    [ComVisible(true)]
    [COMServerAssocation(AssociationType.ClassOfExtension, ".txt")]
    public class CountLinesExtension : SharpContextMenu
    {
        protected override bool CanShowMenu()
        {
            return true;
        }

        protected override ContextMenuStrip CreateMenu()
        {
            var menu = new ContextMenuStrip();
            var itemCountLines = new ToolStripMenuItem
            {
                Text = "Count Lines...",
                Image = Properties.Resources.CountLines
            };

            itemCountLines.Click += (sender, args) => CountLines();
            menu.Items.Add(itemCountLines);
            return menu;
        }

        private void CountLines()
        {
            var builder = new StringBuilder();
            foreach (var filePath in SelectedFilePaths)
            {
                builder.AppendLine(string.Format("{0} - {1} Lines", Path.GetFileName(filePath), File.ReadAllLines(filePath).Length));
            }
            MessageBox.Show(builder.ToString());
        }
    }

更多信息可以参看CodeProject上的入门教程:.NET Shell Extensions - Shell Context Menus。

 

相关文章:

  • 简明 Vim 练级攻略 | 酷壳 - CoolShell.cn
  • 简单.net 数组
  • C# List数据类型的简单使用
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • CentOS VNC安装
  • 一个(次)线程的生命史
  • 查看内存使用情况(转)
  • 《算法导论》读书笔记之第6章 优先级队列
  • 自动文字提示列表
  • keyboard Button
  • App应用里应该自动跳转到系统设置界面吗?
  • 使用phantomjs获得web页面截图 | Marshal's Blog
  • EEToolbarCenterButton
  • Lua模式匹配
  • SSPieProgressView
  • [译] 怎样写一个基础的编译器
  • 03Go 类型总结
  • es的写入过程
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux Process Manage
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 编写符合Python风格的对象
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端临床手札——文件上传
  • 跳前端坑前,先看看这个!!
  • 我的业余项目总结
  • 用Python写一份独特的元宵节祝福
  • 最简单的无缝轮播
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 你对linux中grep命令知道多少?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ###STL(标准模板库)
  • #include
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (39)STM32——FLASH闪存
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (力扣)1314.矩阵区域和
  • (七)理解angular中的module和injector,即依赖注入
  • (四)图像的%2线性拉伸
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .form文件_SSM框架文件上传篇
  • .gitignore文件---让git自动忽略指定文件
  • .Net Core和.Net Standard直观理解
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net MVC + EF搭建学生管理系统
  • .Net Redis的秒杀Dome和异步执行