record-camera-and-screen/test/read_winreg.py

108 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 获取Windows的已打的补丁号
import winreg
from winreg import *
import re
import os
import datetime
import hashlib
def subRegKey(key, pattern, patchlist):
# 个数
count = QueryInfoKey(key)
for index in range(len(QueryInfoKey(key))):
# 获取标题
name = EnumKey(key, index)
result = patch.match(name)
if result:
patchlist.append(result.group(1))
sub = OpenKey(key, name)
subRegKey(sub, pattern, patchlist)
CloseKey(sub)
def check_run_state():
#验证运行有效性逻辑:
#一、判断是否正常安装
#判断条件软件安装时在注册表“HKEY_CURRENT_USER\\SOFTWARE\\Gutin\\Record“记录下安装目录
#二、非正常安装有效时间为三个月,且只能发生一次
#验证当前运行目录是否存在注册表中
qualified = False
run_dir = os.path.abspath('.')
# print('run_dir:%s' % run_dir)
reg_path = 'SOFTWARE\\Gutin\\Record'
feature_name ='InstallDir'
key = OpenKey(HKEY_CURRENT_USER, reg_path, access = KEY_READ)
items = QueryInfoKey(key)
for i in range(items[1]):
item = EnumValue(key, i)
name = item[0]
value = item[1]
type = item[2]
if name and name.find(feature_name)>=0:
if os.path.samefile(value, run_dir):
qualified = True
break;
if not qualified:
#查找非正常安装目录记录
#记录以运行目录的hash值作为键名值为首次运行的时间
time_format= '%Y-%m-%d %H:%M:%S'
run_time = None
# run_dir_hash = hashlib.md5(run_dir.encode('utf-8')).hexdigest()
unqualified_key_name = 'Unqualified'
has_unqualified = False
for i in range(items[1]):
item = EnumValue(key, i)
name = item[0]
value = item[1]
type = item[2]
if name == unqualified_key_name:
has_unqualified = True
run_time = value
if not has_unqualified:
#如果不存在,创建
run_time = datetime.datetime.now().strftime(time_format)
key = OpenKey(HKEY_CURRENT_USER, reg_path, access = KEY_SET_VALUE)
SetValueEx(key, unqualified_key_name, 0, REG_SZ, run_time)
#判断时限
# now = datetime.datetime.strptime('2018-06-22 12:11:51', time_format)
now = datetime.datetime.now()
run_time_obj = datetime.datetime.strptime(run_time, time_format)
print('first run_time:%s' % run_time)
print('now:%s' % now.strftime(time_format))
# qual_days = 1 - (now - run_time_obj).days
# print('qualified days:%d' % (qual_days))
print('qualified hours:%d' % (((now - run_time_obj).total_seconds())//3600))
qual_hours = 18 - ((now - run_time_obj).total_seconds())//3600
# if qual_days > 0:
if qual_hours > 0:
qualified = True
CloseKey(key)
return qualified
if __name__ == '__main__':
# patchlist = []
# updates = 'SOFTWARE\\Gutin\\Record'
# patch = re.compile('InstallDir.+')
# key = OpenKey(HKEY_CURRENT_USER, updates, access = KEY_READ)
# items = QueryInfoKey(key)
# print(items[1])
# for i in range(items[1]):
# item = EnumValue(key, i)
# name = item[0]
# value = item[1]
# type = item[2]
# if name and name.find('InstallDir')>=0:
# print(item)
print(check_run_state())
# print(items)
# CloseKey(key)