Python 获取进程C+的内存和CPU+;

Python 获取进程C+的内存和CPU+;,python,c++,memory,process,cpu,Python,C++,Memory,Process,Cpu,我需要获取计算机中运行的每个进程的所有可用信息 这包括:CPU信息,如CPU使用率等,以及内存 我使用CreateToolhelp32Snapshot和Process32Entry来获取进程名称、进程ID、线程数等信息 然后使用OpenProcess和我从上面获得的ID来获取内存信息 代码运行良好。但是OpenProcess在很多进程上返回拒绝访问,所以我无法获得它们的内存信息,这是不好的 但这是可能的,因为我可以从psutil库(Python)获取此信息 我也来过,但是没有提供很多关于记忆的信

我需要获取计算机中运行的每个进程的所有可用信息 这包括:CPU信息,如CPU使用率等,以及内存

我使用CreateToolhelp32Snapshot和Process32Entry来获取进程名称、进程ID、线程数等信息

然后使用OpenProcess和我从上面获得的ID来获取内存信息

代码运行良好。但是OpenProcess在很多进程上返回拒绝访问,所以我无法获得它们的内存信息,这是不好的

但这是可能的,因为我可以从psutil库(Python)获取此信息

我也来过,但是没有提供很多关于记忆的信息

是否有任何方法可以绕过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;
void GetMemoryInfo(DWORD进程ID、int索引、进程列表[])
{
处理hProcess;
进程\内存\计数器pmc;
//打印进程标识符。
printf(“\n进程ID:%u\n”,进程ID);
//打印有关进程内存使用情况的信息。
hProcess=OpenProcess(PROCESS\u ALL\u ACCESS,FALSE,processID);
if(NULL==hProcess)

不能只有特权进程才能获取有关其他用户拥有的进程的信息。我已尝试以管理员身份运行该进程。没有成功。如何使该进程具有@barmar特权