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

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

  一,实用性

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

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

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

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#,欢迎各位大神拍砖

posted @ 2012-05-21 21:19  爱吃猫的鱼  阅读(567)  评论(1编辑  收藏  举报