C++获取Windows 10特定进程网络发送接收速率
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;
}
代码说明:
- 获取进程ID:
- 使用
FindWindow函数通过窗口标题查找对应窗口句柄。 - 使用
GetWindowThreadProcessId函数通过窗口句柄获取进程ID。 - 需要将代码中的
'窗口标题'替换为目标进程的实际窗口标题。
- 使用
- 获取网络流量信息:
- 使用
GetExtendedTcpTable函数获取 TCP 连接表,该表包含了所有 TCP 连接的信息,包括每个连接的进程ID、发送字节数和接收字节数等。 - 遍历 TCP 连接表,找到与目标进程ID匹配的连接,并累加其发送字节数和接收字节数。
- 使用
- 输出结果:
- 打印目标进程的发送字节数和接收字节数。
注意:
- 此代码仅获取 TCP 连接的网络流量信息,不包括 UDP 连接。
- 获取到的流量信息是累计值,如果需要获取实时速率,需要记录两次获取之间的差值并除以时间间隔。
- 可以根据实际需求对代码进行修改,例如添加获取 UDP 流量信息、计算实时速率等功能。
原文地址: https://www.cveoy.top/t/topic/fQA4 著作权归作者所有。请勿转载和采集!