感觉路由器在睡觉的时候就不用开着无线了,关了还可以减少辐射(不能全关了,因为还有电脑需要有线)。苦于家里用的是水星MW300r,而且硬件以及缩水到v9.1版了,SoC还是QCA开头的,改完内存和Flash依然没有Openwrt刷,这样自然不能设定定时关闭无线了。又不想再买台可以刷的路由器,就想到如题所说的方法,刚好家里有台电脑是24小时开着(功耗很低),又是用网线连着路由器,就想着能不能在里面设定一个计划任务来定时开关MW300r的无线。

用C#编写如下程序,代码:

private static string rounterIP = System.Configuration.ConfigurationManager.AppSettings["RounterIP"];
private static string rounterUser = System.Configuration.ConfigurationManager.AppSettings["RounterUser"];
private static string rounterPasswd = System.Configuration.ConfigurationManager.AppSettings["RounterPasswd"];
 
static void Main(string[] args)
{
	try
	{
		bool wlanON = true;
		foreach (string arg in args)
		{
			if(arg.Equals("-s", StringComparison.CurrentCultureIgnoreCase))
				wlanON = false;
		}
 
		byte[] bytes = Encoding.Default.GetBytes(rounterUser + ":" + rounterPasswd);
		string base64str = Convert.ToBase64String(bytes);
 
		string url = "http://" + rounterIP + "/userRpm/WlanNetworkRpm.htm?broadcast=2&brlssid=&brlbssid=&detctwds=1&keytype=1&wepindex=1&keytext=&Save=%B1%A3+%B4%E6";
		if (wlanON)
			url += "&ap=1";
 
		HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
		req.Referer = "http://" + rounterIP + "/userRpm/WlanNetworkRpm.htm";
		req.Headers.Add(HttpRequestHeader.Authorization, "Basic " + base64str);
		req.Method = "GET";
		req.GetResponse();
		Console.WriteLine("WiFi已" + (wlanON ? "打开" : "关闭"));
	}
	catch (Exception e)
	{
		Console.Write(e.Message);
	}
	Thread.Sleep(5000);
}

注意前面三行依次是路由器IP,用户名和登录密码,可根据实际修改!编成命令行程序,后面加个-s参数是关闭无线的,不加那个参数就是打开无线,然后配置一下计划任务就OK了!

此程序在硬件版本9.1固件版本1.0.8 Build 130719下测试通过!其它固件版本可能需要重启路由器后才能生效!

转载注明:http://www.shenyaocn.com/?p=132

输入路由器IP,用户名和密码,执行此函数即可重启路由器,仅支持TP-LINK、水星、FAST这三个品牌路由器(其实它们是一家,不懂→百度)

public static bool rebootRouter(string ip, string user, string passwd)
{
	try
	{
		byte[] bytes = Encoding.Default.GetBytes(user + ":" + passwd);
		string base64str = Convert.ToBase64String(bytes);
 
		string url = "http://" + ip + "/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7";
		HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
		req.Referer = "http://" + ip + "/userRpm/SysRebootRpm.htm";
		req.Headers.Add(HttpRequestHeader.Authorization, "Basic " + base64str);
		req.Method = "GET";
		req.GetResponse();
 
		return true;
	}
	catch (Exception e)
	{
		Console.Write(e.Message);
	}
	return false;
}

转载请注明:http://www.shenyaocn.com/?p=123

工具:装有Win7系统的电脑(Win7有自带.net编译工具)+ildasm(网上随便搜,单文件,120KB左右,注意.net版本)

方法:

1、把exe文件导入到ildasm工具中,在ildasm中File->dump,把exe文件转储为*.il文件存到某个指定文件夹里,得到*.il和*.res两个文件,例如a.il a.res

2、用记事本打开得到的*.il文件,找到对应的方法变量,进行修改,修改之后保存。

4、打开命令提示符,dir到*.il所在的文件夹,然后输入命令:c:\windows\microsoft.net\framework\v2.0.50727\ildasm.exe /exe /resource=a.res a.il(注意a.res和a.il两文件夹位置不可变),回车,就在对应目录下生成新的exe文件。(注意.net版本,如果是64位系统,在c:\windows\microsoft.net下有32位和64位.net,里面又有不同的.net版本)

由于回家没带源码,手头有个C#编写的exe需要按照家里的网络情况修改,仅仅涉及其中的一些变量,用这个方法不到5分钟搞定!

在命令提示符下敲入 adb shell dumpsys activity activities|find “Run #” 回车即可!

可以得到如下信息:(示例)

Run #1: ActivityRecord{53634df8 com.shenyaocn.android.barmaker/.BarMakerActivity}
Run #0: ActivityRecord{536156e8 com.android.launcher/com.android.launcher2.Launcher}

Run #0就是位于栈底的启动器,Run #1是当前位于栈顶的APP,也就是当前窗口了。

最近做一个工具,用C#写的,其中有段就是获取Activity栈的方法:

public bool pingNetworkStatus()
{
	try
	{
		Ping a = new Ping();
		PingReply re = a.Send("baidu.com");
 
		return (re.Status == IPStatus.Success);
	}
	catch (Exception e)
	{
		Console.WriteLine(e.Message);
	}
	return false;
}

以往查看网络是否有连接是打开浏览器看看能不能打开百度~~没想到用代码也是这么搞的:-)