RemoteHelper V1.0 (远程关机助手)-----源代码放出

  某天上课的时候,老湿说了下利用微薄关电脑的功能,自己从实用性,原理性,实现性,待加强四个方面进行了对比。

  一,实用性

  1.使用场景:一般情况下,好像使用软件都是在下载未完成的情况下使用的,其实有下载并关机的功能的软件,有太多了,比如,讯雷的

RemoteHelper V1.0 (远程关机助手)-----源代码放出

又比如115网盘的下载关机功能

RemoteHelper V1.0 (远程关机助手)-----源代码放出

其实内置下载关机的功能相当多。反而单独将远程关机这个功能拿出来的很少很少

2.原理性:

手机发出特征信息(1)------>软件收到特征信息(2)------>软件执行关机功能(3)

RemoteHelper V1.0 直接利用正则表达式(真是感叹,正则表达式功能何其的强大!),执行步骤(2),然后执行功能(3)

3.实现性:

源代码分析:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;



using System.Runtime.InteropServices;

using System.Management;

using System.Diagnostics;

using System.Net;

using System.Text.RegularExpressions;

using System.IO;

using System.Timers;

using System.Threading;



namespace Test1

{

    public partial class FrmMain : Form

    {

        public FrmMain()

        {

            InitializeComponent();

            Control.CheckForIllegalCrossThreadCalls = false;

        }

        [DllImport("user32.dll", EntryPoint = "ExitWindowsEx", CharSet = CharSet.Ansi)]

        private static extern int ExitWindowsEx(int uFlags, int dwReserved);

        //定义为全局变量



        //记录list的索引

        int x = -1;

        //定义全局的内容

        List<string> list = new List<string>();

        Thread thGet;

        

        private void button1_Click(object sender, EventArgs e)

        {

            //重新设定索引序列的值

            x = -1;

            //将lbState的值重新清空

            lbState.Items.Clear();

            //添加当前状态

            lbState.Items.Add("线程初使化,执行监听...");

            btnStart.Enabled = false;

            btnCancel.Enabled = true;

            

            thGet = new Thread(OffByNet);

            //如果不设置都所有线程都是前台,在前台闭后然后执行关

            thGet.IsBackground = true;

            thGet.Start(txtUrl.Text.Trim());

           

        }

        private void btnCancel_Click(object sender, EventArgs e)

        {

            btnStart.Enabled = true;

            btnCancel.Enabled = false;

            if (thGet!=null)

            {

                thGet.Abort();

            }

            

        }

        //执行关机方法

        #region 关机

        void shutdown()

        {

            Process myProcess = new System.Diagnostics.Process();

            myProcess.StartInfo.FileName = "cmd.exe";

            myProcess.StartInfo.UseShellExecute = false;

            myProcess.StartInfo.RedirectStandardInput = true;

            myProcess.StartInfo.RedirectStandardOutput = true;

            myProcess.StartInfo.RedirectStandardError = true;

            myProcess.StartInfo.CreateNoWindow = true;

            myProcess.Start();

            myProcess.StandardInput.WriteLine("shutdown -s -t 60");

        }

        #endregion

      

        //获取网页

        private void GetContent(string url)

        {                           

                StringBuilder sb = new StringBuilder();

                WebRequest wr = WebRequest.Create(url);

                WebResponse wre = wr.GetResponse();

                using (Stream str = wre.GetResponseStream())

                {

                    StreamReader sr = new StreamReader(str, Encoding.Default);

                    string line;

                    while ((line = sr.ReadLine()) != null)

                    {

                        sb.Append(line);

                    }



                }

                list.Add(sb.ToString());                      

        }

        //反应状态

        private bool CommandResult(string content, string command)

        {

            

            bool result = false;

            Match ma = Regex.Match(content, command);

            if (ma.Success)

            {

                result = true;

            }

            return result;

        }      

        //读文本关机

        private void GetBytxt()

        {                     

            while (true)

            {

                

                Thread.Sleep(2000);

                x++;

                string content = File.ReadAllText("1.txt", Encoding.Default);

                list.Add(content);

                bool b = CommandResult(list[x], txtCommand.Text.Trim());

                if (b==true)

                {

                    shutdown();

                }

            }

            

        }

        //读网络关机

        private void OffByNet(object ur)

        {

            string url = ur as string;

            while (true)

            {

                Thread.Sleep(2000);

                x++;

                GetContent(url);

                bool result = CommandResult(list[x], txtCommand.Text.Trim());

                if (result==true)

                {

                    lbState.Items.Clear();

                    lbState.Items.Add("捕获命令,执行关机");                   

                    shutdown();

                    thGet.Abort();

                }

                else

                {

                    lbState.Items.Add("正在监听中,请等待.......");

                }

            }

        }



        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

        {

            DialogResult dr = MessageBox.Show("是否取消当前监听?","监听",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);

            if (dr !=System.Windows.Forms.DialogResult.Yes)

            {

                e.Cancel = true;

            }

        }



        private void FrmMain_Load(object sender, EventArgs e)

        {



        }



       

    }

}

 4.不足性

微薄关机,监控软件始终需要一个公共的参看微薄的功能,软件在写的时候一直没有解决这个"公共的查看微薄"的功能,如果不登录,本身是没有查看的功能。思来想去,要么微薄提供一个公共的API,要不然就用其它的方式,想了半天还是没有想出解决方法,今天在cnblogs看到一位朋友说了解决方法:

注册一个公共的微薄账号,然后关注需要监控的微薄,将公共微薄内置在监控软件内(可是如何实现软件模拟登陆呢?),然后就可以实现远程关机功能

 

小弟初学C#,欢迎各位大神拍砖

你可能感兴趣的:(remote)