【更新】支持命令行参数的家长控制辅助小程序

超级网迷+ 电脑迷+ 音乐迷
打印 被阅读次数

需要在命令行中指定用户名,关机/注销,延时时间,和使用电脑的一个或多个时间段。代码如下:

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"); 出现异常,结束程序
                    }

                }
            }
        }
    }
}

登录后才可评论.