查找用于在Windows上打开特定文件类型的默认应用程序

时间:2020-03-06 15:01:37  来源:igfitidea点击:

我正在使用C开发针对.NET Framework 2.0的应用程序,我需要能够找到用于打开特定文件类型的默认应用程序。

我知道,例如,如果我们只想使用该应用程序打开文件,则可以使用类似以下内容的文件:

System.Diagnostics.Process.Start( "C:\...\...\myfile.html" );

在默认浏览器中打开HTML文档,或者

System.Diagnostics.Process.Start( "C:\...\...\myfile.txt" );

在默认文本编辑器中打开文本文件。

但是,我想做的是在默认的文本编辑器中打开不一定带有.txt扩展名的文件,因此,我需要能够找到打开的默认应用程序。 txt文件,这将允许我直接调用它。

我猜想有一些Win32 API需要通过P / Invoke来完成,但是快速浏览Google和MSDN并没有发现什么令人感兴趣的东西。我确实找到了大量完全不相关的页面,但没有找到我想要的东西。

解决方案

我们可以在注册表部分" HKEY_CLASSES_ROOT"下检查扩展名和操作详细信息。有关此文档,请参见MSDN。或者,我们可以使用IQueryAssociations接口。

这是有关此主题的博客文章。代码示例在VB.net中,但是将它们移植到C#应该很容易。

我们可以只查询注册表。首先在HKEY_CLASSES_ROOT \ .ext下获得默认条目

这将为我们提供类名。例如.txt的默认值为txtfile

然后打开HKEY_CLASSES_ROOT \ txtfile \ Shell \ Open \ Command

这将为我们提供使用的默认命令。

h!当然。

HKEY_CLASSES_ROOT\.txt

包括对

HKEY_CLASSES_ROOT\txtfile

其中包含一个子项

HKEY_CLASSES_ROOT\txtfile\shell\open\command

参考记事本。

排序,非常感谢!

巴特