要获取 Windows 下资源监视器的网络活动进程中指定进程的发送和接收速率,可以使用 Windows API 函数来实现。

首先,需要使用函数GetTcpTable2获取当前系统中的 TCP 连接信息。这个函数会返回一个MIB_TCPTABLE2结构体,其中包含了所有的 TCP 连接信息。

然后,遍历MIB_TCPTABLE2结构体中的每个连接,找到指定进程的连接。可以通过比较dwOwningPid字段来判断连接所属的进程。

一旦找到指定进程的连接,可以使用GetPerTcpConnectionEStats函数来获取连接的统计信息。这个函数会返回一个TCP_ESTATS_DATA_ROD_v0结构体,其中包含了连接的发送和接收速率。

以下是一个示例代码,展示了如何获取指定进程的网络发送和接收速率:

#include <iostream>
#include <windows.h>
#include <iphlpapi.h>
#include <tcpestats.h>

#pragma comment(lib, "iphlpapi.lib")

int main()
{
    DWORD pid = 1234; // 指定进程的 PID
    MIB_TCPTABLE2* tcpTable = NULL;
    DWORD tcpTableSize = 0;

    // 获取TCP连接信息
    if (GetTcpTable2(tcpTable, &tcpTableSize, TRUE) == ERROR_INSUFFICIENT_BUFFER)
    {
        tcpTable = (MIB_TCPTABLE2*)malloc(tcpTableSize);
        if (GetTcpTable2(tcpTable, &tcpTableSize, TRUE) != NO_ERROR)
        {
            std::cout << "Failed to get TCP table." << std::endl;
            return 1;
        }
    }
    else
    {
        std::cout << "Failed to get TCP table size." << std::endl;
        return 1;
    }

    // 遍历TCP连接
    for (DWORD i = 0; i < tcpTable->dwNumEntries; i++)
    {
        MIB_TCPROW2 row = tcpTable->table[i];

        // 找到指定进程的连接
        if (row.dwOwningPid == pid)
        {
            TCP_ESTATS_DATA_ROD_v0 stats;
            DWORD statsSize = sizeof(stats);

            // 获取连接的统计信息
            if (GetPerTcpConnectionEStats(&row, TcpConnectionEstatsData, NULL, 0, &stats, statsSize, 0) == NO_ERROR)
            {
                std::cout << "Process ' << pid << ' send rate: ' << stats.SndCongestionExperienced << ' bytes/s' << std::endl;
                std::cout << "Process ' << pid << ' receive rate: ' << stats.RcvDataBytes / stats.RcvDataSegments << ' bytes/s' << std::endl;
            }
            else
            {
                std::cout << "Failed to get connection statistics." << std::endl;
            }
        }
    }

    free(tcpTable);
    return 0;
}

请注意,上述代码仅获取了指定进程的一个连接的发送和接收速率。如果指定进程有多个连接,需要在遍历连接时累加速率值。另外,上述代码仅适用于 TCP 连接,如果需要获取 UDP 连接的速率,需要使用GetUdpTable2函数和UDP_ESTATS_DATA_ROD_v0结构体。


原文地址: https://www.cveoy.top/t/topic/fSC0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录