我需要在Windows系统中获得剩余的电池寿命。 我该怎么做?
如何确定在Windows XP中LSA会话是否处于活动状态
无法使用pip安装Scipy
为什么COM的IUnkNown :: Release的这个实现工作?
C ++ Windows Asynch IO命名pipe道第一条消息没有收到
Win32 C ++控制台清除屏幕不闪烁
我假设你正在谈论一台笔记本电脑。 标准Java SE API中不存在这样的API。 该信息仅在操作系统平台本机API中可用。 您至少需要JNI或JNA (JavaWorld文章)才能与平台本机API进行通信。
在Windows中,您想挂钩SYstem_POWER_STATUS结构 。 它提供BatteryLifePercent物业,其中可能是你的利益。 我在旧的forums.sun.com主题中发现了一个有用的基于JNA的代码片段,目前不再可用。 所以这个信用实际上是写给那些不知名的作者的。
要使其工作,首先将jna.jar放入classpath中,然后将以下未经修改的类复制到您的项目中:
package com.example; 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 coreel32 extends StdCallLibrary { public coreel32 INSTANCE = (coreel32) Native.loadLibrary("coreel32",coreel32.class); /** * @see http://msdn2.microsoft.com/en-us/library/aa373232.aspx */ public class SYstem_POWER_STATUS extends Structure { public byte ACLinestatus; public byte BatteryFlag; public byte BatteryLifePercent; public byte Reserved1; public int BatteryLifeTime; public int BatteryFullLifeTime; @Override protected List<String> getFieldOrder() { ArrayList<String> fields = new ArrayList<String>(); fields.add("ACLinestatus"); fields.add("BatteryFlag"); fields.add("BatteryLifePercent"); fields.add("Reserved1"); fields.add("BatteryLifeTime"); fields.add("BatteryFullLifeTime"); return fields; } /** * The AC power status */ public String getACLinestatusstring() { switch (ACLinestatus) { case (0): return "Offline"; case (1): return "Online"; default: return "UnkNown"; } } /** * The battery charge status */ public String getBatteryFlagString() { switch (BatteryFlag) { case (1): return "High,more than 66 percent"; case (2): return "Low,less than 33 percent"; case (4): return "Critical,less than five percent"; case (8): return "Charging"; case ((byte) 128): return "No system battery"; default: return "UnkNown"; } } /** * The percentage of full battery charge remaining */ public String getBatteryLifePercent() { return (BatteryLifePercent == (byte) 255) ? "UnkNown" : BatteryLifePercent + "%"; } /** * The number of seconds of battery life remaining */ public String getBatteryLifeTime() { return (BatteryLifeTime == -1) ? "UnkNown" : BatteryLifeTime + " seconds"; } /** * The number of seconds of battery life when at full charge */ public String getBatteryFullLifeTime() { return (BatteryFullLifeTime == -1) ? "UnkNown" : BatteryFullLifeTime + " seconds"; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("ACLinestatus: " + getACLinestatusstring() + "n"); sb.append("Battery Flag: " + getBatteryFlagString() + "n"); sb.append("Battery Life: " + getBatteryLifePercent() + "n"); sb.append("Battery Left: " + getBatteryLifeTime() + "n"); sb.append("Battery Full: " + getBatteryFullLifeTime() + "n"); return sb.toString(); } } /** * Fill the structure. */ public int GetSystemPowerStatus(SYstem_POWER_STATUS result); }
以下是您可以如何使用它,例如在您的main()方法中:
coreel32.SYstem_POWER_STATUS batteryStatus = new coreel32.SYstem_POWER_STATUS(); coreel32.INSTANCE.GetSystemPowerStatus(batteryStatus); System.out.println(batteryStatus); // Shows result of toString() method.
在我的Latitude E5500上成功打印以下内容:
ACLinestatus:联机
电池标志:高,超过66%
电池寿命:100%
电池左:未知
电池已满:未知
关闭交流电10分钟后:
ACLinestatus:脱机
电池标志:高,超过66%
电池寿命:82%
电池剩余时间:2954秒
电池已满:未知
(不,没有坏的电池,我只是编写一个电影,并不断转移通过WiFi现在;))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。