Как получить информацию о использовании сети за месяц?

как получить информацию о использовании сети за месяц? Такая функция есть в параметрах но мне хотелось бы получить это с помощью C#. введите сюда описание изображения


Ответы (1 шт):

Автор решения: aepot

Нелегко было найти решение, но оно есть.

Покажу, как получить данные по использованию сети за последние 30 дней.

  • Нужно создать консольное приложение .NET 8 (можно 5, 6 или 7)
  • Нужно в свойствах проекта задать, что это приложение поддерживает Windows 10, так как в более ранних версиях Windows нет нужного вам API

.csproj выглядит у меня так

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0-windows10.0.17763.0</TargetFramework>
    <Platforms>x64</Platforms>
  </PropertyGroup>

</Project>

Где windows10.0.17763.0 - минимально допустимая версия Windows. Можете поставить версию поновее. По факту у меня Windows 11, и оно работает.

Теперь код приложения

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Windows.Networking.Connectivity;

namespace ConsoleApp1
{
    class Program
    {
        static async Task Main(string[] args)
        {
            DateTime now = DateTime.Now;
            NetworkUsageStates states = new() { Roaming = TriStates.DoNotCare, Shared = TriStates.DoNotCare };

            IReadOnlyList<ConnectionProfile> profiles = NetworkInformation.GetConnectionProfiles();
            Dictionary<string, ulong> stats = [];

            foreach (var profile in profiles)
            {
                IReadOnlyList<NetworkUsage> usages = await profile.GetNetworkUsageAsync(now.AddDays(-31), now, DataUsageGranularity.PerDay, states);
                
                ulong total = 0;
                foreach (var usage in usages)
                {
                    if (usage.ConnectionDuration > TimeSpan.Zero)
                    {
                        Console.WriteLine($"{profile.ProfileName}: BytesReceived = {usage.BytesReceived} BytesSent = {usage.BytesSent}");
                        total += usage.BytesReceived + usage.BytesSent;
                    }
                }

                if (total > 0)
                {
                    stats[profile.ProfileName] = total;
                }
            }

            Console.WriteLine(new string('-', 20));

            foreach (var pair in stats)
            {
                Console.WriteLine($"{pair.Key}: {(double)pair.Value / 1024 / 1024 / 1024:F2} GB");
            }
        }
    }
}

Вывод в консоль

wifi1: BytesReceived = 1385350215 BytesSent = 198060725
wifi1: BytesReceived = 456027282 BytesSent = 44770234
wifi1: BytesReceived = 4213644672 BytesSent = 111855319
wifi1: BytesReceived = 6071369015 BytesSent = 76330321530
wifi1: BytesReceived = 16358465099 BytesSent = 334014366113
wifi1: BytesReceived = 1125077106 BytesSent = 64182864
wifi1: BytesReceived = 472635448 BytesSent = 114018107
wifi1: BytesReceived = 348344511 BytesSent = 40343842
wifi1: BytesReceived = 426505738 BytesSent = 25649539
wifi1: BytesReceived = 68985386 BytesSent = 5557780
wifi2: BytesReceived = 267469468 BytesSent = 51599637
wifi2: BytesReceived = 304084758 BytesSent = 83970579
wifi2: BytesReceived = 187640376 BytesSent = 46735277
wifi2: BytesReceived = 316538976 BytesSent = 26542616
wifi2: BytesReceived = 1781674090 BytesSent = 117298435
wifi2: BytesReceived = 907374159 BytesSent = 156286773
wifi2: BytesReceived = 71818844 BytesSent = 15423720
wifi3: BytesReceived = 256440184 BytesSent = 15933011
wifi3: BytesReceived = 806886383 BytesSent = 61733032
wifi3: BytesReceived = 830580820 BytesSent = 82492124
wifi3: BytesReceived = 0 BytesSent = 0
wifi3: BytesReceived = 1967630496 BytesSent = 147507217
wifi3: BytesReceived = 199962956 BytesSent = 18730649
wifi3: BytesReceived = 0 BytesSent = 0
wifi3: BytesReceived = 0 BytesSent = 0
wifi3: BytesReceived = 303616476 BytesSent = 16836866
wifi3: BytesReceived = 0 BytesSent = 0
wifi3: BytesReceived = 608929053 BytesSent = 54180291
wifi3: BytesReceived = 13808166900 BytesSent = 222281672
wifi3: BytesReceived = 1193427840 BytesSent = 121861668
wifi3: BytesReceived = 77435874 BytesSent = 5416986
wifi3: BytesReceived = 117213903 BytesSent = 19610923
wifi3: BytesReceived = 365334897 BytesSent = 26129097
wifi3: BytesReceived = 887284189 BytesSent = 86818797
--------------------
wifi1: 411,53 GB
wifi2: 4,04 GB
wifi3: 20,77 GB

Здесь за последний месяц я был подключен к трем разным Wi-Fi сетям. Система выдала статистику по каждой из них.

Что касается детального вывода выше, то это мои сеансы подключений к сети. Там есть свойство usage.ConnectionDuration, где можно посмотреть продолжительность подключения.

wifi3: 20,77 GB в точности совпадает с тем, что показывает на текущий момент моя панель управления.

введите сюда описание изображения

Решение нашел здесь: https://devblogs.microsoft.com/oldnewthing/20210520-00/?p=105232

Если нужно красиво отформатировать мегабайты-гигабайты, решение есть здесь: Конвертирование памяти для видеокарты

→ Ссылка