I want to change a registry key value via python. The value type will be REG_DWORD which means hexadecimal including 0x000 in integer format. I am having trouble converting a string with a number to its hexadecimal format in integer.
Since I am looping through a number of registry keys, my code to change a certain key is as follows:
for i in range(len(checking_names)): #loop through names to check if checking_names(i) !== should_values(i): #no match with winreg.CreateKeyEx(key, subkey_path, 0, winreg.KEY_ALL_ACCESS) as subkey: winreg.DeleteValue(subkey, names_data[i]) #have to delete name in order to overwrite winreg.SetValueEx(subkey, names_data[i], 0, winreg.REG_DWORD, new_hex_value) #overwrite name value with correct value from predefined list
My values_data list is comprised of predefined variables as strings. One of the entries is a string '9600'. In my above code,
values_data[i] should be 9600 in hexadecimal format:
0x00002580. For this conversion I do the following:
dec_to_hex_str = format(int(values_data[i]),'x') #string decimal to string hexadecimal conversion zeros_pre_x = '0x' #0x for format 0xffffffff zeros_to_add = 8 - len(dec_to_hex_str) #count number of leading 0s to add mid_zeros_list =  for j in range(zeros_to_add): mid_zeros_list.append(0) #add a leading 0 mid_zeros = ''.join(mid_zeros_list) #convert list to string new_hex_value = int(zeros_pre_hex + mid_zeros + dec_to_hex_str)
When I run this code, my python shell is unresponsive, and there is no change in the windows registry for the subkey value. The problem seems to be, that
winreg.SetValueEx .... winreg.REG_DWORD only understands integer format but my
new_hex_value is not being properly converted from string to integer.
Any help would be appreciated!
User contributions licensed under CC BY-SA 3.0