Windows 如何知道用啥程序打开文件?
Posted
技术标签:
【中文标题】Windows 如何知道用啥程序打开文件?【英文标题】:How does Windows know what program to open a file with?Windows 如何知道用什么程序打开文件? 【发布时间】:2013-05-07 21:16:56 【问题描述】:我刚刚注意到,当我在我的计算机上查看 .sln
文件时,有些带有 v7.1 图标,有些带有 v9 图标,有些带有 v10 图标(取决于创建它们的 Visual Studio 版本)。似乎 Windows 区分了哪些文件获得了哪些图标,可能是通过某种“MIME 类型”来区分扩展名之外的文件。
如果两个文件类型共享一个扩展名,我可以使用该功能检测用户从默认 MFC SaveAs 对话框中选择的文件类型吗?
【问题讨论】:
我认为 Visual Studio 可能是一个特例——微软有一些疯狂的中间可执行文件,可以计算出版本控制并将 .sln 文件传递给适当的 VS 版本。这并不是说不可能按照您的要求去做,只是它可能不像最初出现的那么常见。 msdn.microsoft.com/en-us/library/cc144122%28VS.85%29.aspx 确认 dlev 评论了什么;它使用外壳扩展来显示图标。 @Praetorian:实际上,一个是另一个的超集,所以我可以很容易地从文件大小中分辨出格式,就像 bmp 标头一样。但我希望有一些我可以使用的魔术。 @Praetorian:您应该将其发布为答案。 【参考方案1】:对于 Visual Studio,.sln
文件与 Microsoft Visual Studio 版本选择器相关联,在我的机器上,它安装在 "C:\Program Files\Common Files\microsoft shared\MSEnv\VSLauncher.exe"
此可执行文件必须解析解决方案文件以确定版本,然后向资源管理器显示正确的图标。
在一般情况下,给定文件类型的文件关联存在于注册表中的HKEY_CLASSES_ROOT
下。
但在您的情况下,我认为您只需要阅读文件内容即可确定它是哪一个。希望两者之间有一些容易区分的东西。
【讨论】:
它将是进程内 COM 服务器的 shell 扩展,而不是启动器可执行文件,它向 shell 显示正确的图标。但否则我会说你的分析是准确的。以上是关于Windows 如何知道用啥程序打开文件?的主要内容,如果未能解决你的问题,请参考以下文章