Powermeter [ win32 ] ( etat de la batterie de votre portable )

Description

Ce petit programme vous donne simplement l'état de la batterie de votre portable et vous indique si vous êtes connectés sur celle-ci ou sur courant alternatif.

Source / Exemple :


#include "windows.h"
#include "resource.h"
#include "PowerMeter.h"

void t1 ( void )
{
	SYSTEM_POWER_STATUS PowerStatus;
	char Temp[100];
	MSG Msg;

	while ( 1 )
	{
		::GetSystemPowerStatus(&PowerStatus);

		switch ( PowerStatus.ACLineStatus )
		{
		case 0 : 
			strcpy(Temp,"On Battery.");
			break;
		case 1 :
			strcpy(Temp,"On Ac Power.");
			break;
		default :
			strcpy(Temp,"Unknown status");
			break;
		}

		::SetDlgItemText(hMainWnd,IDC_STATUS,Temp);

		SendMessage(GetDlgItem(hMainWnd,IDC_METER),PBM_SETPOS,(WPARAM)(int)PowerStatus.BatteryLifePercent,0);

		wsprintf(Temp,"%d %%",PowerStatus.BatteryLifePercent);
		if ( PowerStatus.BatteryFlag & 0x08 )
				strcat(Temp," ( Charging )");
		else
		{
			if ( PowerStatus.BatteryFlag & 0x01 )
				strcat(Temp," ( High )");
			if ( PowerStatus.BatteryFlag & 0x02 )
				strcat(Temp," ( Low )");
			if ( PowerStatus.BatteryFlag & 0x04 )
				strcat(Temp," ( Critical )");
			if ( PowerStatus.BatteryFlag & 0x80 )
				strcpy(Temp,"No System Battery");
			if ( PowerStatus.BatteryFlag == 0xFF )
				strcpy(Temp,"Unknown Status");
		}
		::SetDlgItemText(hMainWnd,IDC_PERCENT,Temp);

		if ( PowerStatus.BatteryLifeTime != 0xFFFFFFFF )
		{
			wsprintf(Temp,"%d h %d", PowerStatus.BatteryLifeTime/3600, (PowerStatus.BatteryLifeTime%3600)/60);
			::SetDlgItemText(hMainWnd,IDC_TIME,Temp);
		}
		else
		{
			strcpy(Temp,"Unknown");
			::SetDlgItemText(hMainWnd,IDC_TIME,Temp);
		}

		::PeekMessage(&Msg,hMainWnd,0,0,PM_REMOVE);
		if ( Msg.message == EXIT )
			return;

		::Sleep ( 500 );
	}
}
BOOL CALLBACK MainDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case WM_INITDIALOG :	
							break;
	case WM_CLOSE:
			PostThreadMessage(m_ThreadID,EXIT,0,0);
			PostQuitMessage(0);
	case WM_COMMAND:
		switch ( LOWORD(wParam) )
		{
		case IDC_QUIT:
			PostThreadMessage(m_ThreadID,EXIT,0,0);
			::PostQuitMessage(0);
			break;
		}
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG message;
	SYSTEM_POWER_STATUS PowerStatus;
	char Temp[100];

	_hInstance = hInstance;

	::InitCommonControls();

	hMainWnd = ::CreateDialog(hInstance, (LPCTSTR)IDD_MAIN, 0, MainDlgProc);
	if (!hMainWnd)
	{
		MessageBox(0, "Can't create main window", "Error", MB_ICONSTOP);
		return 1;
	}

	::ShowWindow(hMainWnd, 1);

	::SendMessage( GetDlgItem(hMainWnd, IDC_METER), PBM_SETRANGE, 0, MAKELPARAM (0, 100));

	::GetSystemPowerStatus(&PowerStatus);

	switch ( PowerStatus.ACLineStatus )
	{
	case 0 : 
		strcpy(Temp,"On Battery.");
		break;
	case 1 :
		strcpy(Temp,"On Ac Power.");
		break;
	default :
		strcpy(Temp,"Unknown status");
		break;
	}

	m_hThread = ::CreateThread(0,0,(LPTHREAD_START_ROUTINE)&t1,0,0,&m_ThreadID);

	::SetDlgItemText(hMainWnd,IDC_STATUS,Temp);

	while (::GetMessage(&message, NULL, 0, 0))
	{
		::TranslateMessage(&message);
		::DispatchMessage(&message);
	}

	return 0;
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.