我想使用文件扩展名作为参数查询Windows(例如“.jpg”),并返回任何已配置为该文件类型默认应用程序的应用程序窗口的路径。

理想情况下,解决方案应如下所示:

from stackoverflow import get_default_windows_app

default_app = get_default_windows_app(".jpg")

print(default_app)
"c:\path\to\default\application\application.exe"

我一直在研究winreg内置库,该库包含Windows的注册表信息,但是我在理解其结构时遇到了麻烦,并且文档非常复杂。

我正在运行Windows 10和Python 3.6。

有没有人有什么帮助的想法?

最佳答案

注册表不是一个结构简单的简单数据库。 window
Shell执行程序具有一些非常复杂的逻辑。但是对于简单的情况,这应该可以解决问题:

import shlex
import winreg

def get_default_windows_app(suffix):
    class_root = winreg.QueryValue(winreg.HKEY_CLASSES_ROOT, suffix)
    with winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r'{}\shell\open\command'.format(class_root)) as key:
        command = winreg.QueryValueEx(key, '')[0]
        return shlex.split(command)[0]

>>> get_default_windows_app('.pptx')
'C:\\Program Files\\Microsoft Office 15\\Root\\Office15\\POWERPNT.EXE'

尽管一定也应该添加一些错误处理。

10-07 23:30