我正在构建一个文件目录应用程序,对于它的一个用途,我想获取当前安装的所有能够打开具有当前选定文件扩展名的文件的应用程序的列表。因此,假设我选择了一个.docx
文件,该应用程序将列出 MS Word、OpenOffice、LibreOffice 等应用程序。我如何在 Mac 和 Windows 上获取这样的列表?
答案1
对于 Windows:没有简单的方法,但可以编写脚本来枚举每个已注册应用程序的功能。官方/已注册应用程序的列表存储在这两个注册表项中:
HKEY_CURRENT_USER\SOFTWARE\RegisteredApplications HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications
通用 Web 应用程序似乎注册了上面位置 #1 中的条目。
右窗格列出了在 Windows 中“默认程序”UI 中注册的每个应用程序。
例如,Firefox 在那里添加了一个条目,其值数据如下:
软件\客户端\StartMenuInternet\FIREFOX.EXE\功能
因此,HKCU 或 HKLM 下的上述位置包含有关该程序可以处理哪些文件类型和协议的信息。
转到以下位置:HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\Capabilities
有一个名为“FileAssociations”的子项,它指定了它可以处理的文件类型列表,并提到了每种文件类型要使用的 ProgID。
可以编写一个脚本来枚举每个已注册的应用程序,然后枚举它可以处理的每种文件类型。
(注意:Windows 中的“打开方式”对话框完成所有这些工作。)
(或者)
打开默认程序 > 设置默认程序。在列表中选择一个程序,然后单击“选择此程序的默认值”。这将列出该程序可以处理的文件类型。对列出的每个应用程序执行此操作。
答案2
对于 Mac,SuperUser 上还有另一个问题/答案似乎可以解决这个问题:是否可以查询启动服务数据库来查找将打开任意文件或 UTI 类型的应用程序?
这个技巧似乎是先获取“UTI”(有点像 mimetype),然后查找可以使用它打开它的应用程序杜蒂。