解决电脑自动开机问题
来源:互联网 发布:下列属于软件特性 编辑:程序博客网 时间:2024/04/28 08:44
最近一段时间笔记本电脑老是自动开机,拿去修也没修好,果断写个程序让电脑自动休眠
using System;using System.Diagnostics;using System.IO;using System.ServiceProcess;using System.Timers;namespace WindowsService1{ public partial class Service1 : ServiceBase { public static string FILENAME = "C://Myservice.log"; public static DateTime lastTimePoint; //dosCommand Dos命令语句 public static string Execute(string dosCommand) { return Execute(dosCommand, 10); } // 执行DOS命令,返回DOS命令的输出 public static string Execute(string command, int seconds) { 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())//开始进程 { if (seconds == 0) process.WaitForExit();//这里无限等待进程结束 else process.WaitForExit(seconds); //等待进程结束,等待时间为指定的毫秒 output = process.StandardOutput.ReadToEnd();//读取进程的输出 } } catch { } finally { if (process != null) process.Close(); } } return output; } public Service1() { InitializeComponent(); } //文件写入操作 public static void LogFile(string filename, string buf) { try { FileStream fs = new FileStream(filename, FileMode.Append); byte[] data = System.Text.Encoding.Default.GetBytes(buf + "\r\n"); fs.Write(data, 0, data.Length); fs.Flush(); fs.Close(); } catch (Exception e) { Console.WriteLine("cannot open file"); } } private static void onTimeEvent(object source, ElapsedEventArgs e) { DateTime now = DateTime.Now; if (now > lastTimePoint.AddMinutes(5)) //时间相差超过5分钟,可以认为是电脑重新启动 { LogFile(FILENAME, "[!] 检测到电脑启动: " + now ); lastTimePoint = now; setAutoCheck(); return; } lastTimePoint = now; } public static void setAutoCheck() { System.Timers.Timer t = new System.Timers.Timer(5 * 60 * 1000); //正常状态下,用户会在五分钟内进行登录操作,所以登录检查设定在五分钟以后 t.Elapsed += new System.Timers.ElapsedEventHandler(loginCheck); t.AutoReset = false; t.Enabled = true; t.Start(); } /* public static void _startClient() { FileStream f = File.Open(@"D:\setting.txt", FileMode.Open); byte[] buff = new byte[1024]; f.Read(buff, 0, buff.Length); f.Close(); string path = System.Text.Encoding.ASCII.GetString(buff); LogFile(FILENAME, path); Process process = new Process();//创建进程对象 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = path;//设定需要执行的命令 startInfo.UseShellExecute = false;//不使用系统外壳程序启动 startInfo.RedirectStandardInput = false;//不重定向输入 startInfo.RedirectStandardOutput = true; //重定向输出 startInfo.CreateNoWindow = false;//不创建窗口 process.Start(); process.WaitForExit(); } public static void startClient() { Thread t = new Thread(_startClient); t.Start(); } */ private static void loginCheck(object source, System.Timers.ElapsedEventArgs e) { if (DateTime.Now > lastTimePoint.AddMinutes(5)) { String time = DateTime.Now.ToString(); LogFile(FILENAME, "[!] 当前时间: " + time ); LogFile(FILENAME, "[!] 计时器超时,自动失效"); return; } if(! isLogin()) { /* Process[] proc = Process.GetProcessesByName("AutoShutdownClient"); if (proc.Length == 0) { LogFile(FILENAME, "客户端进程未打开"); } else { TcpClient tc = new TcpClient(); tc.Connect(IPAddress.Parse("127.0.0.1"), 6789); NetworkStream ns = tc.GetStream(); StreamReader sr = new StreamReader(ns); sr.ReadLine(); string tmp = "shutdown?\r\n"; ns.Write(System.Text.Encoding.ASCII.GetBytes(tmp), 0, tmp.Length); string result = sr.ReadLine(); if (result.Contains("no")) { return; } } */ String time = DateTime.Now.ToString(); LogFile(FILENAME, "[!] 当前时间: "+time); LogFile(FILENAME, "[!] 非正常启动,将立即尝试自动休眠电脑"); LogFile(FILENAME, Execute("shutdown /h")); } } public static bool isLogin() { string logType1 = "Security"; EventLog e = new EventLog(logType1); int length = e.Entries.Count; DateTime now = DateTime.Now; for (int i = length - 1; ; i--) { EventLogEntry l = e.Entries[i]; if (l.TimeGenerated > now.AddMinutes(-10)) //过滤掉十分钟以前的事件 { if (l.InstanceId == 4624 && l.Message.Contains("bluekezhou@qq.com")) { //用户登录事件id为4624 LogFile(FILENAME, "[*] 检测到登录事件:" + l.InstanceId.ToString() + " " + l.TimeGenerated ); return true; } } else break; } LogFile(FILENAME, "[*] 没有检测用户登录"); return false; } protected override void OnStart(string[] args) { String time = DateTime.Now.ToString(); LogFile(FILENAME, "\r\n" + time); LogFile(FILENAME, "[*] 服务启动"); lastTimePoint = DateTime.Now; setAutoCheck(); //设置触发器 System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(onTimeEvent); aTimer.AutoReset = true; //每60秒(一分钟)触发一次检测 aTimer.Interval = 60000; aTimer.Enabled = true; aTimer.Start(); LogFile(FILENAME, "[*] 监听器设置完毕"); } protected override void OnStop() { String time = DateTime.Now.ToString(); LogFile(FILENAME, "\r\n" + time); LogFile(FILENAME, "[*] 服务停止"); } }}
0 0
- 解决电脑自动开机问题
- 解决电脑开机后打印机会自动打印的问题
- 让电脑自动开机
- 电脑的自动开机
- 电脑自动开机
- 电脑开机蓝屏解决........
- ibus开机自动启动问题---解决
- 解决硬盘开机自动挂载问题
- 因数据库使电脑开机很慢问题的解决
- 解决电脑开机黑屏只有鼠标的问题
- 电脑如何设置自动开机
- 设置电脑定时自动开机
- 如何解决windows7开机后放大镜自动启动的问题
- ubuntu13.10解决开机自动调节为最大亮度问题
- 请教电脑开机速度问题
- 电脑自动开机和关机的方法
- 四招让电脑开机时小键盘自动启用
- 如何设置电脑通电自动开机
- 动态规划——01背包问题
- Objective-C Runtime 运行时
- Gson 反序列化
- Java序列化和反序列化小记
- Jmeter之JDBC Request使用方法(oracle)
- 解决电脑自动开机问题
- 最小生成树~prim
- Yii2 mongodb – 关于mongoid的使用
- Cocos2d-x 3.x 的精灵修改色相(Hue)
- SDUT2139图结构练习——BFS——从起始点到目标点的最短步数
- android源码学习
- 【Android】Android Studio中使用OpenCV将彩图转换成灰度图
- 大文件断点续传
- Yii2 关闭和打开csrf 验证