1

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

aepot
  • 49,560
Zieyori
  • 13

1 Answers1

3

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

Покажу, как получить данные по использованию сети за последние 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&lt;ConnectionProfile&gt; profiles = NetworkInformation.GetConnectionProfiles();
        Dictionary&lt;string, ulong&gt; stats = [];

        foreach (var profile in profiles)
        {
            IReadOnlyList&lt;NetworkUsage&gt; usages = await profile.GetNetworkUsageAsync(now.AddDays(-31), now, DataUsageGranularity.PerDay, states);

            ulong total = 0;
            foreach (var usage in usages)
            {
                if (usage.ConnectionDuration &gt; TimeSpan.Zero)
                {
                    Console.WriteLine($&quot;{profile.ProfileName}: BytesReceived = {usage.BytesReceived} BytesSent = {usage.BytesSent}&quot;);
                    total += usage.BytesReceived + usage.BytesSent;
                }
            }

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

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

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

}

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

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

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

aepot
  • 49,560