2011-01-15 5 views
3

私はPython/wxPythonプログラムからアクセスできるように、ウィンドウのデフォルトのメディアプレーヤーパスを検出しようとしています。私の具体的な必要性は、すべてのメディアファイルのリストを作成し、プレーヤーを使用して再生することです。ウィンドウのデフォルトのメディアプレーヤーを検出する

+2

私のアドバイスは、システムの任意の内部の詳細を検出しようとするが、システムは何もしてファイルを「開く」にするために、 'os.system'を使用しないことです適切なアプリケーションと考えています。 – ulidtko

+0

それは簡単でした。ありがとう:) – spitfire

+0

問題は、パスにスペースがあるときに失敗することです。 – spitfire

答えて

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 

出力::WMP11 =のWindows Media Player 11を持つ

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

ここ

は、私はこの情報にアクセスし、それをリストとして保存するために書いた小さなスクリプトの例です

希望しました。

出典:

python docseffbot tutorial

関連する問題