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