C++ 获取 Windows 资源监视器中指定进程的网络发送字节数

在 Windows 下,可以使用 GetTcpTable2 函数获取当前系统中所有 TCP 连接的信息,包括每个连接的本地和远程地址、本地和远程端口等。通过遍历这些连接,找到指定进程的 TCP 连接,即可获取其发送字节数。

以下是一个示例代码,演示如何获取指定进程的网络发送字节数:cpp#include #include #include <winsock2.h>#include <iphlpapi.h>#include <tlhelp32.h>

#pragma comment(lib, 'iphlpapi.lib')#pragma comment(lib, 'ws2_32.lib')

// 根据进程名获取进程 IDDWORD GetProcessIdByName(const std::wstring& processName) { PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32);

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    if (hSnapshot == INVALID_HANDLE_VALUE) {        return 0;    }

if (Process32First(hSnapshot, &pe32)) {        do {            if (processName.compare(pe32.szExeFile) == 0) {                CloseHandle(hSnapshot);                return pe32.th32ProcessID;            }        } while (Process32Next(hSnapshot, &pe32));    }

CloseHandle(hSnapshot);    return 0;}

// 获取指定进程的网络发送字节数ULONGLONG GetProcessNetworkBytesSent(DWORD processId) { MIB_TCPTABLE2* pTcpTable = nullptr; DWORD dwSize = 0;

// 获取 TCP 连接表的大小    if (GetTcpTable2(pTcpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER) {        pTcpTable = (MIB_TCPTABLE2*)malloc(dwSize);        if (pTcpTable == nullptr) {            return 0;        }    } else {        return 0;    }

// 获取 TCP 连接表    if (GetTcpTable2(pTcpTable, &dwSize, TRUE) == NO_ERROR) {        ULONGLONG totalBytesSent = 0;

    // 遍历所有 TCP 连接        for (DWORD i = 0; i < pTcpTable->dwNumEntries; i++) {            MIB_TCPROW2* pTcpRow = &pTcpTable->table[i];            // 找到指定进程的 TCP 连接            if (pTcpRow->dwOwningPid == processId) {                totalBytesSent += pTcpRow->dwBytesSent;            }        }

    free(pTcpTable);        return totalBytesSent;    }

free(pTcpTable);    return 0;}

int main() { std::wstring processName = L'YourProcess.exe'; // 指定进程名 DWORD processId = GetProcessIdByName(processName); if (processId != 0) { ULONGLONG bytesSent = GetProcessNetworkBytesSent(processId); std::cout << '进程 ' << processName << ' 发送的字节数:' << bytesSent << std::endl; } else { std::cout << '未找到该进程' << std::endl; }

return 0;}

代码说明:

  1. GetProcessIdByName 函数:根据进程名获取进程 ID。2. GetProcessNetworkBytesSent 函数:获取指定进程的网络发送字节数。 - 首先调用 GetTcpTable2 函数获取 TCP 连接表的大小,然后分配足够的内存。 - 再次调用 GetTcpTable2 函数获取 TCP 连接表。 - 遍历所有 TCP 连接,找到指定进程的连接,累加其发送字节数。3. 在 main 函数中,首先指定要查询的进程名,然后调用 GetProcessIdByName 函数获取进程 ID,最后调用 GetProcessNetworkBytesSent 函数获取网络发送字节数并打印输出。

注意:

  • 需要包含 winsock2.hiphlpapi.htlhelp32.h 头文件,并链接 iphlpapi.libws2_32.lib 库。- 将代码中的 YourProcess.exe 替换为实际的进程名。- 该代码仅获取 TCP 连接的发送字节数,不包括 UDP 连接。
C++ 获取 Windows 资源监视器中指定进程的网络发送字节数

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

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