我想使用文件扩展名作为参数(例如“.jpg”)查询Windows,并返回任何应用程序窗口已配置为此文件类型的默认应用程序的路径。
理想情况下,解决方案看起来像这样:
from stackoverflow import get_default_windows_app
default_app = get_default_windows_app(".jpg")
print(default_app)
"c:\path\to\default\application\application.exe"
我一直在调查winrm内置的库,它保存了windows的注册表信息,但是我无法理解它的结构,文档非常复杂。
我正在运行Windows 10和Python 3.6。
有没有人有任何想法可以提供帮助?
注册表不是一个结构良好的简单数据库。 Windows 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'
虽然也应该添加一些错误处理。