現在、PCの電源を落とすときには、バッチファイルを使ってサスペンドに

するようにしているのですが、chromeでダウンロードをしていても、
問答無用でサスペンドされてしまい、途中までダウンロードしていたファイルを
また最初からダウンロードしなくてはならない事象が過去何度も起きています。

これを解決する方法を教えていただきたく。

何かフリーソフトでネットワークの帯域を見れるようなものはあるのでしょうか?
あれば、それをバッチファイルから呼び出して、戻り値次第で、サスペンドは
行わない。という風にできます。
もしないようならば、C言語またはC#で自作しようと思います。
関連しそうなAPIはどのようなものがありますでしょうか?

環境:windows xp home edition

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/08/24 13:05:30

ベストアンサー

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

WHSでどうでしょう?

strComputer = "."
strInterface = "Broadcom NetLink [TM] Gigabit Ethernet - パケット スケジューラ ミニポート"
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set PerfInterface = objWMIService.Get(_
    "Win32_PerfFormattedData_Tcpip_NetworkInterface.Name='" & strInterface & "'")

PerfInterface.Refresh_
result = MsgBox("平均通信速度(Byte/Sec) 表示", vbOKCancel + vbQuestion, "BytesTotalPersec")
While (result = vbRetry or result = vbOK)
    PerfInterface.Refresh_
    result = MsgBox(PerfInterface.BytesTotalPersec & " Byte/Sec", vbRetryCancel + vbQuestion, "BytesTotalPersec")
Wend

ミソはPerfInterface.Refresh_とPerfInterface.BytesTotalPersecで、BytesTotalPersecは、Refresh_とRefresh_の間の平均通信速度を示します。

strInterfaceの値は以下で。

Set wbemServices = GetObject("winmgmts:\\.")
Set wbemObjectSet = wbemServices.InstancesOf(_
    "Win32_PerfFormattedData_Tcpip_NetworkInterface")

For Each wbemObject In wbemObjectSet
    WScript.Echo wbemObject.Name
Next
  • id:katetyan
    ご回答ありがとうごさいます。自分でもなんとかできないものかとWSH + jscriptで作ってみました。


    // 俺用サスペンドスクリプト
    var JUDGE_LINE = 5000; //判定ライン(1秒間に受信したバイト数)

    main();

    function main(){
    var diff = get_diff();
    if(diff >= JUDGE_LINE){
    WScript.Echo("ダウンロード中?サスペンド移行停止");
    return;
    }

    var wsh_shell = WScript.CreateObject("WScript.Shell");
    wsh_shell.Run("rundll32.exe PowrProf.dll,SetSuspendState");
    }

    function get_diff(){
    var first = get_packet(); //1回目のパケット数取得
    WScript.Sleep(1000); //1秒待機
    var second = get_packet(); //2回目のパケット数取得
    var diff = Number(second) - Number(first);
    return diff;
    }

    function get_packet(){
    var wsh_shell = WScript.CreateObject("WScript.Shell");
    var exec = wsh_shell.Exec("netstat -e");
    exec.StdOut.ReadLine();
    exec.StdOut.ReadLine();
    exec.StdOut.ReadLine();
    exec.StdOut.ReadLine();
    var ret = exec.StdOut.ReadLine(); //5行目を取得
    var tmp = ret.replace(/ +/g,' '); //複数空白→1つの空白置換
    var tmp1 = tmp.split(" "); //空白で切り分け
    return tmp1[1];
    }


この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません