修改PC进入睡眠的时间(win10,c#)

本文介绍了一个C#项目,用于修改Windows电脑接通电源时的睡眠时间设置为2小时,并确保即使恢复默认设置后该时间仍然保持不变。通过使用Win32 API函数PowerWriteACDefaultIndex和PowerWriteACValueIndex实现了这一需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中需求一个修改电脑进入睡眠时间的功能,如图
要把接通电源时间改为2个小时,并且把恢复默认设置后也保持2个小时,重要需求就是这个,那么我们来看如何实现的。

以下为代码

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace TosBalanACSleepService
{
    public partial class Service1 : ServiceBase
    {
        [DllImport("PowrProf.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern uint PowerWriteACDefaultIndex(
           IntPtr RootSystemPowerKey,
           ref Guid SchemePersonalityGuid,
           ref Guid SubGroupOfPowerSettionsGuid,
           ref Guid PowerSettingGuid,
           long DefultAcindex);

        [DllImport("PowrProf.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern uint PowerWriteACValueIndex(
           IntPtr RootSystemPowerKey,
           ref Guid SchemePersonalityGuid,
           ref Guid SubGroupOfPowerSettionsGuid,
           ref Guid PowerSettingGuid,
           long DefultAcindex);

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            Guid GUID_TYPICAL_POWER_SAVINGS = new Guid("381b4222-f694-41f0-9685-ff5bb260df2e");
            Guid GUID_SLEEP_SUBGROUP = new Guid("238C9FA8-0AAD-41ED-83F4-97BE242C8F20");
            Guid GUID_STANDBY_TIMEOUT = new Guid("29F6C1DB-86DA-48C5-9FDB-F2B67B1F44DA");
            long value = 7200;

            try
            { 
                PowerWriteACDefaultIndex(IntPtr.Zero, ref GUID_TYPICAL_POWER_SAVINGS, ref GUID_SLEEP_SUBGROUP, ref GUID_STANDBY_TIMEOUT, value);
                PowerWriteACValueIndex(IntPtr.Zero, ref GUID_TYPICAL_POWER_SAVINGS, ref GUID_SLEEP_SUBGROUP, ref GUID_STANDBY_TIMEOUT, value);
               /* RegistryKey key = Registry.LocalMachine;
                RegistryKey Sleepsoftware = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Power\User\Default\PowerSchemes\381b4222-f694-41f0-9685-ff5bb260df2e\238c9fa8-0aad-41ed-83f4-97be242c8f20\29f6c1db-86da-48c5-9fdb-f2b67b1f44da", true);        
                Sleepsoftware.SetValue("ACSettingIndex", 7200);*///若是改不了恢复默认设置的睡眠时间,请去掉注释改注册表
            }
            catch
            {
            }
        }

        protected override void OnStop()
        {
        }
    }
}

这个就是代码实现的过程,其实按功能来说不用改注册表也能实现,
为什么改注册表是应因为我们内部有一个其他组件之前改过睡眠时间,之后再改就改不掉了,研究过后决定改注册表,并且用最高权限来做,所以你可以看到我这段实现是写在服务中的,运行时安装此服务并开启,之后再然后马上卸载掉来完成此功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值