某天上课的时候,老湿说了下利用微薄关电脑的功能,自己从实用性,原理性,实现性,待加强四个方面进行了对比。
一,实用性
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 ExitWindowsExint uFlags, int dwReserved);
//定义为全局变量
//记录list的索引
int x = -1;
//定义全局的内容
List<string> list = new List<string>);
Thread thGet;
private void button1_Clickobject sender, EventArgs e)
{
//重新设定索引序列的值
x = -1;
//将lbState的值重新清空
lbState.Items.Clear);
//添加当前状态
lbState.Items.Add"线程初使化,执行监听...");
btnStart.Enabled = false;
btnCancel.Enabled = true;
thGet = new ThreadOffByNet);
//如果不设置都所有线程都是前台,在前台闭后然后执行关
thGet.IsBackground = true;
thGet.StarttxtUrl.Text.Trim));
}
private void btnCancel_Clickobject 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 GetContentstring url)
{
StringBuilder sb = new StringBuilder);
WebRequest wr = WebRequest.Createurl);
WebResponse wre = wr.GetResponse);
using Stream str = wre.GetResponseStream))
{
StreamReader sr = new StreamReaderstr, Encoding.Default);
string line;
while line = sr.ReadLine)) != null)
{
sb.Appendline);
}
}
list.Addsb.ToString));
}
//反应状态
private bool CommandResultstring content, string command)
{
bool result = false;
Match ma = Regex.Matchcontent, command);
if ma.Success)
{
result = true;
}
return result;
}
//读文本关机
private void GetBytxt)
{
while true)
{
Thread.Sleep2000);
x++;
string content = File.ReadAllText"1.txt", Encoding.Default);
list.Addcontent);
bool b = CommandResultlist[x], txtCommand.Text.Trim));
if b==true)
{
shutdown);
}
}
}
//读网络关机
private void OffByNetobject ur)
{
string url = ur as string;
while true)
{
Thread.Sleep2000);
x++;
GetContenturl);
bool result = CommandResultlist[x], txtCommand.Text.Trim));
if result==true)
{
lbState.Items.Clear);
lbState.Items.Add"捕获命令,执行关机");
shutdown);
thGet.Abort);
}
else
{
lbState.Items.Add"正在监听中,请等待.......");
}
}
}
private void FrmMain_FormClosingobject sender, FormClosingEventArgs e)
{
DialogResult dr = MessageBox.Show"是否取消当前监听?","监听",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
if dr !=System.Windows.Forms.DialogResult.Yes)
{
e.Cancel = true;
}
}
private void FrmMain_Loadobject sender, EventArgs e)
{
}
}
}
4.不足性
微薄关机,监控软件始终需要一个公共的参看微薄的功能,软件在写的时候一直没有解决这个”公共的查看微薄”的功能,如果不登录,本身是没有查看的功能。思来想去,要么微薄提供一个公共的API,要不然就用其它的方式,想了半天还是没有想出解决方法,今天在cnblogs看到一位朋友说了解决方法:
注册一个公共的微薄账号,然后关注需要监控的微薄,将公共微薄内置在监控软件内可是如何实现软件模拟登陆呢?),然后就可以实现远程关机功能
小弟初学C#,欢迎各位大神拍砖


