用脚本管控小朋友的上网行为可好?

windows上的应用商店很难禁上,小朋友在家老是在上面下载游戏嗨皮,想着能不能将电脑进行管控呢?娱乐一下,供参考

主要管理功能:

  1. 不能打开应用商店,防止下载游戏,任何时间如有打开store将强制关闭电脑
  2. 在管控时间段时(即txt中写明的前面有标1时间段)内打开任意浏览器,将强制关闭电脑
  3. 记录小朋友在电脑上运行的应用或浏览器中浏览的内容标题

再设置为开机自启动,就可以有效的实现管控上网行为了.

import ctypes
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 6)
    
import win32gui, os, datetime, pyautogui
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
    turn_on_flag = False
    
    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
        
        # 如鼠标移动至任务栏cmd位置,将自动移至其它位置. 防止脚本被手动关闭
        '''
        状态栏脚本窗口的左上角位置: 140, 854
        状态栏脚本窗口的右上角位置: 206, 899
        '''
        x,y  =  pyautogui.position()
        print(x, y, end='\r')
        if y>854 and x>140 and x<206:
                pyautogui.move(750,450)
                
        # 获取当前时间
        now_time = datetime.datetime.now()
        hour = now_time.hour # 小时
        minute = now_time.minute # 分
        second = now_time.second # 秒
        
        # 开机先写一次记录, 知道什么时候开机的
        if not turn_on_flag:
            with open('E:\\BaiduNetdiskWorkspace\\BaiduNetdiskWorkspace\\Other\\record.txt', 'a+', encoding='utf-8') as f:
                t = now_time.ctime()
                content = f'开机 {t}'
                content = content + '\n\n'
                f.write(content)
                turn_on_flag = True
            
        # 每10分钟记录一记次录一下当前打开的应用情况,保存在record.txt档中
        if second == 0 and minute%5 == 0:
            # 打开record用于记录打开的应用情况
            with open('E:\\BaiduNetdiskWorkspace\\BaiduNetdiskWorkspace\\Other\\record.txt', 'a+', encoding='utf-8') as f:
                t = now_time.ctime()
                content = f'{t}'
                for title in titles:
                    content = f'{content}\n{title}'
                content = content + '\n\n'
                f.write(content)
                # 确保同10分钟内只记录一次
                sleep(2)
                
        # 对浏览器在管控时间段内进行处理
        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:<20}{hour:>2}:{minute:>2}:{second:>2}', 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()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值