【监测应用的资源占用】怎么使用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:表明松开鼠标中键。
keybd_event(‘a’,0,0,0); //按下a键
keybd_event(‘a’,0,KEYEVENTF_KEYUP,0); //松开a键
我可以给出一些指导和代码示例来实现该功能:
pip install pywin32
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)
pip install matplotlib
import matplotlib.pyplot as plt
# 生成图表
x = ['Process 1', 'Process 2', 'Process 3']
y = [80, 50, 20]
plt.bar(x, y)
# 显示图表
plt.show()
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使用率和内存占用情况。通过定期记录这些信息,您可以跟踪应用程序的资源占用情况。您还可以根据需要对此代码进行修改,并将其集成到自己的应用程序中,以实现自定义的资源监测功能。