Python检测后台存活实现脚本暂停、继续、结束(GUI界面版、系统托盘版)

        由于我的子系统经常自启动占用后台很大,任务管理器还无法直接关闭必须要用命令行,平常还好一到需要用到一些占用大的软件就非常卡,我想到了Python的os库可以去引用system函数来调用shell

import os

os.system('wsl --shutdown kali-linux')

        但是这样太麻烦了,好像还不能完全解放劳动力,这样我还需要自己来看子系统是否自启动,此时我想到了psutil库,这个库可以检测进程,再加上无线循环

import os, psutil

while Ture:
    for proc in psutil.process_iter():
        if proc.name() == "vmmem":
            os.system('wsl --shutdown kali-linux')
        else:
            continue

        如此看来确实方便很多,但是作为一个懒人,每次我用完还要去找去运行,即便封装了也感觉还是很不方便,这个时候我想到了python的线程好像是可以实现暂停的,再加上GUI界面是不是就可以实现暂停和继续呢,这里我用tkinter库来实现GUI界面,我还加上了plyer库来显示提示信息

from tkinter import *
import psutil,os,threading
from plyer import notification


class kill_kali_linux(threading.Thread):
    def __init__(self, *args, **kwargs):
        super(kill_kali_linux, self).__init__(*args, **kwargs)
        self.__flag = threading.Event()
        self.__flag.set()
        self.__running = threading.Event()
        self.__running.set()

    def run(self,):
        while self.__running.is_set():
            self.__flag.wait()
            for proc in psutil.process_iter():
                if proc.name() == "vmmem":
                    os.system('wsl --shutdown kali-linux')
                    notification.notify(title = "Python通知",message = "已检测到进程“vmmem”存在自动kill中",timeout = 3)



    def pause(self):
        self.__flag.clear()

    def resume(self):
        self.__flag.set()

    def stop(self):
        self.__flag.set()
        self.__running.clear()

if __name__ == "__main__":
    a=kill_kali_linux()
    a.daemon = True
    root = Tk()
    root.title("Python检测子系统自启动界面")
    var1=StringVar()
    zt = True
    a.start()
    var1.set("目前状态:开启")
    def hit_me():
        global zt
        if zt:
            zt = False
            a.pause()
            var1.set("目前状态:暂停")
        else:
            zt = True
            a.resume()
            var1.set("目前状态:开启")
    but=Button(root,text = "点击-->切换功能",width = 15,height = 5,command = hit_me)
    but.pack(side = LEFT)
    lab = Label(root, textvariable = var1, bg = 'green', font = ('Arial', 12), width = 15, height = 5)
    lab.pack(side = LEFT)
    root.mainloop()

效果图展示:

        对于我这种有强迫症的懒人来说,桌面上放着这样一个丑东西,属实碍眼,这个时候我想到QQ 、微信等一些程序有托盘而且右键可以扩展,托盘显然是一个好的选择,这里我用的是pystray库

from PIL import Image
from plyer import notification
from pystray import *
import threading,psutil,os,sys,pystray,time
from pystray import Icon as icon, Menu as menu, MenuItem as item


class kill_kali_linux(threading.Thread):

    def __init__(self, *args, **kwargs):
        super(kill_kali_linux, self).__init__(*args, **kwargs)
        self.__flag = threading.Event()
        self.__flag.set()
        self.__running = threading.Event()
        self.__running.set()

    def run(self):
        while self.__running.is_set():
            self.__flag.wait()
            for proc in psutil.process_iter():
                if proc.name() == "vmmem":
                    os.system('wsl --shutdown kali-linux')
                    # icon.notify("已检测到进程“vmmem”存在自动kill中")
                    notification.notify(title = "Python通知",message = "已检测到进程“vmmem”存在自动kill中",timeout = 3)


    def pause(self):
        self.__flag.clear()

    def resume(self):
        self.__flag.set()

    def stop(self):
        self.__flag.set()
        self.__running.clear()



a = kill_kali_linux()
a.daemon=True


run_start_kali_linux_state = False
run_pause_kali_linux_state = False
run_resume_kali_linux_state = False
run_stop_kali_linux_state = False
start_a_and_b = True
stop_a_and_b = False
resume_a_and_b = False
pause_a_and_b = False


def run_start_kali_linux(icon:pystray.Icon, item, ):
    global run_start_kali_linux_state
    global stop_a_and_b
    global run_resume_kali_linux_state
    global pause_a_and_b
    global start_a_and_b
    start_a_and_b = False
    pause_a_and_b = True
    stop_a_and_b = True
    run_resume_kali_linux_state = True
    run_start_kali_linux_state = not item.checked
    a.start()
    if a.is_alive():
        icon.notify("启动脚本\n脚本已启动")

def run_pause_kali_linux(icon:pystray.Icon, item, ):
    global run_pause_kali_linux_state
    global run_resume_kali_linux_state
    global run_start_kali_linux_state
    global start_a_and_b
    global stop_a_and_b
    global resume_a_and_b
    start_a_and_b = False
    run_start_kali_linux_state = False
    resume_a_and_b = True
    stop_a_and_b = True
    run_pause_kali_linux_state = not item.checked
    run_resume_kali_linux_state = False
    a.pause()
    if a.is_alive():
        icon.notify("暂停脚本\n脚本已暂停")

def run_resume_kali_linux(self:pystray.Icon, item, ):
    global run_resume_kali_linux_state
    global run_start_kali_linux_state
    global run_pause_kali_linux_state
    global start_a_and_b
    global resume_a_and_b
    resume_a_and_b = False
    start_a_and_b = False
    run_pause_kali_linux_state = False
    run_resume_kali_linux_state = not item.checked
    run_start_kali_linux_state = True
    a.resume()
    if a.is_alive():
        self.notify("开启脚本\n脚本已开启")

def run_stop_kali_linux(icon:pystray.Icon, item, ):
    global run_stop_kali_linux_state
    global run_start_kali_linux_state
    global run_resume_kali_linux_state
    global run_pause_kali_linux_state
    global stop_a_and_b
    global pause_a_and_b
    global start_a_and_b
    global resume_a_and_b
    resume_a_and_b = False
    start_a_and_b = False
    pause_a_and_b = False
    stop_a_and_b = False
    run_pause_kali_linux_state = False
    run_resume_kali_linux_state = False
    run_start_kali_linux_state = False
    run_stop_kali_linux_state = not item.checked
    a.stop()
    if not a.is_alive():
        icon.notify("关闭脚本\n脚本关闭意味着线程关闭,请重启后开启脚本")
    # a = kill_kali_linux()
    # a.daemon = True

def restart(icon:pystray.Icon, item, ):
    icon.notify("重启脚本\n脚本已重启")
    time.sleep(0.5)
    python = sys.executable
    os.execl(python, python, *sys.argv)

def on_exit(icon:pystray.Icon, item):
    icon.notify("关闭脚本\n脚本已关闭")
    time.sleep(0.5)
    icon.stop()


image = Image.open("1.jpg")
icon('test', image, menu = menu(
    item('功能列表',
        menu(
            MenuItem(text = '启动脚本', action = run_start_kali_linux, checked = lambda item: run_start_kali_linux_state, enabled = lambda item:start_a_and_b),
            MenuItem(text = '暂停脚本', action = run_pause_kali_linux, checked = lambda item: run_pause_kali_linux_state, enabled = lambda item:pause_a_and_b),
            MenuItem(text = '开启脚本', action = run_resume_kali_linux, checked = lambda item: run_resume_kali_linux_state, enabled = lambda item:resume_a_and_b),
            MenuItem(text = '停止脚本', action = run_stop_kali_linux, checked = lambda item: run_stop_kali_linux_state, enabled = lambda item:stop_a_and_b),
        )
    ),
    item("程序列表",
         menu(
             MenuItem(text = '重启脚本', action = restart),
             MenuItem(text = '退出脚本', action = on_exit),
         )
    ),
    MenuItem(text = 'Python检测子系统启动', action = run_start_kali_linux, default = True, visible = False,checked = lambda item:run_start_kali_linux_state),
)
     ).run()

 可以创建bat+vbs来取消窗口

环境:脚本文件名:1-TP.py,bat如下:

python 1-TP.py

环境:bat文件名: 1-TP.bat,vbs如下:

Set ws = CreateObject("Wscript.Shell")
ws.run"cmd /c 1-TP.bat",0

 创建一个vbs的快捷方式,放入启动项中,就可以实现开机自启。

求关注、求点赞!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值