一个windows右键关联工具

        不知道有没有这样一个需求:有个.xml文件,想要用notepad++打开,然而我的notepad++是绿色免安装版,所以注册表没有把这个功能添加到鼠标右键,所以右键点击这个文件时没有(使用notepad++打开)的选项;

发现了更好用的player用来打开.MP4文件;

想要用特定的软件打开特定后缀名的文件。

        之前想学习一些源码,于是想反编译.dll来看看源码是如何实现的。下了个ILSpy来查阅的时候,发现要先打开ILSpy,再把这个.dll文件拖入其中,或者使用ILSpy窗体里的"文件->打开"来打开指定的dll,这个操作是不是比较繁琐又慢人一步。

===========================非开发者可以跳过中间这段,直接看工具怎么使用和下载链接===========================

        我们C#的控制台程序里,入口函数中

static void Main(string[] args)
{
    var path = args.FirstOrDefault();
    Console.WriteLine(path);
}

这个args里面其实包含了一些可传入参数。如果你拖入一个文件到"控制台.exe"上时,控制台程序将输出这个路径。其实许多软件都包含了这一步读取传入参数的方法。那么这个ILSpy的入口函数里,应当也有类似的方式,直接拖动一个.dll到ILSpy.exe上时,ILSpy将直接打开这个文件。

        因此我们可以使用注册表,将所有的文件类型与可执行程序关联起来。

        注册表打开一个文件时,使用的命令其实是"{exePath}" "%1"(使用双引号包起来,可以避免路径里包含空格导致异常) ,后面这个"%1"表示需要传入的参数。

        所以,我们只需要在注册表里,往每个对应的类型里添加可执行程序路径,则可以完成这个操作。

===========================理论部分说完===========================

根据上述思路,在下就编写了一个小工具,可以把任意格式关联到任何程序上,使右键选中这个文件时,右键列表里将出现"用XX打开"的命令。

打开界面是这个样子:

完成的话,这个Open With ILSpy, Open With ILDasm都是自定义添加上去的。

步骤比较简单,如下:

1.设置命令名,也就是"Open With ILSpy",也可以是其他自定义的命令名;

2.填写文件类型,如.exe, .mp4;

3.设置打开所用exe的绝对路径,绝对路径也就是物理路径全名称。点击右侧的"..."可以浏览文件夹选择目标文件,也可以使用下拉菜单选择历史记录里的路径;

4;额外参数,

额外参数是以{exePath} {leftParam} "%1" {rightParam} 为顺序填充的命令。在某些情况下需要如此填写,比如使用Unity直接以目标平台android打开文件夹,则需要填写在"%1" 路径参数的左侧("Unity.exe" -buildTarget android -projectPath "%1",这是在注册表里的结果)。 

 填写完成的参考图:

5. 最后一步,点击注册,这个命令将写入到注册表里,从而在右键菜单里添加指定的命令。

6.Extra。如果需要注销这个命令,则反过来,只需要填写命令名,和文件类型,然后点击注销,如果该命令被注册过,则能够成功完成注销。

Github链接:GitHub - DoyoFish/SetOpenWithCommand: Used for open .exe with custom command.

下载链接:

Release 1.5版本 · DoyoFish/SetOpenWithCommand (github.com)

猜你喜欢

转载自blog.csdn.net/DoyoFish/article/details/122667658