Senin, 15 September 2014

Mendapatkan Informasi dan Persentase Baterai Laptop dengan C


Di Windows, kita dapat menemukan banyak sekali fungsi API yang sangat membantu pekerjaan kita. Salah satunya adalah dalam hal mendapatkan informasi baterai, seperti persentase dan life time. Hal ini sedikit berbeda dan menjadi nilai plus jika dibandingkan dengan L*nux. Untuk mendapatkan informasi baterai, kita cukup menggunakan satu fungsi API, yaitu GetSystemPowerStatus(). Fungsi ini langsung bisa kita pakai setelah meng-include header windows.h.

Cara kerja
Cara kerjanya sederhana, kita cukup memanggil fungsi berikut disertai argumen berupa pointer ke SYSTEM_POWER_STATUS. Berikut ini adalah bentuk fungsinya..

BOOL GetSystemPowerStatus(LPSYSTEM_POWER_STATUS lpSystemPowerStatus);

Jika berhasil, fungsi akan mengembalikan nilai 1(TRUE). Jika gagal, fungsi mengembalikan 0(FALSE).
Berikutnya, yang harus kita ketahui adalah struktur data yang digunakan sebagai parameter itu sendiri. Setelah pemanggilan fungsi, struktur ini akan diisi data status baterai berdasarkan keadaannya saat itu.

typedef struct _SYSTEM_POWER_STATUS {
    BYTE   ACLineStatus;          
    BYTE   BatteryFlag;          
    BYTE   BatteryLifePercent;   
    BYTE   Reserved1;            
    DWORD  BatteryLifeTime;     
    DWORD  BatteryFullLifeTime; 
} SYSTEM_POWER_STATUS;

typedef struct SYSTEM_POWER_STATUS *LPSYSTEM_POWER_STATUS;


ACLineStatus
Menunjukkan apakah charger dalam keadaan terpasang atau tidak. Bagian ini dapat memiliki nilai dan arti sebagai berikut:
  • 0 : Offline(tidak terpasang)
  • 1 : Online(terpasang)
  • 255 : Tidak diketahui

BatteryFlag
Menunjukkan status pengisian baterai.
  • Jika bernilai -1, artinya tidak diketahui (unknown)
  • Jika bernilai 0, artinya baterai dalam keadaan antara high dan low dan sedang tidak di charging.
Jika tidak, operasi berikut akan menunjukkan status baterai:
  • if(BatteryFlag & 1) printf("high ");
  • if(BatteryFlag & 2) printf("low ");
  • if(BatteryFlag & 4) printf("critical ");
  • if(BatteryFlag & 8) printf("charging ");
  • if(BatteryFlag & 128)printf("no system battery");

BatteryLifePercent
Persentase energi baterai yang sedang tersisa. Nilainya bisa berada antara 0 – 100, jika nilainya 255 atau mungkin bukan 0 – 100, maka kita anggap tidak diketahui(unknown)

BatteryLifeTime
Waktu sisa penggunaan baterai dalam detik, jika tidak diketahui(unknown) nilainya adalah 0xFFFFFFFF.

BatteryFullLifeTime
Waktu penggunaan baterai ketika energi penuh, dalam detik. Jika tidak diketahui, nilainya 0xFFFFFFFF.

Oke, langsung saja download sourcenya disini gan!

https://app.box.com/s/756on4pau171flv56fr5

Hasil


Load disqus comments

0 comments