如何执行具有不同扩展名的关联应用程序的文件?

How to execute a file with a different extension's associated application?

在我的应用程序中,我希望能够使用与不同扩展名关联的程序来执行具有任意名称和扩展名的文件

例如,假设我有一个名为 file.dat 的文件,但我想用记事本打开它,就像它被命名为 file.txtfile.dat.txt 一样。另外,我没有重命名文件的权限,所以这是不可能的。

如果文件 调用 file.txt,我可以调用 ShellExecute。但是调用 file.dat 时失败了; Windows 抱怨该文件没有关联。

我不想对特定的可执行文件进行硬编码,因为(在上面的示例中)最终用户可以将 .txt 文件与写字板而不是记事本相关联。在这种情况下,我希望我的 file.dat 用写字板打开。

调用ShellExecuteEx and specify the lpClass member of the SHELLEXECUTEINFO结构。请注意,您必须在 fMask 成员中包含 SEE_MASK_CLASSNAME

例如,将 lpClass 设置为 '.txt' 以请求使用与 .txt 扩展名关联的程序打开文件。