如何在C#中设置文件类型关联

本文关键字:文件 类型 关联 设置 | 更新日期: 2023-09-27 18:20:31

我有一个MDI应用程序。这个MDI应用程序还有很多其他工具,包括编辑器。我想用MDI应用程序的编辑器打开所有的".txt"文件,从而使我的应用程序成为所有"txt"文件的默认查看器。

每当用户编辑".txt"文件时,MDI应用程序应启动,编辑器窗口应填充所选".txt"的文件内容。

有什么办法我能做到吗。

感谢

如何在C#中设置文件类型关联

在我的应用程序中,我在启动时执行以下操作:

[System.Runtime.InteropServices.DllImport("Shell32.dll")]
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
private void GetDefaultsFromRegistry()
{
    if (Registry.GetValue("HKEY_CLASSES_ROOT''MyApp", String.Empty, String.Empty) == null)
    {
        Registry.SetValue("HKEY_CURRENT_USER''Software''Classes''MyApp", "", "My File Type");
        Registry.SetValue("HKEY_CURRENT_USER''Software''Classes''MyApp", "FriendlyTypeName", "My Friendly Type Name");
        Registry.SetValue("HKEY_CURRENT_USER''Software''Classes''MyApp''shell''open''command", "", 
            "path''to''my''app '"%1'"");
        Registry.SetValue("HKEY_CURRENT_USER''Software''Classes''.ext", "", "MyApp");
        //this call notifies Windows that it needs to redo the file associations and icons
        SHChangeNotify(0x08000000, 0x2000, IntPtr.Zero, IntPtr.Zero);
    }
}

当然,所有路径、名称和扩展名都更改为您的应用程序。

不过,要小心扰乱用户的.txt文件关联。我在每次启动时都会检查任务,因为我的应用程序使用自定义类型,并且只部署在内部映像系统上。我不知道你的应用程序部署在哪里,但如果我从互联网上下载的一些随机实用程序不断改变我的.txt文件关联,我会非常恼火,我相信很多其他人也会这样。

您需要更改此注册表项:

HKCR'txtfile'shell'open'command

将程序的默认值更改为参数末尾为%1。然后在您的程序中处理命令行args以执行您想要的操作。

文件关联可以通过编程方式这样完成,也可以通过像这样的注册表项来完成