ノートパソコンの画面の通信料状況をボタン一つで取得する【C#】

# 動機

今回も C# で Windows10 の便利ボタンを作るという記事を書いていきます。

以前はノートパソコンのバッテリー状況を確認してみたのですが、調べると他にも情報を取得できるということがわかりました。

現在自分のネット回線はモバイル Wi-Fi を使用しているのですが、ノートパソコンの通信料が気になっています。

そこで、今回もボタン一つでノートパソコンの通信料を確認してみようと思い、プロトを作成してみました。

> 参考 1：[ノートパソコンの画面の明るさをボタン一つで変更する【C#】](https://qiita.com/kewpie134134/items/d81461aab1ab1b9a26af)
> 参考 2：[ノートパソコンの画面の音量をボタン一つで変更する【C#】](https://qiita.com/kewpie134134/items/22acfa606071fbc22018#mainwindowxamlcs)
> 参考 3：[ノートパソコンの画面のバッテリー状況をボタン一つで取得する【C#】](https://qiita.com/kewpie134134/items/744d52aea14662732c6c)

なお、作成に関しては WpfApp で作成しました。

# イメージ画像

相変わらず画面はそっけないものです。

画面の `YYYY/MM/DD - YYYY/MM/DD までの通信料`を選択すると、下の `TextBlock` の横に送信・受信通信料が表示されます。

![通信料メイン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/57d87616-c32e-934a-8cd7-7e2c506a67b0.png)

なお、Windows10の標準の通信料把握機能（[設定] > [ネットワークとインターネット] > [データ使用状況]）からは過去30日分しか把握できませんが、こちらでは過去60日まで遡って通信料を把握することが可能です。

![通信料結果.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/ec6e10a4-4b60-82ee-5da1-e989d090e885.png)

# ソース

## MainWindow.xaml

```MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button x:Name="button" Content="2021/2/1 - 2021/3/11 までの通信量" HorizontalAlignment="Left" Margin="211,73,0,0" VerticalAlignment="Top" Width="407" Click="button_Click" Height="92" FontSize="20"/>
        <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="365,238,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>

    </Grid>
</Window>
```

## MainWindow.xaml

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp1
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        async private void button_Click(object sender, RoutedEventArgs e)
        {

            Windows.Networking.Connectivity.NetworkUsageStates usageStates = new Windows.Networking.Connectivity.NetworkUsageStates();

            var startTime = new DateTime(2021, 2, 1); // ドキュメントによると現在の時刻より60日以上前にすることはできないようです。
            var endTime = new DateTime(2021, 3, 11);

            var connectionProfile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
            IReadOnlyList<Windows.Networking.Connectivity.NetworkUsage> listNetworkUsage = await connectionProfile.GetNetworkUsageAsync(startTime, endTime, Windows.Networking.Connectivity.DataUsageGranularity.Total, usageStates);
            for (int i = 0; i < listNetworkUsage.Count; i++)
            {
                textBlock.Text += string.Format("送信: {0}バイト, 受信: {1}バイト\n", listNetworkUsage[i].BytesSent, listNetworkUsage[i].BytesReceived);
            }
        }
    }
}

```

# おわりに

今回はボタン1つでノートパソコンの通信料を把握することができました。

もしかしたら自分のWindows10便利化計画に必要ない機能だったのかもしれませんが、こんなこともできるのかと少し感動して記事にしました。

誰かのお役に立てれば光栄です。