如何使用Python实现一个简单的window任务管理器

2025-03-25 02:50

本文主要是介绍如何使用Python实现一个简单的window任务管理器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起...

任务管理器效果图

如何使用Python实现一个简单的window任务管理器

完整代码

import tkinter as tk
from tkinter import ttk
import psutil
 
# 运行此代码前,请确保已经安装了 psutil 库,可以使用 pip install psutil 进行安装。
# 由于获取进程信息可能会受到权限限制,某些进程的信息可能无法获取,代码中已经对可能出现的异常进行了处理。
 
def get_process_info():
    process_list = []
    for proc in psutil.process_iter(['pid', 'name', 'memory_percent']):
        try:
            pid = proc.info['pid']
            name = proc.info['name']
            mem_percent = proc.info['memory_percent']
            process_list.append((pid, name, f'{mem_percent:.2f}%'))
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            continue
    return process_list
 
 
def populate_table():
    for item in process_table.get_children():
        process_table.delete(item)
    processes = get_process_info()
    for pid, name, mem_percent in processes:
        mem_value = float(mem_percent.strip('%'))
        tag = ""
        if mem_value > 10:
            tag = "high_mem"
        elif mem_value > 5:
            tag = "medium_mem"
        process_table.insert('', 'end', values=(pid, name, mem_percent), tags=(tag,))
 
    # 设置标签样式
    process_table.tag_configure("high_mem", foreground="red")
    process_table.tag_configure("medium_mem", foreground="green")
 
 
def sort_table(column, reverse):
    data = [(process_table.set(item, column), item) for item in process_table.get_children('')]
    if column == 'PID':
        data.sort(key=lambda t: int(t[0]), reverse=reverse)
    elif column == '内存占用率':
        data.sort(key=lambda t: float(t[0].strip('%')), reverse=reverse)
    else:
        data.sort(key=lambda t: t[0], reverse=reverse)
 
    for index, (_, item) in enumerate(data):
        process_table.move(item, '', index)
 
    process_table.heading(column, command=lambda: sort_table(column, not reverse))
 
 
root = tk.Tk()
root.title("任务管理器")
root.geometry("700x500")
root.configure(bg="#f4f4f9")
 
style = ttk.Style()
style.theme_use('clam')
style.configure('Treeview', background="#e9e9f3", foreground="#333", fieldbackground="#e9e9f3",
                rowheight=25, font=('Segoe UI', 10))
style.map('Treeview', background=[('selected', '#73a6ff')])
style.configure('Treeview.Heading', background="#d1d1e0", foreground="#333", font=('Segoe UI', 10, 'bold'))
 
columns = ('PID', '进程名称', '内存占用率')
process_table = ttk.Treeview(root, columns=columns, show='headings')
for col in columns:
    process_table.heading(col, text=col, command=lambda c=col: sort_table(c, False))
    process_table.column(col, width=200, anchor='center')
process_table.pack(pady=20, padx=20, fill=tk.BOTH, expand=True)
 
populate_table()
 
refresh_button = ttk.Button(root, text="刷新", command=populate_table)
refresh_button.pack(pady=10)
 
root.mainloop()

方法扩展

python调用Windows API实现任务管理器功能

任务管理器具体功能有:

1、 列出系统当前所有进程。

2、 列出隶属于该进程的所有线程。

3、 如果进程有窗口,可以显示和隐藏窗口。

4、 强行结束指定进程。

通过Python调用Windows API还是很实用的,能够结合Python的简洁和Windows API的强大,写出各种各样的脚本

编码中的几个难点有:

调用API的具体方式是什么?

答:通过win32模块或ctypes模块。前者更简便,后者函数库更全。

不熟悉Windows pythonAPI怎么办?

通过API伴侣这个软件查询API所在的DLL库,通过MSDN查询API的详细解释等等。

完整代码如下:

import os
# import win32api
import win32gui
impQeGJWYtgEVort win32process
from ctypes import *
 
 
# 列出系统当前所有进程。
def getProcessList():
    os.system("tasklist")
 
 
# 结构体
class THREADENTRY32(Structure):
    _fields_ = [('dwSize', c_ulong),
                ('cntUsage', c_ulong),
                ('th32ThreadID', c_ulong),
                ('th32OwnerProcessID', c_ulong),
                ('tpBasePri', c_long),
                ('tpDeltaPri', c_long),
                ('dwFlags', c_ulong)]
 
 
# 获取指定进程的所有线程
def getThreadOfProcess(pid):
    dll = windll.LoadLibrary("KERNEL32.DLL")
    snapshotHandle = dll.CreateToolhelp32Snapshot(0x00000004, pid)
    struct = THREADENTRY32()
    struct.dwSize = sizeof(THREADENTRY32)
    flag = dll.Thread32First(snapshotHandle, byref(struct))
 
    while flag != 0:
        if(struct.th32OwnerProcessID == int(pid)):
            print("线程id:"+str(struct.th32ThreadID))
        flag = dll.Thread32Next(snapshotHandle, byref(struct))
    dll.CloseHandle(snapshotHandle)
 
 
# EnumWindows的回调函数
def callback(hwnd, windows):
    pidList = win32process.GetWindowThreadProcessId(hwnd)
    for pid in pidList:
        windows.setdefault(pid, [])
        windows[pid].append(hwnd)
 
 
# 显示和隐藏指定进程的窗口
def changeWindowState(pid, status):
    windows = {}
    win32gui.EnumWindows(callback, windows)
    try:
        hwndList = windows[int(pid)]
        # 显示/隐藏窗口
        for hwnd in hwndList:
            win32gui.ShowWindow(hwnd, int(status))
    except:
        print("进程不存在")
 
 
# 强行结束指定进程
def killProcess(pid):
    cmd = 'taskkill /pid ' + pid + ' /f'
    try:
        os.system(cmd)
    except Exception as e:
        print(e)
 
 
if __name__ == "__main__":
    while(True):
        print()
        print()
        print("************************************")
        print("*                                  *")
        print("*     进程管理器                   *")
        print("*                                  *")
        print("*     1.获取所有进程               *")
        print("*    python 2.获取指定进程的所有线程     *")
        print("*     3.显示和隐藏指定进程的窗口   *")
        print("*     4.强行结束指定进程           *")
        print("*                                  *")
        print("************************************")
        option = input("请选择功能:")
 
        if option == "1":
            getProcessList()
        elif option == "2":
            pid = input("请输入进程的pid:")
            getpythonThreadOfProcess(pid)
        elif option == "3":
            pid = input("请输入进程的pid:")
            status = input("隐藏输入0,显示输入1:")
            changeWindowState(pid, status)
        elif option == "4":
            pid = input("请输入进程的pid:")
      www.chinasem.cn      killProcess(pid)
        else:
            exit()

到此这篇关于如何使用Python实现一个简单的window任务管理器的文章就介绍到这了,更多相关Python任务管理器内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于如何使用Python实现一个简单的window任务管理器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153924

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入