QT獲取電量狀態

#ifndef WIDGET_H
#define WIDGET_H


#include <QTimer>
#include <QObject>
//!
//! \brief The ShowBatteryWIFI class
//!
//! author: michael zheng
//! date:   2017.1.23
//! http:   www.zhengsir.net
//!
class ShowBatteryWIFI : public QObject
{
    Q_OBJECT

public:
     ShowBatteryWIFI();
    ~ShowBatteryWIFI();

     QTimer *timer ;

signals:

     signalNowBattery(int number);
     signalNowWifi(int number);

private:

     void showBattery();
     void showWIFI();

public slots:
    void slotTimeout();


};

#endif // WIDGET_H


#include "showbatterywifi.h"
//#include "ui_widget.h"
#include <windows.h>
#include <wlanapi.h>
#include <QPixmap>
//! \brief ShowBatteryWIFI::ShowBatteryWIFI
//!
//! author: michael zheng
//! date:   2017.1.23
//! http:   www.zhengsir.net
//!
ShowBatteryWIFI::ShowBatteryWIFI()
{
    timer = new QTimer();
    connect(timer,SIGNAL(timeout()),this,SLOT(slotTimeout()));
    timer->start(3000);
    showBattery();
    showWIFI();
}

ShowBatteryWIFI::~ShowBatteryWIFI()
{

}

void ShowBatteryWIFI::slotTimeout()
{
    showBattery();
    showWIFI();
}

void ShowBatteryWIFI::showBattery()     //電量
{
    SYSTEM_POWER_STATUS systemPowerSatus;
    GetSystemPowerStatus(&systemPowerSatus);
    int remaindPower=(int)systemPowerSatus.BatteryLifePercent;
    if(remaindPower>75)
    {
        signalNowBattery(4);
    }
    else if(remaindPower>50&&remaindPower<=75)
    {
        signalNowBattery(3);
    }
    else if(remaindPower>25&&remaindPower<=50)
    {
        signalNowBattery(2);
    }
    else if(remaindPower>10&&remaindPower<=25)
    {
        signalNowBattery(1);
    }
    else
    {
        signalNowBattery(0);
    }
}
void ShowBatteryWIFI::showWIFI()
{
    DWORD dwError = ERROR_SUCCESS;
    DWORD dwNegotiatedVersion;
    HANDLE hClientHandle = NULL;

    dwError = WlanOpenHandle(1, NULL, &dwNegotiatedVersion, &hClientHandle);
    if (dwError != ERROR_SUCCESS)
    {
        WlanCloseHandle(hClientHandle,NULL);
        return;
    }

    PWLAN_INTERFACE_INFO_LIST pInterfaceList = NULL;
    dwError = WlanEnumInterfaces(hClientHandle, NULL,&pInterfaceList);
    if ( dwError != ERROR_SUCCESS )
    {
        WlanFreeMemory(pInterfaceList);
        WlanCloseHandle(hClientHandle,NULL);
        return;
    }

    GUID &guid = pInterfaceList->InterfaceInfo[0].InterfaceGuid;
    PWLAN_AVAILABLE_NETWORK_LIST pWLAN_AVAILABLE_NETWORK_LIST = NULL;

    dwError = WlanGetAvailableNetworkList(hClientHandle, &guid,
        2,NULL, &pWLAN_AVAILABLE_NETWORK_LIST);
    if (dwError != ERROR_SUCCESS)
    {
        WlanFreeMemory(pInterfaceList);
        WlanFreeMemory(pWLAN_AVAILABLE_NETWORK_LIST);
        WlanCloseHandle(hClientHandle,NULL);
        return;
    }

    WLAN_AVAILABLE_NETWORK wlanAN;
    bool isConnected=false;
    int numberOfItems = pWLAN_AVAILABLE_NETWORK_LIST->dwNumberOfItems;
    if (numberOfItems > 0)
    {
        for(int i = 0; i <numberOfItems; i++)
        {
            wlanAN = pWLAN_AVAILABLE_NETWORK_LIST->Network[i];
            if(wlanAN.dwFlags & 1)
            {
                isConnected=true;

                int wifiQuality=(int)wlanAN.wlanSignalQuality;

                if(wifiQuality>75)
                {
                    signalNowWifi(4);
                }
                else if(wifiQuality>50&&wifiQuality<=75)
                {
                    signalNowWifi(3);
                }
                else if(wifiQuality>25&&wifiQuality<=50)
                {
                    signalNowWifi(2);
                }
                else if(wifiQuality>0&&wifiQuality<=25)
                {
                    signalNowWifi(1);
                }

            }
        }
    }
    if (!isConnected)
    {
        signalNowWifi(0);
    }
    WlanFreeMemory(pInterfaceList);
    WlanFreeMemory(pWLAN_AVAILABLE_NETWORK_LIST);
    WlanCloseHandle(hClientHandle,NULL);
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章