使用 C# 在 Windows 中集成特定文件类型的 Shell

2024-02-18

因此,我搜索了如何使用 C# 对应用程序进行 shell 集成(将其添加到右键菜单)的指南,但我找不到如何仅针对特定文件类型执行此操作。我知道这是可能的,因为 WinRar 就是这样做的。那么我该怎么做呢?


通常有两种方法可以实现这一点。

  1. 注册表项 - 您可以在 HKEY_CLASSES_ROOT 下写入键和值。如果您查看该配置单元,您会在您的电脑上看到扩展。看这个article http://msdn.microsoft.com/en-us/library/cc144175%28v=vs.85%29.aspx有关键和值的详细信息。一些简单的事情,例如打开选项.myfile在这里可以输入您的应用程序的类型。这里有一个文件关联示例 http://msdn.microsoft.com/en-us/library/cc144158%28v=vs.85%29.aspx

  2. Shell 扩展(用 COM 编写):在这里你可以做更复杂的事情,比如处理程序。 http://msdn.microsoft.com/en-us/library/cc144067%28v=vs.85%29.aspx它们将被 Windows 调用,以便您可以执行诸如在菜单上绘画之类的操作,或者在右键单击文件时添加自定义操作。这里不仅仅是文件,您甚至可以添加属性表和自定义工具提示。

你会发现一些talk http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx关于不使用 .NET 编写 Shell 处理程序**。这仅适用于older.NET 的版本。.NET4 一切正常。 http://msdn.microsoft.com/en-us/magazine/ee819091.aspx

这篇文章应该可以帮助你.NET4 中的上下文菜单处理程序 http://blogs.msdn.com/b/codefx/archive/2010/09/14/writing-windows-shell-extension-with-net-framework-4-c-vb-net-part-1.aspx

** Why was它不推荐:

当您编写 shell 处理程序时,它会被主机进程(通常是 Windows 资源管理器)调用,而且还会被 FileOpenDialogs 和 FolderBrowser 对话框之类的东西调用。因此,如果您在 .NET 2.0 中编写了一个 shell 扩展,并且一个 .NET 1.1 应用程序调用了“文件打开对话框”,然后您的 .NET 2.0 shell 处理程序将被调用,并且您的 .NET 1.1 应用程序具有较旧的 CLR,则会出现问题并且会出现版本冲突。

所以我很高兴最终发现这个问题已经在 .NET 4 中以某种方式修复了 =)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 在 Windows 中集成特定文件类型的 Shell 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • SetCurrentDirectoryW 中的错误 206

    在我之后之前不清楚的问题 https stackoverflow com questions 44389617 long path name in setcurrentdirectoryw 我以某种方式能够创建一个具有长路径名的目录 但是
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 需要从汇编中的字符串中删除所有非字母元素

    通过编写此汇编代码 我无法使用此选项来删除非字符字母 它将遍历字符串并进行所有比较 然后显示相同的字符串 且不删除任何非字符 我正在尝试将字母字符放入 tempString 中 然后将其移动到 edx 进行显示 它接受一个字符串并删除所有非
  • 我的代码是否阻止目录遍历?

    来自 Python WSGI 应用程序的以下代码片段可以安全地进行目录遍历吗 它读取作为参数传递的文件名并返回指定的文件 file name request path params file file open file name rb m
  • Clojure 应用映射和关键字参数销毁

    考虑具有以下签名的函数 defn make widget keys x y or x 10 y 20 将映射传递给函数的最佳方法是什么 例如 make widget x 100 or make widget y 200 x 0 我目前想到的
  • 正则表达式来验证逗号分隔的电子邮件地址?

    我需要验证电子邮件地址 可以是单个或多个以逗号分隔的地址 在我在正则表达式验证器中使用如下表达式之前 string exp w w w w w w 它正在验证多个或一个电子邮件地址 但同样的表达式在 C 中没有验证 它也表示对无效地址有效
  • IIS7-请求过滤模块配置为拒绝超过请求内容长度的请求

    我想上传图像 它在我的机器上运行良好 但是当我将我的网站放在 IIS7 服务器上供公众使用时 我无法上传任何内容 Error 请求过滤模块 用于拒绝以下请求 超过请求内容长度 最可能的原因 在Web服务器上配置请求过滤以拒绝请求 因为内容长
  • 如何为编辑操作指定 devise_parameter_sanitizer?

    我已将 Devise 添加到我的 Rails 4 应用程序中 并成功将用户名等添加到我的用户模型中 此外 我可以使用惰性方式存储这些字段 即 class ApplicationController lt ActionController B
  • libGDX:用一些枢轴打结的吊绳

    我正在尝试在 libGDX 中制作一根在其下端有一些物体的悬挂绳 绳子应该是这样的Box2D中的挂绳 http www emanueleferonato com 2009 10 05 basic box2d rope 我做了很多研究 lib
  • 如何让外部合并工具在 Linux 上与 svn 一起工作?

    如何获得基于 GUI 的合并工具以在 Linux 中使用命令行 SVN 我知道有很多选项 例如 meld svn Diff 等 所有这些都需要一个帮助程序脚本来允许 svn 在冲突解决期间调用外部程序 我按照给出的说明进行操作here ht
  • 将 WebRTC 与 WebWorker 结合使用

    我有兴趣将 webrtc 与 webworker 一起使用 是否可以 我尝试了 但没有成功 因为它没有找到 窗口 根据规格 1 https w3c github io mediacapture main dom navigator 2 ht
  • Apple 无法识别 imgur 的 HTTPS

    我有多个来自 imgur 的 HTTPS 链接 例如https i stack imgur com 9nSMi jpg https i stack imgur com 9nSMi jpg 我使用它作为我的原型应用程序的背景之一 但每当我在
  • WPF ComboBox...如何设置.Text 属性?

    有没有办法设置 Text直接使用 Wpf ComboBox 控件的属性吗 我的组合框绑定到List
  • 如何组合 Raphael javascript 库中的对象?

    抱歉问了一个很长的问题 但是就这样吧 我正在尝试修改此处演示周围的拖动形状 http raphaeljs com graffle html http raphaeljs com graffle html 该演示运行良好 我想做的是将文字放入
  • 在 ASP.Net 菜单中突出显示选定的选项卡

    我试图用不同的颜色突出显示 ASP NET 菜单中选定的选项卡 做到这一点似乎很简单 但首先我无法使其工作 其次我到目前为止找不到一个好的工作示例 ASP HTML div class clear hideSkiplink div
  • Firebase:部署到托管后仍然是旧版本,如何?

    我收到了一个在 firebase 上托管的相当原始的 React 应用程序 由其他人开发 进行维护 现在奇怪的事情发生了 我更改文件的内容 甚至简单的文本更改 运行部署 托管 我在 firebase 控制台中看到部署成功 仍然 页面内容仍然
  • 为独立应用程序创建 Homebrew 公式

    我正在尝试为不需要编译的应用程序创建一个自制公式 我尝试过浏览公式食谱 但我缺少一些使事情正常工作的东西 下面是我使用更通用文件名的用例 容器内部有两个文件 一个是应用程序的脚本 另一个是手册页文件 我们将使用以下文件名来保持通用 myap
  • 如何有条件地渲染 f:selectItem 标签?

    如何指定条件渲染
  • Python:setup.py Egg_info 失败,错误代码为 1

    我已经将 Python 2 7 x 更新到 3 6 但当我尝试安装任何软件包时仍然收到此消息 示例 Flask Kivy 命令 python setup py Egg info 失败 错误代码为 1 C Users Dev AppData
  • Boost.Filesystem 和 C++ 标准文件系统库有多相似?

    我需要一个文件系统库与支持 C 11 的编译器或支持 C 14 的编译器一起使用 所以它不能来自 C 17 现在 我知道进入 C 17 的文件系统库是基于 Boost Filesystem 的 但是 它们是否足够相似 足以让我使用 Boos
  • 表单中的 _lpchecked="1" 是什么意思?

    我开始做一些网络开发 我正在学习表单并进入这个领域 lpchecked 1 我在这个 StackOverflow 问题中找到了带有此字段的表单示例大文本输入导致 http post 失败 https stackoverflow com qu
  • 使用 C# 在 Windows 中集成特定文件类型的 Shell

    因此 我搜索了如何使用 C 对应用程序进行 shell 集成 将其添加到右键菜单 的指南 但我找不到如何仅针对特定文件类型执行此操作 我知道这是可能的 因为 WinRar 就是这样做的 那么我该怎么做呢 通常有两种方法可以实现这一点 注册表