C++获取Windows 10特定进程网络发送接收速率

以下是一个C++示例代码,用于获取Windows 10中特定进程的网络流量的发送和接收速率:

#include <iostream>
#include <Windows.h>
#include <Psapi.h>
#include <tchar.h>
#include <vector>

// 获取特定进程的网络流量信息
void GetProcessNetworkUsage(DWORD processId, ULONGLONG& sentBytes, ULONGLONG& receivedBytes)
{
    MIB_TCPTABLE_OWNER_PID tcpTable;
    DWORD dwSize = sizeof(tcpTable);

    // 获取TCP连接表
    if (GetExtendedTcpTable(&tcpTable, &dwSize, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0) == ERROR_INSUFFICIENT_BUFFER)
    {
        free(tcpTable.table);
        tcpTable.table = (MIB_TCPROW_OWNER_PID*)malloc(dwSize);
    }

    // 重新获取TCP连接表
    if (GetExtendedTcpTable(&tcpTable, &dwSize, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0) == NO_ERROR)
    {
        // 遍历TCP连接表,查找特定进程的网络流量
        for (DWORD i = 0; i < tcpTable.dwNumEntries; i++)
        {
            if (tcpTable.table[i].dwOwningPid == processId)
            {
                sentBytes += tcpTable.table[i].dwBytesSent;
                receivedBytes += tcpTable.table[i].dwBytesReceived;
            }
        }
    }

    free(tcpTable.table);
}

int main()
{
    DWORD processId = 0; // 要获取网络流量的进程ID
    ULONGLONG sentBytes = 0; // 发送的字节数
    ULONGLONG receivedBytes = 0; // 接收的字节数

    // 获取进程ID
    HWND hwnd = FindWindow(NULL, _T('窗口标题'));
    if (hwnd != NULL)
    {
        GetWindowThreadProcessId(hwnd, &processId);
    }

    // 获取网络流量信息
    GetProcessNetworkUsage(processId, sentBytes, receivedBytes);

    std::cout << 'Sent Bytes: ' << sentBytes << std::endl;
    std::cout << 'Received Bytes: ' << receivedBytes << std::endl;

    return 0;
}

代码说明:

  1. 获取进程ID:
    • 使用 FindWindow 函数通过窗口标题查找对应窗口句柄。
    • 使用 GetWindowThreadProcessId 函数通过窗口句柄获取进程ID。
    • 需要将代码中的 '窗口标题' 替换为目标进程的实际窗口标题。
  2. 获取网络流量信息:
    • 使用 GetExtendedTcpTable 函数获取 TCP 连接表,该表包含了所有 TCP 连接的信息,包括每个连接的进程ID、发送字节数和接收字节数等。
    • 遍历 TCP 连接表,找到与目标进程ID匹配的连接,并累加其发送字节数和接收字节数。
  3. 输出结果:
    • 打印目标进程的发送字节数和接收字节数。

注意:

  • 此代码仅获取 TCP 连接的网络流量信息,不包括 UDP 连接。
  • 获取到的流量信息是累计值,如果需要获取实时速率,需要记录两次获取之间的差值并除以时间间隔。
  • 可以根据实际需求对代码进行修改,例如添加获取 UDP 流量信息、计算实时速率等功能。

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

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