windows上的应用商店很难禁上,小朋友在家老是在上面下载游戏嗨皮,想着能不能将电脑进行管控呢?娱乐一下,供参考
主要管理功能:
- 不能打开应用商店,防止下载游戏,任何时间如有打开store将强制关闭电脑
- 在管控时间段时(即txt中写明的前面有标1时间段)内打开任意浏览器,将强制关闭电脑
- 记录小朋友在电脑上运行的应用或浏览器中浏览的内容标题
再设置为开机自启动,就可以有效的实现管控上网行为了.
import ctypes
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 6)
import win32gui, os, datetime
from time import sleep
'''
# 此脚本的作用,只有在指定的时间段内才可以使用电脑找开浏览器和应用商城,不然就会自动关机
# 时间段的编辑,可以有能过WPS office云空间进行设置
# 在本地盘上新建有一txt档,里面有写明那些时间段是可用电脑浏览器和应用商店,我自己是wps会员,可自动将此文件与云端同步,可实现随时对txt的修改,即时间的管控.
格式如下:前面的1代表此时间段用用,0代理不可用
1-10:30-11:00
1-11:30-12:00
1-13:00-14:00
1-14:30-15:00
1-15:30-16:00
1-16:30-17:00
1-17:00-18:00
1-19:00-21:00
主要管理功能:
1. 不能打开应用商店,防止下载游戏,任何时间如有打开store将强制关闭电脑
2. 在管控时间段时(即txt中写明的前面有标1时间段)内打开任意浏览器,将强制关闭电脑
3. 记录小朋友在电脑上运行的应用或浏览器中浏览的内容标题
'''
def get_time_range():
# 获取可用时间段
path = 'E:\\BaiduNetdiskWorkspace\\BaiduNetdiskWorkspace\\Other\\time.txt'
available_time_range = list()
try:
f = open(path, 'r')
except:
print('同步时发生异常,将等待2s后重试')
sleep(2)
f = open(path, 'r')
lines = f.readlines()
for line in lines:
line_list = line.strip().split('-')
# 将以上的可用时间段转到为datetime的格式
flag = int(line_list[0])
start_t = datetime.datetime.strptime(str(datetime.datetime.now().date()) + line_list[1], '%Y-%m-%d%H:%M')
end_t = datetime.datetime.strptime(str(datetime.datetime.now().date()) + line_list[2], '%Y-%m-%d%H:%M')
available_time_range.append([flag, start_t, end_t])
return available_time_range
# 获取最前窗口句柄
hwnd = win32gui.GetForegroundWindow()
# 设置为最前窗口
win32gui.SetForegroundWindow(hwnd)
# 获取窗口标题
win32gui.GetWindowText(hwnd)
# 通过类名或查标题找窗口
hwnd = win32gui.FindWindow(None, "C:\Windows\system32\cmd.exe")
# 显示窗口
win32gui.ShowWindow(hwnd,1)
# 第二个参数说明如下
from win32gui import *
# 获取所有活动窗口的标题
def get_window_title():
titles = set()
def foo(hwnd,nouse):
# 去掉下面这句就所有都输出了,但是我不需要那么多
if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd):
titles.add(GetWindowText(hwnd))
EnumWindows(foo, 0)
titles = [t for t in titles if t]
titles.sort()
return titles
def main():
cmd = 'shutdown -s -t 1 -f'
total = 1
while True:
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 6)
titles = get_window_title()
availabl_time_range = get_time_range()
if availabl_time_range == []:
total = 1
# 获取当前时间
now_time = datetime.datetime.now()
minute = now_time.minute # 分
second = now_time.second # 秒
microsecond = now_time.microsecond # 微秒
# 每10分钟记录一记次录一下当前打开的应用情况,保存在record.txt档中
if second == 0 and minute%10 == 0 and microsecond%12345 == 0:
# 打开record用于记录打开的应用情况
with open('E:\\BaiduNetdiskWorkspace\\BaiduNetdiskWorkspace\\Other\\record.txt', 'a+', encoding='utf-8') as f:
t = now_time.ctime()
content = f'{t} {microsecond}'
for title in titles:
content = f'{content}\n{title}'
content = content + '\n\n'
f.write(content)
# 确保同10分钟内只记录一次
sleep(0.1)
# 对浏览器在管控时间段内进行处理
for dt_time in availabl_time_range:
flag, start_t, end_t = dt_time
if flag == 0:
if start_t < now_time < end_t:
for t in titles:
if 'Microsoft? Edge' in t or 'Google Chrome' in t:
print(f'有浏览器在运行=>{total}', end='\r')
os.system(cmd)
total += 1
# 对应用商店进行处理
for t in titles:
if 'Microsoft Store' in t:
print(f'应用商店在运行', end='\r')
os.system(cmd)
if __name__ == '__main__':
main()
|