Python 获得';修改日期';登记

Python 获得';修改日期';登记,python,python-3.x,windows,registry,winreg,Python,Python 3.x,Windows,Registry,Winreg,嗨,伙计们,我能知道如何提取注册表的时间戳吗?因为我正在构建一个程序来跟踪注册表中的更改 到目前为止,我设法读取了注册表,但在我的注册表编辑器中只有名称、类型和数据。我能知道我还能怎样得到修改过的日期吗 size = winreg.QueryInfoKey(key)[1] for i in range(size): data = winreg.EnumValue(key, i) dict[data[0]] = data[1] 对于上面的代码,我得到的输出是 {'CVListTT

嗨,伙计们,我能知道如何提取注册表的时间戳吗?因为我正在构建一个程序来跟踪注册表中的更改

到目前为止,我设法读取了注册表,但在我的注册表编辑器中只有名称、类型和数据。我能知道我还能怎样得到修改过的日期吗

size = winreg.QueryInfoKey(key)[1]
for i in range(size):
    data = winreg.EnumValue(key, i)
    dict[data[0]] = data[1]
对于上面的代码,我得到的输出是

{'CVListTTL': 0, 'UnattendLoaded': 1, 'IECompatVersionHigh': 268435456, ...
另一个问题,我能扫描整个系统而不是像这样的特定子键吗

result = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\\Internet Explorer\\CodeIntegrity")
根据在线数据,元组
winreg.QueryInfoKey()
返回的第三个值是:

一个整数,给出自1601年1月1日以来上次修改密钥的时间(如果可用),为100纳秒

由于您可能希望将该值转换为POSIX时间戳,以使其与Python中其余的日期和时间模块更加兼容,因此下面的示例演示了如何实现这一点:

import datetime
import time
import winreg


# https://stackoverflow.com/questions/6161776/convert-windows-filetime-to-second-in-unix-linux
def windows_ticks_to_unix_seconds(windows_ticks):
    return windows_ticks/10000000 - 11644473600

key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
                     r"SOFTWARE\Microsoft\Internet Explorer\Image Caching")

reg_win_ts = winreg.QueryInfoKey(key)[2]  # 100’s of nanoseconds since 1601/01/01.
print(f'reg_win_ts: {reg_win_ts}')

reg_key_ts = windows_ticks_to_unix_seconds(reg_win_ts)
print(f'reg_key_ts: {reg_key_ts}')

dt = datetime.datetime.fromtimestamp(reg_key_ts)  # Convert to datatime.
print(f'dt: {dt}')
print(f'dt.strftime("%Y-%b-%d"): {dt.strftime("%Y-%b-%d")}')
print(f'dt.isoformat(): {dt.isoformat()}')

我不知道关于扫描整个系统而不是特定子项的问题的第2部分的答案。

你怎么会认为修改的日期正在被跟踪?@martineau,带有queryinfokey功能,我猜编辑:同样,当我将其导出为txt文件时,它会显示上次写入时间