我需要得到计算机中运行的每个进程的所有可用信息 这包括:CPU信息,比如CPU使用率等等。在
我使用CreateToolhelp32Snapshot和Process32Entry来获取诸如进程名、进程ID、线程数等信息。在
然后使用OpenProcess和我从上面得到的ID来获取内存信息。在
代码运行良好。但是OpenProcess在很多进程上返回被拒绝的访问,所以我无法获得它们的内存信息,这是不好的。在
但这是有可能的,因为我可以从psutil libary(Python)获得这些信息
我也来过accros WMI,但没有给出太多关于内存的信息。。在
有没有什么方法可以绕过OpenProcess被拒绝的访问并仍然获取信息?在
每个进程都有另一个方法来获取所有信息?在
如果没有什么好的解决办法: 有选择运行Python脚本并将信息获取到一个C++内存中的矩阵吗?我不想把它写到一个文件中,从文件中读取C++,因为它非常慢,时间很关键。在
以下是代码:
void GetMemoryInfo(DWORD processID, int index, ProcessT list[])
{
HANDLE hProcess;
PROCESS_MEMORY_COUNTERS pmc;
// Print the process identifier.
printf("\nProcess ID: %u\n", processID);
// Print information about the memory usage of the process.
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
if (NULL == hProcess)
cout << GetLastError();
if (GetProcessMemoryInfo(hProcess, &pmc, sizeof(pmc)))
{
list[index].pMemory.PagefileUsage = pmc.PagefileUsage;
list[index].pMemory.PeakPagefileUsage = pmc.PeakPagefileUsage;
list[index].pMemory.PeakWorkingSetSize = pmc.PeakWorkingSetSize;
list[index].pMemory.QuotaNonPagedPoolUsage = pmc.QuotaNonPagedPoolUsage;
list[index].pMemory.QuotaPagedPoolUsage = pmc.QuotaPagedPoolUsage;
list[index].pMemory.QuotaPeakNonPagedPoolUsage = pmc.QuotaPeakNonPagedPoolUsage;
list[index].pMemory.QuotaPeakPagedPoolUsage = pmc.QuotaPeakPagedPoolUsage;
list[index].pMemory.PageFaultCount = pmc.PageFaultCount;
}
}
int showProcessInformation(ProcessT list[]) {
int i = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot) {
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe32)) {
do {
list[i].pExeName = pe32.szExeFile;
list[i].pID = pe32.th32ProcessID;
list[i].thredcnt = pe32.cntThreads;
GetMemoryInfo(list[i].pID, i, list);
i++;
} while (Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
}
return i;
}
目前没有回答
相关问题 更多 >
编程相关推荐