トップ回答者
ネットワークの通信量の取得

質問
-
こんばんは。早速ですが質問させてください。
ストアに「Network Data」というアプリがあります。
無線LANやイーサネットの、通信量を表示してくれます。これと同様なことをしたいです。(もっと単純に、今月分の通信量だけが知りたい)
(Windowsの標準機能では、過去30日分の通信量しか取得できません。)インストール直後でも当月分の通信量を表示することができますので、
アプリが通信量を計測するのではなく、Windowsがどこかに保持している
過去の通信量の情報を、何らかの方法で取得できているのだと思われますが、
ヘルプではわからず、ネット上で検索しても、キーワードが悪いのか見つけられませんでした。もし調査の方法や、やりたいことにつながるキーワードがわかりましたら教えていただけないでしょうか。
よろしくお願いします。
回答
-
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); } }
- 編集済み kenjinoteMVP 2017年3月8日 13:28
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年3月9日 2:06
- 回答としてマーク 古典厩 2017年3月9日 9:06
すべての返信
-
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); } }
- 編集済み kenjinoteMVP 2017年3月8日 13:28
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年3月9日 2:06
- 回答としてマーク 古典厩 2017年3月9日 9:06
-
kenjinote様
返信ありがとうございました。
なるほど、たしかに指定した期間の送受信量が確認できました!
> var connectionProfile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
の箇所を
> Windows.Networking.Connectivity.NetworkInformation.GetConnectionProfiles
に変更し、各Profileごとのプロパティを調べることで、詳細な情報も取得できました。
助かりました。ありがとうございました。