是否有特定的方式来访问"任务管理器" Windows API的信息?我已经对此事进行了大量的搜索,但我似乎找不到能够告诉我的API调用:
有没有办法通过Python或C ++(基本上,通过Windows API)访问该信息?
这是我实际上要做的事情(伪代码):
app x = winapi.most_intensive_process
app y = winapi.most_RAM_usage
print x.name
print y.name
答案 0 :(得分:4)
不是直接调用Windows API,而是使用psutil
库,它是一个跨平台库,提供有关进程的大量信息。
它适用于Windows,Linux,Mac OS,BSD和Sun Solaris,并以32位和64位方式使用2.4至3.4的python。
特别是它的Process
课程有以下有趣的方法:
cpu_times
:流程从一开始就花费的用户和系统时间。cpu_percent
:自上次调用或在给定时间间隔内cpu利用率的百分比memory_info
:有关Ram和虚拟内存使用情况的信息。 注意:文档明确指出这些是taskmgr.exe
显示的内容,因此它看起来就像您想要的那样。memory_info_ex
:扩展内存信息。memory_percent
:进程使用的内存百分比。要迭代所有进程(例如,为了找到最多的CPU /内存),您可以迭代process_iter
。
这是您想要实现的目标的简单实现:
import psutil
def most_intensive_process():
return max(psutil.process_iter(), key=lambda x: x.cpu_percent(0))
def most_RAM_usage():
return max(psutil.process_iter(), key=lambda x: x.memory_info()[0])
x = most_intensive_process()
y = most_RAM_usage()
print(x.name)
print(y.name)
在我的系统上运行示例:
In [23]: def most_intensive_process():
...: # psutil < 2.x has get_something style methods...
...: return max(psutil.process_iter(), key=lambda x: x.get_cpu_percent(0))
...:
...: def most_RAM_usage():
...: return max(psutil.process_iter(), key=lambda x: x.get_memory_info()[0])
In [24]: x = most_intensive_process()
...: y = most_RAM_usage()
...:
In [25]: print(x.name, y.name)
firefox firefox
答案 1 :(得分:2)
您可以使用PSAPI函数检索有关RAM使用情况的信息,尤其是EnumProcesses
以查找系统中的所有进程,并GetProcessMemoryInfo
获取有关每个进程的信息&#39;内存使用情况。
您可以使用GetProcessTimes
检索每个进程的CPU使用情况。这并不总是完全准确,但我相信在相同的情况下,任务管理器会以相同的方式生成不准确的结果。
如果您需要,可以通过GetPerformanceInfo
获取有关系统整体内存使用情况的信息。
答案 2 :(得分:1)
您可以使用以下Windows API在 C / C ++程序中检索各种进程计数器。
它检索有关指定进程的内存使用情况的信息。
BOOL WINAPI GetProcessMemoryInfo(
_In_ HANDLE Process,
_Out_ PPROCESS_MEMORY_COUNTERS ppsmemCounters,
_In_ DWORD cb
);
MSDN上有完整的示例,解释了如何使用它来为您的流程检索此类信息。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682050%28v=vs.85%29.aspx
您已经提到过您希望连续获取信息(作为任务管理器会有一些时间间隔)。要实现这一点,您可能需要在函数内部编写完整的逻辑(在MSDN中提及)并在一段时间延迟后调用它( Sleep(1second))。这样您就可以获取所有这些程序的信息,直到它执行。