private void InteractiveMode()
        {
            PowerPlan[] availablePlans = PowerPlanManager.GetPowerPlans();
            PowerPlan   currentPlan    = PowerPlanManager.GetCurrentPowerPlan();

            Console.WriteLine($"現在の電源プラン: {currentPlan.Name} ({currentPlan.Guid})\n");

            availablePlans
            .Select((p, i) => $"{i + 1}: {availablePlans[i].Name} ({availablePlans[i].Guid})")
            .ToList()
            .ForEach(Console.WriteLine);

            Console.Write("\n変更したいプランの番号: ");

            if (!int.TryParse(Console.ReadLine(), out int result))
            {
                return;
            }
            if (result <= 0 && availablePlans.Length < result)
            {
                return;
            }

            PowerPlan selectedPlan = availablePlans[result - 1];

            PowerPlanManager.PowerSetActiveScheme(selectedPlan.Guid);

            Console.WriteLine($"\n{selectedPlan.Name}へ変更しました。");
        }
        private void ImmediateMode()
        {
            PowerPlan[] availablePlans = PowerPlanManager.GetPowerPlans();

            CommandLine.Parser.Default.ParseArguments <Parser.Options>(args)
            .WithParsed(o =>
            {
                if (o.Guid != null && o.Plan != null)
                {
                    return;
                }

                if (o.Guid != null)
                {
                    bool isValidGuid = Guid.TryParse(o.Guid, out Guid guid);
                    if (!isValidGuid)
                    {
                        return;
                    }

                    PowerPlan[] searchResult = availablePlans.Where(p => p.Guid == guid).ToArray();
                    bool planExists          = 0 < searchResult.Length;
                    if (!planExists)
                    {
                        return;
                    }

                    PowerPlanManager.PowerSetActiveScheme(guid);
                    return;
                }

                if (o.Plan != null)
                {
                    PowerPlan plan;

                    switch (o.Plan)
                    {
                    case "powersave":
                        plan = PowerPlan.POWERSAVE;
                        break;

                    case "balanced":
                        plan = PowerPlan.BALANCED;
                        break;

                    case "performance":
                        plan = PowerPlan.PERFORMANCE;
                        break;

                    default:
                        return;
                    }

                    PowerPlanManager.PowerSetActiveScheme(plan.Guid);
                    return;
                }
            });
        }
Beispiel #3
0
        public static void UpdateMenu(ContextMenuStrip menu)
        {
            menu.Items.Clear();

            foreach (var plan in PowerPlanManager.FindAll())
            {
                var item = new ToolStripMenuItem
                {
                    Text    = plan.Name,
                    Tag     = plan.Guid,
                    Checked = (plan.Guid == PowerPlanManager.Active.Guid)
                };

                item.Click += delegate(object sender, EventArgs e)
                {
                    PowerPlanManager.Active = new PowerPlan
                    {
                        Name = null,
                        Guid = (Guid)((ToolStripMenuItem)sender).Tag
                    };
                };

                menu.Items.Add(item);
            }

            menu.Items.Add(new ToolStripSeparator());

            // Charge indicator
            var charge = new ToolStripMenuItem {
                Text = ChargeString(), Enabled = false
            };

            menu.Items.Add(charge);

            // Version info
            var version = new ToolStripMenuItem {
                Text = String.Format(Strings.VersionString, Version), Enabled = false
            };

            menu.Items.Add(version);

            menu.Items.Add(new ToolStripSeparator());

            // Control panel shortcut
            var cpanel = new ToolStripMenuItem {
                Text = Strings.MoreSettings
            };

            cpanel.Click += (sender, e) => Process.Start(ControlExe, "/name Microsoft.PowerOptions");

            menu.Items.Add(cpanel);

            // Autostart
            var shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup),
                                            "PowerPlanSwitcher.lnk");

            var autostart = new ToolStripMenuItem
            {
                Text         = Strings.Autostart,
                Checked      = File.Exists(shortcutPath),
                CheckOnClick = true
            };

            autostart.Click += (sender, args) =>
            {
                if (((ToolStripMenuItem)sender).Checked)
                {
                    File.Delete(shortcutPath);
                    var shortcut = new ShellLink
                    {
                        Target           = Application.ExecutablePath,
                        WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath),
                        Description      = "Power Plan Switcher",
                        DisplayMode      = ShellLink.LinkDisplayMode.edmNormal
                    };
                    shortcut.Save(shortcutPath);
                }
                else
                {
                    File.Delete(shortcutPath);
                }
            };

            menu.Items.Add(autostart);

            // Exit
            var exit = new ToolStripMenuItem {
                Text = Strings.Exit
            };

            exit.Click += delegate
            {
                _trayIcon.Visible = false;
                Application.Exit();
            };

            menu.Items.Add(exit);
        }