我正在開發一個應用程序,用於監控筆記本電腦的電源是否存在。如果有電力削減或恢復,它會通過電子郵件將我私密化。它也將通過電子郵件進行應用程序監視和控制(基本上是通過電子郵件從我的辦公室控制筆記本電腦)。我完成了電子郵件接口,但我不知道如何監控來自java的電源/電池電源。從java監控筆記本電腦或筆記本電腦電源
如果有任何可以給這個指針,這將是很大的幫助。
在此先感謝....
我正在開發一個應用程序,用於監控筆記本電腦的電源是否存在。如果有電力削減或恢復,它會通過電子郵件將我私密化。它也將通過電子郵件進行應用程序監視和控制(基本上是通過電子郵件從我的辦公室控制筆記本電腦)。我完成了電子郵件接口,但我不知道如何監控來自java的電源/電池電源。從java監控筆記本電腦或筆記本電腦電源
如果有任何可以給這個指針,這將是很大的幫助。
在此先感謝....
您可能已經解決了這個問題,但對於其他人 - 你可以做到這一點亞當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;
}
也可以簡單腳本直接返回真/假或任何適合。
一個快速谷歌搜索變成了一個java acpi library on sourceforge。自2004年以來沒有更新過。
處理這個問題的一種快速和骯髒的方法是調用本機程序(通過Runtime.exec(...))並解析輸出。在Windows上,本機程序可能是使用WMI的VBScript。
在Linux上,你可以用的/ proc/ACPI /電池/
下面是使用SYSTEM_POWER_STATUS
結構在Windows上工作的代碼。
請注意,您需要將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's answer。
這將有助於瞭解平臺(OS),因爲這可能是平臺特定的。 – jsight 2009-07-21 17:08:06
只是好奇你爲什麼用這個動詞親密?這聽起來很奇怪。你的意思是使用另一個詞或是某種電子郵件API? – Victor 2009-07-21 17:57:38