需要在命令行中指定用户名,关机/注销,延时时间,和使用电脑的一个或多个时间段。代码如下:
using System; using System.Threading; using System.Security.Principal; using System.Diagnostics; using System.Windows.Forms; /* 命令行使用举例: * 例1:Helper.exe john -s 30 1000 1100 * 如果用户是john,那么规定的时间段是10:00到11:00可以用电脑;否则30秒后关机; * 例2:Helper.exe john -l 25 1000 1100 1300 1400 * 如果用户是john,那么规定的时间段是10:00到11:00,或者13:00到14:00可以用电脑, * 否则25秒后用户注销(退出)。 */ namespace Helper { static class Program { static void Main(string[] args) { if (args.Length < 5) return; //参数的个数不少于5,否则就退出 else { //第一个参数是要限制的用户名 string userName = args[0].ToUpper(); string CurUserName = WindowsIdentity.GetCurrent().Name; //取得当前用户名 if (CurUserName.Split('')[1].ToUpper() == userName) //判断登录用户名 { int start = 0; int end = 0; bool isBetween = true; //初始化是否超时的变量 try { while (isBetween) { bool flag = false; //判断是否在时间段的标志 //取得当前时间 int now = int.Parse(DateTime.Now.ToString("HHmm")); for (int i = 3; i < args.Length; i = i + 2) { //接下来的时间段(开始时间:start,结束时间:end) start = int.Parse(args[i]); end = int.Parse(args[i + 1]);
if (start * end != 0 && end > start) { //start 到 end 可以看电脑:) flag = flag | (now > start && now < end); } else flag = true; //如果参数设置无效,则开绿灯:) } if (!flag) //判断是否在规定的时间段内 break; //不在的话,停止循环, 也就是开红灯:( else Thread.Sleep(60 * 1000); //每60秒判断一次 } //如果不在时间段内看电脑,延迟args[2]秒后关机或者注销... string shutdown = args[1] + " -f -t " + int.Parse(args[2]); System.Diagnostics.Process.Start(@"C:/WINDOWS/system32/Shutdown", shutdown); } catch (Exception e) { //MessageBox.Show("exception"); 出现异常,结束程序 } } } } } } |