Skip to content

Instantly share code, notes, and snippets.

@cbwar
Created April 5, 2017 11:02
Show Gist options
  • Save cbwar/72cc4d29ec8ce1a06aef012e60bf7c29 to your computer and use it in GitHub Desktop.
Save cbwar/72cc4d29ec8ce1a06aef012e60bf7c29 to your computer and use it in GitHub Desktop.
Python: get command to open file from windows registry
# coding: utf-8
import os
import winreg
import sys
def read_extension_regkey(extension):
path = r"Software\Classes\{}\OpenWithProgIDs".format(extension)
print("read_extension_regkey path={}".format(path))
try:
registry_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path, 0, winreg.KEY_READ)
subkeys = []
i = 0
while True:
try:
subk = winreg.EnumValue(registry_key, i)
print("read_extension_regkey subkey={}".format(subk[0]))
subkeys.append(subk[0])
except:
break
i += 1
winreg.CloseKey(registry_key)
return subkeys
except WindowsError as err:
print("read_extension_regkey {}".format(err), file=sys.stderr)
return []
def read_programtype_regkey(program_type):
path = r"Software\Classes\{}\shell\Open\command".format(program_type)
print("read_programtype_regkey path={}".format(path))
try:
registry_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path, 0, winreg.KEY_READ)
value = winreg.QueryValueEx(registry_key, '')
winreg.CloseKey(registry_key)
return value
except WindowsError as err:
print("read_programtype_regkey {}".format(err), file=sys.stderr)
return None
def get_programs_for_extension(extension):
print("get_programs_for_extension extension={}".format(extension))
programs = []
for prg in read_extension_regkey(extension):
program = read_programtype_regkey(prg)
if program is not None:
print("get_programs_fror_extension program: {}".format(program))
programs.append(program)
return programs
if __name__ == "__main__":
filenames = ["my document.odt", "image.jpg"]
for filename in filenames:
_, extension = os.path.splitext(filename)
print(get_programs_for_extension(extension))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment