使用Python实现伪防沉迷工具

· 背景和需求

因为疫情期间嘛,老爹也只能开网课,线上教棋了,但是网课又不开摄像头的那种,根本不知道学生在干嘛,这不就有了一个学生在那表面上着网课实际上是在那玩游戏,被他妈妈逮了个正着…因此我老爹就想看看能不能上网课的时候让他只能用上网课的那个程序,而正好我在看python的psutil的模块,就尝试着帮我老爹写一个看看喽

· 分析

1. 首先我需要检测正在运行进程,之后找到在封禁名单内的主进程,之后shutdown就可,这部分psutil模块就可以实现
  2. 作为一个程序,我还是得写一个ui界面的,本来是想用tkinter的,不过Python这个标准GUI库功能确实不咋地,这里就现学了一下wxpython来作为程序的ui界面
  3. ui界面这里主要是要提供一个最小化到托盘以及推出功能,不然的话现在的这些家长不太知道怎么退出就比较头疼了

· 代码实现

1. 主逻辑部分

· 这里我们把主逻辑部分写到一个线程里,为此我们需要线程模块,这里从threading模块中导入Thread类,之后定义我们自己的线程类,继承自Thread,主逻辑放到重写的run()方法
  · 正式开始主逻辑部分,这里需要被限制程序的主进程名,为了以后好扩展,这里我们将这些主进程名放到一个列表里,之后通过转换为json格式存储到文件中,为此我写了一个config.py用来实现该功能

import json

# 存储限制进程列表到文件中去
def main():
    try:
        f = open('learn_tool.conf', 'w', encoding='utf-8')
        limit_process_list = ['DouyuLive.exe', 'QQGame.exe', 'MicrosoftEdge.exe', '360se.exe', '360chrome.exe',
                              'firefox.exe', 'chrome.exe', 'QQBrowser.exe', 'SogouExplorer.exe']
        json_list = json.dumps(limit_process_list)
        f.write(json_list)
    except LookupError:
        print('指定了未知编码!')
    except IOError as ex:
        print(ex)
        print('写文件时发生错误!')
    finally:
        f.close()

    print('操作成功!')


if __name__ == "__main__":
    main()

· 运行config.py就会生成存放限制进程名的配置文件:learn_tool.conf,之后也可以直接去这个文件中增添其他要限制的进程(ps:本来是应该在ui界面里加入这个增添限制进程功能的,有点懒,先放着吧)

· 之后在类中写一个前面的run()方法中打开该文件,将其从json格式转为list即可;关键在之后:这里直接设置死循环,因为要不断的检测是否有被限制进程,使用psutil.pids()获取所有当前正在运行的进程id的列表,之后for循环遍历,通过psutil.Process(pid).name()来__获取该pid对应的进程名__,之后判断进程名是否在限制进程的list中即可:不在,则继续循环;在,则调用terminate()方法来__关闭进程__

# 自定义限制进程
class AntiInsertion(Thread):
    def run(self):
        # 获取要限制的进程列表
        limit_process_list = self.read_conf('learn_tool.conf')

        while True:
            # 存放正在运行的限制进程的信息
            now_run_limit_process_list = []
            # 获取当前正在运行的所有进程的pid
            try:
                now_pids = psutil.pids()       # 当前所有进程pid的list
                for pid in now_pids:
                    if pid in psutil.pids():
                        _p = psutil.Process(pid)    # 获取每个进程
                        if _p.name() in limit_process_list:
                            now_run_limit_process_list.append(_p)

                for i in now_run_limit_process_list:
                    if i.pid in psutil.pids():
                        log.my_log(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
儿童游戏计时器使用说明 该小工具可以对孩子玩游戏的时间进行控制,让孩子自己学会使用自己的积分。 这个程序是我为了管理在静安一师附小上小学女儿经常玩在线小游戏,自己随意写的。原理是控制系统的hosts文件(目前只支持系统安装C盘),使在线游戏的网页无法打开,从而控制孩子随意玩游戏。 当孩子开始计时玩游戏的时候,系统将本程序文件夹下面的没有限制的hosts_yes文件替换掉系统hosts文件,系统开始玩游戏计时,然后就可以打开网页访问游戏网站并玩游戏了。 当计时结束,系统将本程序文件夹下面的限制游戏域名的hosts_no文件替换掉系统hosts文件,并自动关机。由于hosts文件限制了游戏域名,无法打开游戏网页,当然也无法玩游戏了。 家长可提前给孩子一定的积分,每个积分可以玩10分钟的游戏,家长也可以日常根据孩子的表现,给孩子加积分。我是当孩子平时考试得100就给2积分,自己主动学习英语给1积分等等。 家长使用: 第一次运行并退出一次,就限制了一些常用的在线小游戏域名了。 家长设置功能是需要密码(默认111)的,包括表现增加积分、设置禁用域名、系统设置,系统设置包括修改家长管理密码和设置孩子每次最多能使用几个积分 孩子使用: 孩子可打开计时器,并选择使用几个积分来玩游戏(1积分可玩10分钟),然后点击开始玩游戏,系统开始计时,这时候就可以打开相关的游戏网页并玩游戏了。 程序用delphi7写的,如有问题或者需要源码自己修改,请联系[email protected] 石头 由于涉及到修改hosts文件,主程序有时可能被360安全卫士隔离,可设置360对该程序为信任。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值