You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用VBA获取任务管理器中的以太网使用率?

获取以太网使用率的VBA解决方案

你已经搞定了CPU和内存的获取,卡在以太网使用率确实挺头疼的——任务管理器里的这个数据其实是从系统性能计数器里提取的,咱们可以通过**WMI(Windows Management Instrumentation)**来实现,这是Windows自带的系统管理接口,比直接调用底层API更直观易懂。

完整实现代码(整合你的内存逻辑)

我把你现有的内存获取代码和新的以太网、CPU获取逻辑整合到了一起,直接就能用:

Private Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

' 获取CPU使用率(补充你可能需要的CPU逻辑)
Function GetCPUUsage() As Double
    Dim objWMIService As Object
    Dim colItems As Object
    Dim objItem As Object
    
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery("SELECT LoadPercentage FROM Win32_Processor")
    
    For Each objItem In colItems
        GetCPUUsage = objItem.LoadPercentage
        Exit For ' 单CPU/多核心取第一个核心的使用率,需要平均值的话可以累加计算
    Next
End Function

' 获取内存使用率(你的原有代码封装)
Function GetMemoryUsage() As Long
    Dim memStatus As MEMORYSTATUS
    memStatus.dwLength = Len(memStatus)
    GlobalMemoryStatus memStatus
    GetMemoryUsage = memStatus.dwMemoryLoad
End Function

' 获取以太网使用率
Function GetEthernetUsage() As Double
    Dim objWMIService As Object
    Dim colNetworkInterfaces As Object
    Dim objInterface As Object
    Dim usage As Double
    
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    ' 筛选以太网接口,根据你的系统语言调整关键词(比如英文系统用"Ethernet")
    Set colNetworkInterfaces = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE Name LIKE '%以太网%' OR Name LIKE '%Ethernet%'")
    
    For Each objInterface In colNetworkInterfaces
        ' 计算逻辑和任务管理器一致:(实时收发总速率 / 网卡最大带宽) * 100
        If objInterface.CurrentBandwidth > 0 Then
            usage = ((objInterface.BytesReceivedPerSec + objInterface.BytesSentPerSec) * 8) / objInterface.CurrentBandwidth * 100
            GetEthernetUsage = Round(usage, 2)
            Exit For ' 取第一个匹配的以太网接口
        End If
    Next
    
    ' 未找到有效接口时返回-1标记
    If usage = 0 Then GetEthernetUsage = -1
End Function

' 测试函数,按F5运行后看立即窗口输出
Sub TestSystemMetrics()
    Debug.Print "CPU使用率: " & GetCPUUsage() & "%"
    Debug.Print "内存使用率: " & GetMemoryUsage() & "%"
    Debug.Print "以太网使用率: " & GetEthernetUsage() & "%"
End Sub

关键注意事项

  • 系统语言适配:如果你的系统是英文/繁体中文,要把筛选条件里的关键词改成对应语言(比如英文用%Ethernet%,繁体用%乙太網%)。
  • 多网卡处理:如果电脑有多个以太网接口(比如有线网卡+虚拟机网卡),可以修改代码遍历所有匹配项,或者通过精准的网卡名称筛选(比如Name = "以太网 2")。
  • 权限与宏设置:Office里运行需要启用宏,普通用户权限就足够读取系统性能数据,不需要管理员权限。

原理说明

任务管理器的以太网使用率计算逻辑和代码里完全一致:用当前每秒收发的总字节数(转成bps单位)除以网卡的最大带宽,再乘以100得到百分比。WMI的Win32_PerfFormattedData_Tcpip_NetworkInterface类已经封装了这些实时性能计数器,省去了我们自己解析底层API的麻烦。

内容的提问来源于stack exchange,提问作者response

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:08:33