2009-07-21 4 views
5

랩톱의 전원 공급 장치를 모니터링하는 응용 프로그램을 개발 중입니다. 전원이 차단되거나 복원되면 이메일을 통해 친밀감을 느끼게됩니다. 또한 응용 프로그램 모니터링 및 전자 메일 제어 (기본적으로 전자 메일을 통해 사무실에서 랩톱을 제어)가됩니다. 전자 메일 인터페이스로 끝났지 만 Java에서 전원 공급 장치/배터리 공급 장치를 모니터링하는 방법에 대해서는 잘 모릅니다.배터리 또는 노트북에서 노트북의 전원 공급 장치를

이 항목에 포인터가 있으면 큰 도움이됩니다. 사전에

감사합니다 ....

+1

플랫폼에 따라 플랫폼 (OS)을 알면 도움이됩니다. – jsight

+0

그냥 왜 동성애 동사를 사용하는 이유는 궁금? 이상하게 들린다. 다른 단어를 사용 하시겠습니까? 아니면 일종의 이메일 API입니까? – Victor

+0

나는 창 전망을 사용하고있다 그리고 "친밀한"오식은 "알려"있어야했다 : $. – vcosk

답변

5

당신은 아마 이미이 문제를 해결 한 사용할 수 있지만, 다른 사람을 위해 - 당신을 위해 이미 작성된 스크립트 battstat.bat를 사용하여, 그것을 아담 Crume 알 방법을 수행 할 수 있습니다 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; 
} 

또는 직접 참/거짓이든 적합를 반환하는 스크립트를 단순화 할 수 있습니다.

+0

이것은 배터리의 현재 상태를 적절하게 알려주지는 않았지만 이것은 내가 본 당시에 정확히 찾고 있었던 것이기 때문에 매우 흥미 롭습니다. – vcosk

0

이 문제를 처리하는 빠르고 쉬운 방법은 (Runtime.exec (...)을 통해) 네이티브 프로그램을 호출하고 출력을 구문 분석하는 것입니다. Windows에서 기본 프로그램은 WMI를 사용하는 VBScript 일 수 있습니다. 리눅스에

2

, 당신은/proc 디렉토리/ACPI/배터리/

0

SYSTEM_POWER_STATUS 구조를 사용하여 Windows에서 작동하는 코드는 다음과 같습니다.

이 작업을 수행하려면 (Maven) 종속성에 jna을 추가해야합니다. 코드에서

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을 유도하고있다.

관련 문제