当前位置: 首页 > news >正文

Win10系统获取网络上行流量的三种方法

一.方法一

1.查看任务管理器,操作最简单

二.方法二

1.命令行方式

  cmd命令

  typeperf -sc 1 "\Network Interface(*)\Bytes Received/sec"

返回内容:

"(PDH-CSV 4.0)","\\DESKTOP-5DUGR3L\Network Interface(Intel[R] Ethernet Connection [14] I219-LM)\Bytes Received/sec","\\DESKTOP-5DUGR3L\Network Interface(Qualcomm QCA9377 802.11ac Wireless Adapter)\Bytes Received/sec"

"08/27/2025 15:07:08.392","0.000000","221.479931"

三.方法三

1.代码方式获取命令信息(VS2022或者QT6下均可用)

#include <windows.h>

#include <iostream>

#include <string>

#include <vector>

#include <codecvt>

#include <locale>

QString Widget::executeTypeperfCommand()

{

    SECURITY_ATTRIBUTES saAttr = { 0 };

    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);

    saAttr.bInheritHandle = TRUE;

    HANDLE hReadPipe, hWritePipe;

    if (!CreatePipe(&hReadPipe, &hWritePipe, &saAttr, 0)) {

        std::cerr << "CreatePipe 失败: " << GetLastError() << std::endl;

        return "";

    }

    STARTUPINFO si = { 0 };

    si.cb = sizeof(STARTUPINFO);

    si.hStdOutput = hWritePipe;

    si.hStdError = hWritePipe;

    si.dwFlags |= STARTF_USESTDHANDLES;

    PROCESS_INFORMATION pi = { 0 };

    // 关键修复:使用可修改的WCHAR数组存储命令行,而非常量字符串

    WCHAR cmdLine[] = L"cmd /c typeperf -sc 1 \"\\Network Interface(*)\\Bytes Received/sec\"";

    // 启动进程(此时cmdLine是可修改的,避免访问冲突)

    if (!CreateProcess(

            NULL,           // 不指定程序路径

            cmdLine,        // 传入可修改的命令行数组(无需强转)

            NULL,

            NULL,

            TRUE,

            0,

            NULL,

            NULL,

            &si,

            &pi

            )) {

        std::cerr << "CreateProcess 失败: " << GetLastError() << std::endl;

        CloseHandle(hReadPipe);

        CloseHandle(hWritePipe);

        return "";

    }

    // 关闭写端管道

    CloseHandle(hWritePipe);

    // 读取输出(与之前逻辑相同)

    std::vector<BYTE> buffer(4096);

    DWORD bytesRead;

    std::wstring wOutput;

    while (ReadFile(hReadPipe, buffer.data(), buffer.size(), &bytesRead, NULL) && bytesRead > 0) {

        int wideSize = MultiByteToWideChar(CP_ACP, 0, (LPCCH)buffer.data(), bytesRead, NULL, 0);

        if (wideSize == 0) continue;

        std::vector<WCHAR> wideBuffer(wideSize);

        MultiByteToWideChar(CP_ACP, 0, (LPCCH)buffer.data(), bytesRead, wideBuffer.data(), wideSize);

        wOutput.append(wideBuffer.data(), wideSize);

    }

    // 等待进程结束并清理资源

    WaitForSingleObject(pi.hProcess, INFINITE);

    CloseHandle(pi.hProcess);

    CloseHandle(pi.hThread);

    CloseHandle(hReadPipe);

    // 转换为UTF-8字符串

    int utf8Size = WideCharToMultiByte(CP_UTF8, 0, wOutput.c_str(), wOutput.size(), NULL, 0, NULL, NULL);

    if (utf8Size == 0) return "";

    std::vector<CHAR> utf8Buffer(utf8Size);

    WideCharToMultiByte(CP_UTF8, 0, wOutput.c_str(), wOutput.size(), utf8Buffer.data(), utf8Size, NULL, NULL);

    std::string stdStr = std::string(utf8Buffer.data(), utf8Size);

    QString q_str = QString::fromStdString(stdStr);

    return q_str;

}

http://www.xdnf.cn/news/1423045.html

相关文章:

  • 五、导入现有模型
  • 01 2025最新VMware虚拟机下载教程
  • Unity项目基本风格/规范
  • Linux上perf工具的使用-基础采样
  • 命名空间级别应用 Pod 安全标准
  • 从组分到涌现:系统科学视域下结构、功能与层级的辨析及在人工智能中的应用
  • 安全等保复习笔记
  • 大模型 RAG 项目必看:技术架构拆解 + 实战步骤,新手也能快速上手
  • 内存管理 - 从虚拟到物理
  • Java全栈工程师面试实战:从基础到微服务的深度解析
  • CentOS10安装RabbitMQ
  • Spring Bean 生命周期中的 @PostConstruct 注解
  • NestJS 3 分钟搭好 MySQL + MongoDB,CRUD 复制粘贴直接运行
  • 【C++进阶篇】学习C++就看这篇--->多态超详解
  • 传统web项目,vue开发实践篇01
  • 微服务Docker-compose之若依部署
  • 视频提取文字用什么软件好?分享6款免费的视频转文字软件!
  • apipost 8.x 脚本循环调用接口
  • 云手机为什么会受到广泛关注?
  • 单链表的基本原理与实现
  • 深入掌握 Flask 配置管理:从基础到高级实战
  • uniapp使用uview UI,自定义级联选择组件
  • 六、练习3:Gitee平台操作
  • RSA的CTF题目环境和做题复现第1集
  • shell——函数与数组
  • 华东制造企业推荐的SD-WAN服务商排名
  • java中常见的几种排序算法
  • 毕业设计:丹麦电力电价预测预测未来24小时的电价pytorch+lstm+历史特征和价格+时间序列 电价预测模型资源 完整代码数据可直接运行
  • js脚本和ts脚本相互调用
  • 虚拟机一插SD卡就蓝屏,导致整个电脑系统蓝屏怎么办