Example #1
0
        public static CmdResult Run(string fileName, string args)
        {
            Process p = new Process();

            p.StartInfo.FileName               = fileName;
            p.StartInfo.Arguments              = args;
            p.StartInfo.UseShellExecute        = false;
            p.StartInfo.CreateNoWindow         = true;
            p.StartInfo.RedirectStandardInput  = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError  = true;

            CmdResult cmdResult = new CmdResult("", "");

            try
            {
                p.Start();
                p.WaitForExit();
                cmdResult.Set(p.StandardOutput.ReadToEnd(), p.StandardError.ReadToEnd());
            }
            catch (Exception e)
            {
                Console.WriteLine("运行 " + fileName + " 出现错误\n" + e.StackTrace);
            }

            return(cmdResult);
        }
Example #2
0
        public bool SetMaxCpu(int num)
        {
            if (num > 100)
            {
                num = 100;
            }
            if (num < 0)
            {
                num = 0;
            }
            string command1 = "powercfg /setacvalueindex " +
                              scheme_GUID + " " + sub_GUID + " " + setting_GUID + " " + num.ToString();
            string command2 = "powercfg /setdcvalueindex " +
                              scheme_GUID + " " + sub_GUID + " " + setting_GUID + " " + num.ToString();
            string    command3 = "powercfg /s " + scheme_GUID;
            CmdResult result   = CmdRunner.CmdRun(command1 + "&" + command2 + "&" + command3);

            Log("\n设置状态\n" + command1 + "&" + command2 + "&" + command3);

            if (result.error == string.Empty)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #3
0
        public static CmdResult CmdRun(string command)
        {
            Process p = new Process();

            p.StartInfo.FileName        = "cmd.exe";
            p.StartInfo.UseShellExecute = false;
            // p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError  = true;
            p.StartInfo.CreateNoWindow         = true;
            p.StartInfo.Arguments = "/c " + command;
            p.Start();

            string result = p.StandardOutput.ReadToEnd();
            string error  = p.StandardError.ReadToEnd();

            p.WaitForExit();
            p.Close();
            CmdResult cmdResult = new CmdResult(result, error);

            return(cmdResult);
        }
Example #4
0
        public PowerManager()
        {
            logPath = AppDomain.CurrentDomain.BaseDirectory + "runtime.log";
            //写出查询结果日志
            if (!File.Exists(logPath))
            {
                File.Create(logPath).Close();
            }
            else
            {
                //若文件超过100k则清空
                FileInfo fileInfo = new FileInfo(logPath);
                if (fileInfo.Length > 100 * 1024)
                {
                    File.Create(logPath).Close();
                }
            }

            CmdResult schemeListResult = CmdRunner.CmdRun("powercfg /l");

            Log("\n计划列表\n" + schemeListResult.result);
            CmdResult queryResult = CmdRunner.CmdRun("powercfg /q");

            Log("\n计划查询\n" + queryResult.result);
            //查找当前电源方案的GUID
            Regex rScheme = new Regex(@"电源方案 GUID: ([a-z0-9\-]+)  \(.*\) \*");

            if (rScheme.IsMatch(schemeListResult.result))
            {
                scheme_GUID = rScheme.Match(schemeListResult.result).Groups[1].ToString();
            }
            else
            {
                throw new Exception("CmdError:" + schemeListResult.error
                                    + "&CmdResult:" + schemeListResult.result);
            }
            //查找子组GUID
            Regex rSub = new Regex(@"子组 GUID: ([a-z0-9\-]+)  \(处理器电源管理\)");

            if (rSub.IsMatch(queryResult.result))
            {
                sub_GUID = rSub.Match(queryResult.result).Groups[1].ToString();
            }
            else
            {
                throw new Exception("CmdError:" + queryResult.error
                                    + "&CmdResult:" + queryResult.result);
            }
            //查找设置GUID
            Regex rSet = new Regex(@"电源设置 GUID: ([a-z0-9\-]+)  \(最大处理器状态\)");

            if (rSet.IsMatch(queryResult.result))
            {
                setting_GUID = rSet.Match(queryResult.result).Groups[1].ToString();
            }
            else
            {
                throw new Exception("CmdError:" + queryResult.error
                                    + "&CmdResult:" + queryResult.result);
            }

            //查找当前CPU设置
            //查找最大处理器状态
            int   startIndex = queryResult.result.IndexOf("最大处理器状态");
            Regex rValue     = new Regex(@"交流电源设置索引: 0x([0-9]+)");

            maxValue = Convert.ToInt32(rValue.Match(queryResult.result, startIndex).Groups[1].ToString(), 16);

            //查找最小处理器状态
            startIndex = queryResult.result.IndexOf("最小处理器状态");
            minValue   = Convert.ToInt32(rValue.Match(queryResult.result, startIndex).Groups[1].ToString(), 16);

            Log("\n已查找GUID:" +
                "\n电源方案 " + scheme_GUID +
                "\n子类 " + sub_GUID +
                "\n最大状态 " + setting_GUID + " " + maxValue
                + "\n最小状态 " + minValue);
            //若最小处理器状态过大
            if (minValue == 100)
            {
                //查找最小处理器状态GUID
                rSet = new Regex(@"电源设置 GUID: ([a-z0-9\-]+)  \(最小处理器状态\)");
                string minSettingGUID = rSet.Match(queryResult.result).Groups[1].ToString();

                //设置最小CPU为99
                string command1 = "powercfg /setacvalueindex " +
                                  scheme_GUID + " " + sub_GUID + " " + minSettingGUID + " 99";
                string command2 = "powercfg /setdcvalueindex " +
                                  scheme_GUID + " " + sub_GUID + " " + minSettingGUID + " 99";
                CmdRunner.CmdRun(command1 + "&" + command2);
            }
        }