检测窗口的默认媒体播放器

时间:2011-01-15 15:50:09

标签: python wxpython media

我正在尝试检测Window的默认媒体播放器路径,以便我可以从我的Python / wxPython程序中访问它。我的具体需求是制作所有媒体文件的列表并使用播放器播放。

1 个答案:

答案 0 :(得分:2)

根据上面的评论,看起来你决定转向另一个方向。你的问题让我感到很好奇,所以无论如何我都做了一些狩猎。

文件关联存储在Windows注册表中。通过python访问Windows注册表信息的方法是使用_winreg模块(在2.0及更高版本中可用)。当前用户的单个文件关联信息将存储在命名如下的子键中:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.wmv\UserChoices

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mpeg\UserChoices

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.avi\UserChoices

等等您正在寻找的任何特定文件格式。

这是我编写的一个小示例脚本,用于访问此信息并将其存储为列表:

import _winreg as wr

# Just picked three formats - feel free to substitute or extend as needed
videoFormats = ('.wmv', '.avi', '.mpeg')

#Results written to this list
userOpenPref = []

for i in videoFormats:
    subkey = ("Software\\Microsoft\\Windows\\CurrentVersion" + 
                "\\Explorer\\FileExts\\" + i + "\\UserChoice")

    explorer = wr.OpenKey(wr.HKEY_CURRENT_USER, subkey)

    try:
        i = 0
        while 1:
            # _winreg.EnumValue() returns a tuple:
            # (subkey_name, subkey_value, subkey_type)
            # For this key, these tuples would look like this:
            # ('ProgID', '<default-program>.AssocFile.<file-type>', 1).
            # We are interested only in the value at index 1 here
            userOpenPref.append(wr.EnumValue(explorer, i)[1])
            i += 1
    except WindowsError:
        print

    explorer.Close()

print userOpenPref

输出:

[u'WMP11.AssocFile.WMV', u'WMP11.AssocFile.avi', u'WMP11.AssocFile.MPEG']

使用WMP11 = Windows Media Player 11

希望这有用。

来源:

python docseffbot tutorial