본문 바로가기
개발/Windows

C++/WinRT의 필요성 - 노트북 배터리 정보 구하기

by lucidmaj7 2021. 11. 18.
728x90
반응형

마이크로소프트에서 수년간 유지해온 Win32 API를 밑에 두고 대 모바일 시대에 다양한 디바이스에서 일괄적인 인터페이스를 제공하기 위해 만든 Windows Runtime 라이브러리를 C++인터페이스로 사용할 수 있게 되었다.

그것이 바로 C++/WinRT .

https://docs.microsoft.com/ko-kr/windows/uwp/cpp-and-winrt-apis/intro-to-using-cpp-with-winrt

 

C++/WinRT 소개 - UWP applications

Windows 런타임 API용 표준 C++ 언어 프로젝션인 C++/WinRT에 대한 소개입니다.

docs.microsoft.com

Win32 애플리케이션만 만들어온 개발자로써 좀 이해가 가지 않는다.

빠른빌드 속도, C++ 17표준, 최소화된 의존성 등..장점이 많지만 궁극적으로 이걸 왜 써야하는가에 대한 의문은 해소되지 않는다.

굳이 이유를 생각해보자면 마이크로소프트가 윈도우8시절 삽질의 결과로 남겨진 WinRT를 살리고자 Windows Runtime으로 남겨 두었고 (이것이 그렇게 쓸모 없는건 아닌지라..) 대 모바일, 크로스플랫폼 시대에 걸맞게 다양한 언어에서 접근 가능하도록 만들었다...

그리고 C++에서 접근할 수 있게 만든게 c++/winrt?

그 활용예로 윈API를 사용하지 않고 노트북 배터리 정보를 구할 수 있다..

#include "pch.h"

using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Devices::Enumeration;
using namespace Windows::Devices::Power;

int main()
{
    winrt::init_apartment();
    std::wcout.imbue(std::locale("korean"));
  

    Battery battery{ Battery::AggregateBattery() };
    hstring device_selector{ battery.GetDeviceSelector() };
    BatteryReport report{ battery.GetReport() };
    const std::array<const wchar_t*, 4> str_BatteryStatus{ L"NoPresent", L"Discharging", L"Idle", L"Charging" };
    
    int RemainingCapacityInMilliwattHours = report.RemainingCapacityInMilliwattHours().GetInt32();
    int FullChargeCapacityInMilliwattHours = report.FullChargeCapacityInMilliwattHours().GetInt32();
    int DesignCapacityInMilliwattHours = report.DesignCapacityInMilliwattHours().GetInt32();
    float remained_power = ((float)RemainingCapacityInMilliwattHours / FullChargeCapacityInMilliwattHours * 100.0f);

    std::wcout <<L"Full Charge Capacity : " << FullChargeCapacityInMilliwattHours <<L"W/h" << std::endl;
    std::wcout << remained_power <<L"% charged. status:" << str_BatteryStatus[static_cast<int>(report.Status())] << std::endl;

    return 0;
}

 

이렇게 windows runtime에는 다양한 API가 존재 하는데... (카메라에 접근한다던지, OCR라이브러리를 사용한다던지.. 이미지 처리를 한다던지..) 이런 것들을 Desktop APP에서도 이제 사용 가능하다는데 의의가 있지 않을까?.

 

참고

https://potisan-programming-memo.hatenablog.jp/entry/2021/01/24/161219

https://megayuchi.com/2017/05/31/uwp-with-c%EB%A1%9C-battery-%EC%83%81%ED%83%9C-%EC%96%BB%EC%96%B4%EC%98%A4%EA%B8%B0/

728x90
반응형

댓글