【问题标题】:How to set ACLineStatus using ACPI functions如何使用 ACPI 函数设置 ACLineStatus
【发布时间】:2014-05-29 07:49:37
【问题描述】:

我想读取 BatteryLifePercent 的值,如果它高于 80%(0.80),则将 ACLineStatus 设置为离线。

我尝试过使用

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern Boolean GetSystemPowerStatus(out SystemPowerStatus sps);

    private enum ACLineStatus : byte
    {
        Offline = 0,
        Online = 1,
        Unknown = 255
    }

    private enum BatteryFlag : byte
    {
        High = 1,
        Low = 2,
        Critical = 4,
        Charging = 8,
        NoSystemBattery = 128,
        Unknown = 255
    }

    private struct SystemPowerStatus
    {
        public ACLineStatus LineStatus;
        public BatteryFlag flgBattery;
        public Byte BatteryLifePercent;
        public Byte Reserved1;
        public Int32 BatteryLifeTime;
        public Int32 BatteryFullLifeTime;
    }

    public static Boolean ACPowerPluggedIn()
    {
        SystemPowerStatus SPS = new SystemPowerStatus();
        GetSystemPowerStatus(out SPS);

        if (SPS.LineStatus == ACLineStatus.Online)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public static Int32 BatteryCharge()
    {
        SystemPowerStatus SPS = new SystemPowerStatus();
        GetSystemPowerStatus(out SPS);

        return (Int32)SPS.BatteryLifePercent;
    }

它可以用来读取 BatteryLifePercent。但我不知道如何将 ACLineStatus 设置为离线以避免进一步充电。

我也想知道,是否可以使用acpi控制方式(http://msdn.microsoft.com/en-us/library/windows/hardware/ff536139(v=vs.85).aspx)?

【问题讨论】:

    标签: c# winapi acpi


    【解决方案1】:

    ACPI 方法只能从内核驱动程序调用,然后只能 从设备的驱动程序堆栈中声明该方法 DSDT。

    【讨论】:

      猜你喜欢
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2019-10-07
      • 2019-09-14
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多