i trying installed programs of windows computer, therefore read out registry.
but somehow python reads 32bit programs out twice (even though give him registry entry)
here code snipped:
def get_programs(registry): reg = connectregistry(none, hkey_local_machine) programlist = [] key = openkey(reg, registry) print(queryinfokey(key)) in range(0, queryinfokey(key)[0]): programlist.append(enumkey(key, i)) closekey(key) closekey(reg) return programlist
i call function this:
registry32bit = "software\wow6432node\microsoft\windows\currentversion\uninstall" registry64bit = "software\microsoft\windows\currentversion\uninstall" programs32bit = get_programs(registry32bit) programs64bit = get_programs(registry64bit)
why python open , read out same registry (for 32 bit) twice , return same list?
this appears work , uses @eryksun suggestion in comment below letting redirection happen , not explicitly referencing wow6432node
registry key. central idea specify either key_wow64_32key
or key_wow64_64key
flag when opening uninstall subkey , let magic happen.
note: pythonized code in get_programs()
function some. made shorter , more readable in opinion.
import sys _winreg import * # assure registry handle objects context manager protocol implemented. if sys.version_info.major*10 + sys.version_info.minor < 26: raise assertionerror('at least python 2.6 required.') def get_programs(subkey, regbitview): connectregistry(none, hkey_local_machine) hive: openkey(hive, subkey, 0, regbitview | key_read) key: return [enumkey(key, i) in range(queryinfokey(key)[0])] uninstall_reg_key = r'software\microsoft\windows\currentversion\uninstall' programs32bit = get_programs(uninstall_reg_key, key_wow64_32key) programs64bit = get_programs(uninstall_reg_key, key_wow64_64key) print('32-bit programs:\n{}'.format(programs32bit)) print('') print('64-bit programs:\n{}'.format(programs64bit))
many @eryksun clues , many implementation strategy suggestions.
Comments
Post a Comment