Created
April 5, 2017 11:02
-
-
Save cbwar/72cc4d29ec8ce1a06aef012e60bf7c29 to your computer and use it in GitHub Desktop.
Python: get command to open file from windows registry
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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