关于#python#的问题:【监测应用的资源占用】怎么使用pywin32等库实时读取任务管理器中显示的应用信息,以达到监测应用的资源占用情况

【监测应用的资源占用】怎么使用pywin32等库实时读取任务管理器中显示的应用信息,以达到监测应用的资源占用情况

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7668652
  • 这篇博客你也可以参考下:安装pywin32时注册表中无Python3.6安装路径解决方法
  • 除此之外, 这篇博客: [python]用pywin32库实现鼠标键盘自动控制中的 一、几个用到的函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.SetCursorPos(x,y)函数:该函数把光标移到屏幕的指定位置,但是并没有点击。

    2.mouse_event()函数:函数综合鼠标击键和鼠标动作

    mouse_event(win32con.flag, 0, 0, 0, 0):

    Flag:

    MOUSEEVENTF_MOVE:表明发生移动。

    MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。

    MOUSEEVENTF_LEFTUP:表明松开鼠标左键。

    MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。

    MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。

    MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。

    MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。

    1. keybd_event:一共分为两种按下和松开

    keybd_event(‘a’,0,0,0); //按下a键
    keybd_event(‘a’,0,KEYEVENTF_KEYUP,0); //松开a键

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以给出一些指导和代码示例来实现该功能:

    1. 首先需要安装pywin32库,可以在命令行中使用以下命令进行安装:
    pip install pywin32
    
    1. 然后需要获取任务管理器中程序的资源占用情况,可以使用pywin32库中的win32com.client模块中的GetObject方法获取WMI对象。代码如下:
    import win32com.client
    
    # 获取WMI对象
    objWMI = win32com.client.GetObject('winmgmts:')
    
    # 获取进程信息
    processes = objWMI.ExecQuery('select * from Win32_Process')
    
    # 遍历进程信息,输出进程名称和占用率
    for process in processes:
        print(process.Name, process.PercentProcessorTime)
    
    1. 将获取到的资源占用情况输出为可视化的图表可以使用matplotlib库。首先需要安装该库,可以在命令行中使用以下命令进行安装:
    pip install matplotlib
    
    1. 然后可以使用matplotlib库的pyplot模块将资源占用率输出为图表。代码如下:
    import matplotlib.pyplot as plt
    
    # 生成图表
    x = ['Process 1', 'Process 2', 'Process 3']
    y = [80, 50, 20]
    plt.bar(x, y)
    
    # 显示图表
    plt.show()
    
    1. 最后需要将获取资源占用情况和生成图表的过程实时化。可以使用Python的多线程功能,在一个子线程中每隔一段时间获取资源占用情况并生成图表,在主线程中显示图表。代码如下:
    import threading
    import time
    import win32com.client
    import matplotlib.pyplot as plt
    
    # 获取WMI对象
    objWMI = win32com.client.GetObject('winmgmts:')
    
    # 生成图表函数
    def plot_graph():
        while True:
            # 获取进程信息
            processes = objWMI.ExecQuery('select * from Win32_Process')
    
            # 处理进程信息为列表形式
            data = []
            for process in processes:
                data.append({'name': process.Name, 'cpu': process.PercentProcessorTime})
    
            # 根据CPU占用率排序
            data = sorted(data, key=lambda d: -d['cpu'])
    
            # 取出CPU占用率前三的进程
            names = []
            cpus = []
            for i in range(min(3, len(data))):
                names.append(data[i]['name'])
                cpus.append(data[i]['cpu'])
    
            # 生成图表
            plt.clf()
            plt.bar(names, cpus)
            plt.title('CPU Usage')
            plt.xlabel('Process Name')
            plt.ylabel('CPU Usage (%)')
            plt.ylim([0, 100])
            plt.draw()
            plt.pause(0.5)
    
    # 创建并启动子线程
    thread = threading.Thread(target=plot_graph)
    thread.start()
    
    # 主线程中显示图表
    plt.show()
    

    以上代码可以实现实时获取CPU占用率并以图表形式展示。可以根据需要对代码进行修改和调整。

要使用Python监测应用程序的资源占用情况,您可以使用pywin32库来访问Windows任务管理器,并实时读取应用程序的信息。以下是一个简单的示例代码:

import win32api  
import win32con  
import win32process  
import time  
  
def get_process_info(pid=None):  
    process_info = win32process.GetProcessInfo(pid)  
    if not process_info:  
        return None  
      
    # 获取进程名称和ID  
    process_name = win32process.GetProcessName(pid)  
    process_id = process_info[0]  
      
    # 获取CPU使用率和内存占用情况  
    cpu_time = process_info[4] * win32process.CLK_TCK / float(1000000)  
    mem_info = win32process.GetProcessMemoryInfo(pid)  
    working_set_size = mem_info['WorkingSetSize'] / (1024 * 1024) # 单位:MB  
      
    return {  
        'ProcessName': process_name,  
        'ProcessID': process_id,  
        'CPUUsage': cpu_time,  
        'WorkingSetSize': working_set_size,  
    }  
  
def monitor_process():  
    pid = int(input("请输入要监测的应用程序ID:"))  
    while True:  
        process_info = get_process_info(pid)  
        if not process_info:  
            print("无法获取进程信息,请检查输入的进程ID是否正确。")  
            continue  
        print(f"Process Name: {process_info['ProcessName']}, Process ID: {process_info['ProcessID']}, CPU Usage: {process_info['CPUUsage']:.2f}%, Working Set Size: {process_info['WorkingSetSize']:.2f} MB")  
        time.sleep(1)  
  
if __name__ == '__main__':  
    monitor_process()

这个程序将要求您输入要监测的应用程序ID,然后它将每隔一秒钟打印一次该应用程序的名称、ID、CPU使用率和内存占用情况。通过定期记录这些信息,您可以跟踪应用程序的资源占用情况。您还可以根据需要对此代码进行修改,并将其集成到自己的应用程序中,以实现自定义的资源监测功能。