2013-12-01 5 views
2

Как мне с value?Как записывать местное время (REG_BINARY) в реестр с помощью _winreg Python

def add(): 
    ts = "Software\\Test\\ti" 
    try: 
     key = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER, ts, 0, _winreg.KEY_ALL_ACCESS) 
    except: 
     return False 
    else: 
     value = hex(int(time.time()))[2::].decode('hex')[::-1].encode('hex') 
     """TODO: I should do what?""" 
     _winreg.SetValueEx(key, "test", 0, _winreg.REG_BINARY, 3, value) 
     _winreg.CloseKey(key) 
     return True 

правильный результат в реестре, как это (я надеюсь): test REG_BINARY 29 96 98 52 00 00 00 00

ответ

2

Вы должны передать двоичную строку; Используйте struct.pack с <Q (без знака долго долго: 8 байт) в формате:

>>> import struct 
>>> import time 
>>> x = int(time.time()) 
>>> x 
1385879197 
>>> hex(x) 
'0x529ad69d' 
>>> struct.pack('<Q', x) 
'\x9d\xd6\x9aR\x00\x00\x00\x00' 

Полный пример кода:

import struct 
import time 
import _winreg 

def add(): 
    ts = "Software\\Test\\ti" 
    try: 
     key = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER, ts, 0, 
            _winreg.KEY_ALL_ACCESS) 
    except: 
     return Falseimport struct 
import time 
import _winreg 

def add(): 
    ts = "Software\\Test\\ti" 
    try: 
     key = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER, ts, 0, 
            _winreg.KEY_ALL_ACCESS) 
    except: 
     return False 
    else: 
     value = struct.pack('<Q', int(time.time())) # <------- 
     _winreg.SetValueEx(key, "test", 0, _winreg.REG_BINARY, value) 
     _winreg.CloseKey(key) 
     return True 

add() 
+0

спасибо большое, falsetru !!! ответ очень прав! Я узнаю 'struct'. – thinkerou