需要在命令行中指定用户名,关机/注销,延时时间,和使用电脑的一个或多个时间段。代码如下:
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"); 出现异常,结束程序
}
}
}
}
}
}