none
ネットワークの通信量の取得 RRS feed

  • 質問

  • こんばんは。早速ですが質問させてください。

    ストアに「Network Data」というアプリがあります。
    無線LANやイーサネットの、通信量を表示してくれます。

    これと同様なことをしたいです。(もっと単純に、今月分の通信量だけが知りたい)
    (Windowsの標準機能では、過去30日分の通信量しか取得できません。)

    インストール直後でも当月分の通信量を表示することができますので、
    アプリが通信量を計測するのではなく、Windowsがどこかに保持している
    過去の通信量の情報を、何らかの方法で取得できているのだと思われますが、
    ヘルプではわからず、ネット上で検索しても、キーワードが悪いのか見つけられませんでした。

    もし調査の方法や、やりたいことにつながるキーワードがわかりましたら教えていただけないでしょうか。

    よろしくお願いします。

    2017年3月8日 10:03

回答

  • GetNetworkUsageAsync という関数を使うと、指定された期間の推定の通信量を取得できるようです。
    ただ、期間の開始日時を関数実行時の 60 日以上前にすることはできないようです。

    async private void button_Click(object sender, RoutedEventArgs e)
    {
        Windows.Networking.Connectivity.NetworkUsageStates usageStates = new Windows.Networking.Connectivity.NetworkUsageStates();
    
        var startTime = new DateTime(2017, 2, 8); // ドキュメントによると現在の時刻より60日以上前にすることはできないようです。
        var endTime = new DateTime(2017, 3, 8);
    
        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);
        }
    }
    2017年3月8日 13:16

すべての返信

  • GetNetworkUsageAsync という関数を使うと、指定された期間の推定の通信量を取得できるようです。
    ただ、期間の開始日時を関数実行時の 60 日以上前にすることはできないようです。

    async private void button_Click(object sender, RoutedEventArgs e)
    {
        Windows.Networking.Connectivity.NetworkUsageStates usageStates = new Windows.Networking.Connectivity.NetworkUsageStates();
    
        var startTime = new DateTime(2017, 2, 8); // ドキュメントによると現在の時刻より60日以上前にすることはできないようです。
        var endTime = new DateTime(2017, 3, 8);
    
        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);
        }
    }
    2017年3月8日 13:16
  • kenjinote様

    返信ありがとうございました。

    なるほど、たしかに指定した期間の送受信量が確認できました!

    >    var connectionProfile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();

    の箇所を

    > Windows.Networking.Connectivity.NetworkInformation.GetConnectionProfiles

    に変更し、各Profileごとのプロパティを調べることで、詳細な情報も取得できました。

    助かりました。ありがとうございました。

    2017年3月9日 9:10