IT 이모저모

WPF등의 .NET 응용 프로그램에서 UWP API를 사용하기

exien 2018. 3. 6. 17:34

이번에는 UWP 앱용 API를, WPF / Windows Forms / 콘솔 프로그램 등의 기존의 .NET 애플리케이션에서 활용하는 방법을 소개합니다.

목차
  • ※ 적용 버전 : Windows 10 전체 버전 (version 1507 / build 12040 이상)

시작하기

 Windows 10에 추가 된 새로운 기능의 많은 UWP (Universal Windows Platform)에만 탑재됩니다. 이러한 새로운 기능은 기존의 .NET 응용 프로그램에서 사용할 수없는 것일까 요?

 그런 것은 없습니다. UWP의 많은 API는 .NET 응용 프로그램에서 쉽게 사용할 수 있습니다.

 이번은, 일본어의 한자 섞인 문자열에서 읽어 가명을 취득하는 API 등을 소재로하여 .NET 응용 프로그램에서 UWP API를 호출 할 수 있도록하는 방법을 소개합니다.

대상

  • .NET Framework에서 Windows 용 응용 프로그램을 만들고있는 개발자
  • UWP 앱 개발자

필요한 환경

 샘플 코드 (GitHub)를 그대로 사용해에는 다음의 환경이 필요합니다.

  • Windows 10 version 1703 (build 15063) 이상
  • Visual Studio 2015 Update 3 이상 (무료 Community Edition 가능)
  • UWP 용 Windows 10 SDK : C # / VB 용 10.0.15063 이후

어떤 기능인가?

 우선 샘플 코드 (WPF 응용 프로그램) 화면을 봐 (⇒ UF02UwpDesktop ).

UWP API를 사용하는 WPF 응용 프로그램
UWP API를 사용하는 WPF 응용 프로그램

 이 응용 프로그램은 WPF입니다 . 릴리스 빌드 한 것은 Windows 7 등에서도 시작합니다 (화면이 표시되는 것만으로 기능하지 않습니다). Windows 10에서 움직이고있는 때에는 그 코드 숨김에서 UWP API를 호출하여 읽으 가명 등을 가져옵니다. 이와 같이 기존의 .NET 응용 프로그램에서 UWP API를 사용할 수 있습니다.

 이 응용 프로그램의 화면은 다음과 같이되어 있습니다.

  • 1 단 : 여기에 문자열을 입력합니다
  • 2 단 : 입력 된 문자열의 읽기 가명가 표시됩니다
  • 3 단 : 입력 된 문자열에 후리가나를 붙여 표시됩니다 (이 부분은 1607/14393 이상)
  • 4 단 : 생성 된 읽기 가명에서 얻은 카나 한자 변환 후보를 나열합니다

 2 단 ~ 4 단의 출력은 UWP API를 사용하여 얻고 있습니다. 여기에서 사용하는 UWP API는 형태소 분석 을 실시하면서 읽기를 추정합니다. 예를 들어 "수미산 등산 계획」은 「수미산 / 등산 / 계획"이라고 3 개의 형태소로 분할하여 「수미산 / 등산 / 계획 "이라고 읽으을 붙여줍니다. 이 읽기 가명을 취득하는 API의 사용법도 나중에 소개합니다.

 이와 같이 기존의 .NET 응용 프로그램에서 UWP API를 사용할 수 있다고해도, 그 때문에 작업이 복잡한 것이었다면 부담없이 이용하거나 수 없습니다. 이번 주제는 거기에 있습니다. 대부분은 아주 쉽게 할 수 있습니다.

쉽게! NuGet에서 도입하는 방법

 즉시 해 봅시다. 먼저 Visual Studio를 열고 WPF 프로젝트를 만듭니다 (Windows Forms 및 콘솔 응용 프로그램이든 상관 없습니다).

 그러면 NuGet에서 UwpDesktop 를 프로젝트에 도입합니다. Visual Studio 2015에서 도입 절차는 다음과 같습니다.

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리 메뉴를 선택
  2. 열린 NuGet 패키지 관리자 상단의 탭에서 [참조]를 선택합니다 (다음 그림의 ①) 검색 창에 "UwpDesktop"를 입력하고 (②) 검색을 수행 할
  3. 검색 결과에 "UwpDesktop"가 나오므로 (③), 그것을 선택하여 설치
NuGet에서 UwpDesktop을 도입
NuGet에서 UwpDesktop을 도입하기 위해 검색 한 결과

 단지 이만큼 이고 다른 UWP API를 사용한 코딩 수 있습니다.

 예를 들어 다음과 같이 MainWindow 클래스 생성자에 코드를 추가하여보십시오.

UWP API를 사용하여 그림 폴더의 파일 목록을 보려면
public partial class MainWindow : Window
{
  public MainWindow ()
  {
    InitializeComponent ();

    // 그림 폴더의 파일 목록을 가져 본다
    Task.Run (async () =>
    {
      var files
        = await Windows.Storage.KnownFolders.PicturesLibrary.GetFilesAsync () ;
      var myPictures = string.Join ( "\ n", files.Select (f => f.Name));
      MessageBox.Show (myPictures);
    });
  }
  ...... 생략 ......

 이제 실행 해 보면 다음 그림과 같이 그림 폴더의 파일 이름 목록이 나타납니다. UWP API는 이렇게 쉽게 이용할 수 있습니다.

그림 폴더의 파일 목록을 표시 할 수 있었다
UWP API를 사용하여 그림 폴더의 파일 목록을 표시 할 수 있었다 (메인 창을 숨기고있다)

 이렇게 시원스럽게 사용 버리는은 맥이 좋은 곳 이군요! 그러나이 UwpDesktop 개발이 멈춰 버린 있고, Windows 10 version 1607 / build 14393까지 밖에 지원하지 않습니다. 1703/15063 이후의 API를 이용하고 싶은 경우에는 수동으로 설정됩니다 (후술).

Capability ( "기능")의 선언은 불필요

 UWP 패키지하지 않은 .NET Framework 응용 프로그램에서는 UWP의 Capability ( "기능") 선언은 필요하지 않습니다. 위의 예는 그림 폴더에 액세스하는 API를 이용하고 있습니다 만, 만약 UWP 응용 프로그램이라면 패키지 매니페스트 Capability 선언해야 할 곳입니다. 동일한 API를 기존의 데스크톱 응용 프로그램에서 호출하는 경우에는 제한이 걸리지 않습니다 (데스크톱 브리지에서 UWP 패키징 및 제한이 적용됩니다).


'IT 이모저모' 카테고리의 다른 글

수동으로 설치하는 방법  (0) 2018.03.06
사용할 수없는 UWP API  (0) 2018.03.06
하웨이, '메이트 20' 공개  (0) 2018.03.06
Android Link  (0) 2018.03.05
네비게이션 메쉬 + A* (Navigation Mesh + AStar)  (0) 2018.03.05