cwnicol programming

プログラミング関連の投稿をすこしだけ

ダウンロードが完了したらサスペンドする

動作確認環境:Windows XP HOME
使用方法:下記ソースをエディターでxxx.jsと保存する。ダブルクリック。


普段はサスペンドしてるんだけど、何かダウンロードしていても
サスペンドに移行してしまって、大きなファイルをダウンロードして
いると中断されてしまう。
レジュームできるダウンローダーが使用できないサイトとかあったりして。。


なにかをダウンロードしてる間はサスペンドに移行しないスクリプトを作った。
ダウンロードが完了したら(転送量が判定ラインを下回ったら)、サスペンド
移行する。通信環境によって判定ラインは変更する必要があるかもしれない。
やっぱり止めたい時にはタスクマネージャからwscriptを停止する。

var JUDGE_LINE = 5000; //判定ライン(1秒間に受信したバイト数)

main();

function main(){
	for(;;){
		var diff = get_diff();
		if(diff >= JUDGE_LINE){ //判定ライン超過
			WScript.sleep(60000); //1分待つ
			continue;
		}
		
		var wsh_shell = WScript.CreateObject("WScript.Shell");
		wsh_shell.Run("rundll32.exe PowrProf.dll,SetSuspendState");
		break;
	}
}


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];
}