C#检查文件关联并创建关联exe

 

给右键添加菜单项,微软首先推荐静态方式,即给文件类型或者系统子健添加一个conmmand命令

如果要添加一个右键菜单项,首先考虑添加范围,1)某一系统子健(系统所有文件、系统所有目录、系统空白右键、shift右键等);2)某一文件类型添加

系统子健添加

常用的子健: 
HKEY_CLASSES_ROOT*:系统所有文件,右键系统任一文件都会添加右键菜单 
HKEY_CLASSES_ROOT\AllFilesystemObjects:系统所有文件和文件夹,右键任一文件或者文件夹都会添加右键菜单 
HKEY_CLASSES_ROOT\Folder:系统所有文件夹,右键系统任一文件夹都会添加右键菜单 
HKEY_CLASSES_ROOT\Directory:系统所有目录,右键系统任一文件夹都会添加右键菜单 
HKEY_CLASSES_ROOT\Directory\Background:系统文件夹空白处右键,在文件夹内空白处右键都会添加右键菜单 
其他详情参考MSDN

具体在何处添加,根据自己需求处理,有可能会在多处都添加;有兴趣的可以仔细看一下自己的注册表,或者用“右键管理工具”把右键功能全部列出来,有的右键可能在多个子健下都有添加,或者同一类型的右键功能可能是在不同子健下添加的

以HKEY_CLASSES_ROOT*为例 

效果如下所示 


command数据可以添加参数,具体使用细节可以查考相关资料,下面给上述添加一个参数接受文件名称,在命令之后添加%1接受文件名称

某一文件类型添加

给某一文件类型添加右键菜单,首先要注册文件类型,给系统注册自己的文件类型,指明文件后缀名 

同时添加文件关联子项,注册右键菜单 

效果如下 


特定文件添加右键菜单

前面示例都是如何添加文件菜单,但是都是给某一类型文件添加的右键菜单,如果想给某个特定文件添加右键菜单可以通过添加值“AppliesTo”来实现简单过滤 

因此我们可以给command添加子健AppliesTo限定我们右键添加的条件,如果一个文件名称中包含exampleText1,那么此右键功能是可以的 

上述三个文件只有在右键”myTest.MyFileType”的时候才会有右键菜单,右键其他两个不会有右键菜单

AppliesTo的局限性在于只支持win7之后的系统,win7之前的系统不支持


————————————————
版权声明:本文为CSDN博主「大飞的江湖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yang382197207/article/details/80079052

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
using Microsoft.Win32; 
namespace AppC 
{ 
    static class Program 
    { 
        /// <summary> 
        /// 应用程序的主入口点。 
        /// </summary> 
        [STAThread] 
        static void Main(string[] args) 
        { 
            Application.EnableVisualStyles(); 
            Application.SetCompatibleTextRenderingDefault(false); 

            /// 是否通过关联打开的软件 
            if (args.Length > 0) 
                Application.Run(new mainForm(args[0].ToString())); 
            else 
            { 
                string keyName; 
                string keyValue; 
                keyName = "WPCFile"; 
                keyValue = "资源包文件"; 
                RegistryKey isExCommand = null; 
                bool isCreateRegistry = true; 

                try 
                { 
                    /// 检查 文件关联是否创建 
                    isExCommand = Registry.ClassesRoot.OpenSubKey(keyName); 
                    if (isExCommand == null) 
                    { 
                        isCreateRegistry = true; 
                    } 
                    else 
                    { 
                        if (isExCommand.GetValue("Create").ToString() == Application.ExecutablePath.ToString()) 
                        { 
                            isCreateRegistry = false; 
                        } 
                        else 
                        { 
                            Registry.ClassesRoot.DeleteSubKeyTree(keyName); 
                            isCreateRegistry = true;                             
                        } 

                    } 
                } 
                catch (Exception) 
                { 
                    isCreateRegistry = true; 
                } 

                /// 假如 文件关联 还没有创建,或是关联位置已被改变 
                if (isCreateRegistry) 
                { 
                    try 
                    { 
                        RegistryKey key, keyico; 
                        key = Registry.ClassesRoot.CreateSubKey(keyName); 
                        key.SetValue("Create", Application.ExecutablePath.ToString()); 

                        keyico = key.CreateSubKey("DefaultIcon"); 
                        keyico.SetValue("", Application.ExecutablePath + ",0"); 

                        key.SetValue("", keyValue); 
                        key = key.CreateSubKey("Shell"); 
                        key = key.CreateSubKey("Open"); 
                        key = key.CreateSubKey("Command"); 

                        /// 关联的位置 
                        key.SetValue("", "/"" + Application.ExecutablePath.ToString() + "/" /"%1/""); 

                        /// 关联的文件扩展名,  
                        keyName = ".wpc"; 
                        keyValue = "WPCFile"; 
                        key = Registry.ClassesRoot.CreateSubKey(keyName); 
                        key.SetValue("", keyValue); 
                    } 
                    catch (Exception) 
                    { 
                    } 
                } 
                Application.Run(new mainForm("")); 
            } 
        } 
    } 
}

 代码来自:https://blog.csdn.net/zzh87615/article/details/6251352

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值