All pastes #1522193 Raw Edit

getProgIDsFromRegistry.py

public python v1 · immutable
#1522193 ·published 2009-08-08 19:53 UTC
rendered paste body
# Filename: getProgIDsFromRegistry.py# Roy H. Han (http://us.pycon.org/2008/tutorials/AutomatingWindows/)# Import other modulesfrom _winreg import *# Initialize list of keys of searchkeysToSearch = [    HKEY_CLASSES_ROOT,     OpenKey(HKEY_CURRENT_USER, 'Software'),    OpenKey(HKEY_LOCAL_MACHINE, 'Software'),]categories = set(); progIDs = set()# While we have keysToSearch,while keysToSearch:    # Get key    key = keysToSearch.pop(); count_subkeys = QueryInfoKey(key)[0]    # For each subkey,    for index in xrange(count_subkeys):        subkeyName = EnumKey(key, index)        try: subkey = OpenKey(key, subkeyName)        except WindowsError: print 'Could not access registry key:', subkeyName        subkeyNameLower = subkeyName.lower()        # Extract progIDs        if 'progid' in subkeyNameLower:            categories.add(subkeyNameLower)            if 'open' in subkeyNameLower:                 count_values = QueryInfoKey(subkey)[0]                for valueIndex in xrange(1, count_values):                    progIDs.add(EnumValue(subkey, index)[0])            else: progIDs.add(EnumValue(subkey, 0)[1])        # Recurse children                    keysToSearch.append(subkey)# Print categoriesprint 'Categories: ' + ', '.join(categories)# Sort progIDs        progIDs = list(progIDs)progIDs.sort()# Try to open each progID in a separate processimport killableprocess # Courtesy of Peter Astrand and Benjamin SmedbergprogIDs_dispatchable = []outputFile = open('progIDs_completeFromRegistry.txt', 'wt')for progID in progIDs:    print '%d/%d %s' % (progIDs.index(progID), len(progIDs), progID),     returnCode = killableprocess.call('python dispatch.py ' + progID, timeout=30)    if not returnCode:         print '[yes]'        outputFile.write(progID + '\n')        outputFile.flush()    else: print '[no]'outputFile.close()