需要在命令行中指定用戶名,關機/注銷,延時時間,和使用電腦的一個或多個時間段。代碼如下:
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"); 出現異常,結束程序
}
}
}
}
}
}