經過手機進行遠程關機html
主要流程數組
1.申請一個博客園帳號,找到「個人博客園」頁面,拷貝url網絡
2.手機發送「隨筆」 內容是「關機」url
3.程序每隔五分鐘檢測一下url上有沒有當前的關機命令spa
4.執行關機命令命令行
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.IO.Compression; using System.Text.RegularExpressions; using System.Diagnostics; namespace 自動關機 { class Program { static void Main(string[] args) { //命令格式 「關機」 int wait = 1000* 60 * 5; //五分鐘執行一次 string url = "http://www.cnblogs.com/mengxingxinqing/";//配置本身的博客園地址 string regx = @"關機"; string timereg = @"\d{4}-\d{2}-\d{2} \d{2}:\d{2}";//匹配時間的正則 while (true) { Regex r = new Regex(regx); string html = getPageInfo(url); //Console.Write(html); MatchCollection mc; mc = r.Matches(html);//匹配「關機」命令 if (mc.Count > 0)//若是匹配上了,確定取最上面一個關機命令的位置 { string tmp = mc[0].Value; tmp = html.Substring(mc[0].Index, 100);//獲取關機命令後的100個字符,裏面包含了這篇隨筆發表的時間 tmp = tmp.Replace(" ", " "); Regex tr = new Regex(timereg);//匹配出來這個時間 MatchCollection tmc; tmc = tr.Matches(tmp); tmp = tmc[0].Value; string datestr = tmp + ":00";//造成 2013-08-22 15:30:00 這種時間格式 DateTime dt = Convert.ToDateTime(datestr); DateTime now = DateTime.Now; if (abs(DateDiff("tms", now, dt)) < 2*wait)//若是是最近10分鐘發出的命令,執行 { //Console.Write("shutdown"); Cmd("shutdown -s"); } } System.Threading.Thread.Sleep(wait); } } /// <summary> /// 請求Url並獲取返回值 /// </summary> /// <param name="strUrl">Url地址</param> /// <returns></returns> public static string getPageInfo(string strUrl) { WebClient wc = new WebClient(); // 建立WebClient實例提供向URI 標識的資源發送數據和從URI 標識的資源接收數據 wc.Credentials = CredentialCache.DefaultCredentials; // 獲取或設置用於對向 Internet 資源的請求進行身份驗證的網絡憑據。 ///方法一: Encoding enc = Encoding.GetEncoding("utf-8"); // 若是是亂碼就改爲 utf-8 / GB2312 Byte[] pageData = wc.DownloadData(strUrl); // 從資源下載數據並返回字節數組。 string shtml = enc.GetString(pageData); return shtml; } /// <summary> /// 返回兩個日期之間的時間間隔(y:年份間隔、M:月份間隔、【d:天數間隔、h:小時間隔、m:分鐘間隔、s:秒鐘間隔、ms:微秒間隔,中括號內前加t,表示總數,如td,總天數】) /// </summary> /// <param name="Interval">間隔標誌</param> /// <param name="Date1">開始日期</param> /// <param name="Date2">結束日期</param> /// <returns>返回間隔標誌指定的時間間隔</returns> public static double DateDiff(string Interval, System.DateTime? Date1, System.DateTime? Date2) { double dblYearLen = 365;//年的長度,365天 double dblMonthLen = (365 / 12);//每一個月平均的天數 System.TimeSpan objT; DateTime d1 = new DateTime(); DateTime d2 = new DateTime(); if (Date1 == null) return 0; if (Date2 == null) return 0; d1 = (DateTime)Date1; d2 = (DateTime)Date2; objT = d2.Subtract(d1); switch (Interval) { case "y"://返回日期的年份間隔 return (double)System.Convert.ToInt32(objT.Days / dblYearLen); case "M"://返回日期的月份間隔 return (double)System.Convert.ToInt32(objT.Days / dblMonthLen); case "d"://返回日期的天數間隔 objT = Convert.ToDateTime(d2.ToShortDateString()).Subtract(Convert.ToDateTime(d1.ToShortDateString())); return (double)objT.Days; case "h"://返回日期的小時間隔 return (double)objT.Hours; case "m"://返回日期的分鐘間隔 return (double)objT.Minutes; case "s"://返回日期的秒鐘間隔 return (double)objT.Seconds; case "ms"://返回時間的微秒間隔 return (double)objT.Milliseconds; case "td"://總天 return objT.TotalDays; case "th"://總小時數 return objT.TotalHours; case "tm"://總分鐘 return objT.TotalMinutes; case "ts"://總秒 return objT.TotalSeconds; case "tms"://總毫秒 return objT.TotalMilliseconds; default: break; } return 0; } /// <summary> /// 執行命令行 /// </summary> /// <param name="cmd"></param> /// <returns></returns> public static string Cmd(string command) { string output = ""; //輸出字符串 if (command != null && !command.Equals("")) { Process process = new Process();//建立進程對象 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "cmd.exe";//設定須要執行的命令 startInfo.Arguments = "/C " + command;//「/C」表示執行完命令後立刻退出 startInfo.UseShellExecute = false;//不使用系統外殼程序啓動 startInfo.RedirectStandardInput = false;//不重定向輸入 startInfo.RedirectStandardOutput = true; //重定向輸出 startInfo.CreateNoWindow = true;//不建立窗口 process.StartInfo = startInfo; try { if (process.Start())//開始進程 { process.WaitForExit();//這裏無限等待進程結束 output = process.StandardOutput.ReadToEnd();//讀取進程的輸出 } } catch { } finally { if (process != null) process.Close(); } } return output; } public static double abs(double d) { return d > 0 ? d : -d; } } }
在vs中編譯後,生成可執行文件,將可執行文件建立一個快捷方式,將快捷方式放到C:\Documents and Settings\Administrator\「開始」菜單\程序\啓動 中即可以開機自啓動了code