-->

从Java笔记本的监测电池或电源(Monitoring battery or power suppl

2019-06-26 11:26发布

我开发其监视的笔记本电脑的电源的存在的应用程序。 如果有停电或恢复将函告我通过电子邮件。 它也将应用监测和控制通过电子邮件(基本上是从我的办公室通过电子邮件控制我的笔记本电脑)。 我与电子邮件接口完成,但我如何监控从Java电源/电池供电的不知道。

如果有任何可以给一些指针就这一点,将是很大的帮助。

提前致谢 ....

Answer 1:

您可能已经解决了这个问题,但对于其他人-你可以做到这一点亚当Crume暗示的方式,使用已写好的剧本battstat.bat适用于Windows XP及更高版本。 下面是所得到的函数的一个例子:

private Boolean runsOnBattery() {
    try {
        Process proc = Runtime.getRuntime().exec("cmd.exe /c battstat.bat");

        BufferedReader stdInput = new BufferedReader(
            new InputStreamReader(proc.getInputStream()));

        String s;
        while ((s = stdInput.readLine()) != null) {
            if (s.contains("mains power")) {
                return false;
            } else if (s.contains("Discharging")) {
                return true;
            }
        }
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }

    return false;
}

或者你也可以简化脚本直接返回真/假或任何适合。



Answer 2:

在Linux上,你可以用的/ proc / ACPI /电池/



Answer 3:

快速谷歌搜索变成了一个在SourceForge上的Java ACPI库 。 自2004年以来,虽然一直没有更新。



Answer 4:

一个快速和肮脏的方式来处理,这是调用本机程序(通过的Runtime.exec(...)),并解析输出。 在Windows上,本机程序可能是VBScript中使用WMI。



Answer 5:

下面是使用在Windows上运行的代码SYSTEM_POWER_STATUS结构。

请注意,您需要添加jna你(的Maven)依赖这个工作。

import java.util.ArrayList;
import java.util.List;

import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.win32.StdCallLibrary;

public interface Kernel32 extends StdCallLibrary
{
    public Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("Kernel32",
            Kernel32.class);

    public class SYSTEM_POWER_STATUS extends Structure
    {
        public byte ACLineStatus;

        @Override
        protected List<String> getFieldOrder()
        {
            ArrayList<String> fields = new ArrayList<String>();
            fields.add("ACLineStatus");

            return fields;
        }

        public boolean isPlugged()
        {
            return ACLineStatus == 1;
        }
    }

    public int GetSystemPowerStatus(SYSTEM_POWER_STATUS result);
}

在你的代码中调用它像这样:

Kernel32.SYSTEM_POWER_STATUS batteryStatus = new Kernel32.SYSTEM_POWER_STATUS();
Kernel32.INSTANCE.GetSystemPowerStatus(batteryStatus);

System.out.println(batteryStatus.isPlugged());

结果:

true if charger is plugged in false otherwise

这已经得出过BalsusC的答案 。



文章来源: Monitoring battery or power supply of laptop from java