ユニバーサル Windows プラットフォームを使用してコンソール アプリを作成する

このトピックでは、C++/WinRT または C++/CX ユニバーサル Windows プラットフォーム (UWP) コンソール アプリを作成する方法について説明します。

注意

コンソール アプリ (ユニバーサル) プロジェクト テンプレート拡張機能では、Visual Studio 2022 はサポートされていません。 これらのテンプレートをインストールして使用するには、Visual Studio 2017 または Visual Studio 2019 が必要です。

Windows 10 Version 1803 以降では、C++ /WinRT または C++/CX UWP コンソール アプリを作成して、DOS や PowerShell コンソールなどのコンソール ウィンドウで実行できるようになりました。 コンソール アプリはコンソール ウィンドウを使用して入力と出力を行い、printfgetchar などの Universal C Runtime 関数を使用できます。 Microsoft Store には、UWP コンソール アプリを公開することができます。 それらのアプリは、アプリのリストにエントリがあり、スタート メニューに固定することができるプライマリ タイルがあります。 UWP コンソール アプリは、スタート メニューから起動することができますが、通常はコマンドラインから起動します。

実際の動作を確認するには、UWP コンソール アプリの作成に関するビデオをご覧ください。

UWP コンソール アプリ テンプレートを使用する

UWP コンソール アプリを作成するには、まず Visual Studio Marketplace から入手できるコンソール アプリ (ユニバーサル) プロジェクト テンプレートをインストールします。 インストールされているテンプレートは、[新しいプロジェクト]>[インストール]>[他の言語]>[Visual C++]>[Windows ユニバーサル] で、コンソール アプリ C++/WinRT (ユニバーサル Windows) およびコンソール アプリ C++/CX (ユニバーサル Windows) として使用できます。

Main() にコードを追加します。

テンプレートは Program.cpp を追加します。これには main() 関数が含まれています。 これは、UWP コンソール アプリで実行が開始される場所です。 __argc および __argv パラメーターでコマンドライン引数にアクセスします。 制御が main() から返ってくると、UWP コンソール アプリは終了します。

Program.cpp の次の例は、コンソール アプリ C++ /WinRT テンプレートによって追加されています。

#include "pch.h"

using namespace winrt;

// This example code shows how you could implement the required main function
// for a Console UWP Application. You can replace all the code inside main
// with your own custom code.

int __cdecl main()
{
    // You can get parsed command-line arguments from the CRT globals.
    wprintf(L"Parsed command-line arguments:\n");
    for (int i = 0; i < __argc; i++)
    {
        wprintf(L"__argv[%d] = %S\n", i, __argv[i]);
    }

    // Keep the console window alive in case you want to see console output when running from within Visual Studio
    wprintf(L"Press 'Enter' to continue: ");
    getchar();
}

UWP コンソール アプリの動作

UWP コンソール アプリは、実行されているディレクトリ、およびその下のファイル システムにアクセスできます。 テンプレートは AppExecutionAlias 拡張機能をアプリの Package.appxmanifest ファイルに追加するため、これが可能になります。 この拡張機能を使用すると、コンソール ウィンドウからエイリアスを入力してアプリを起動することもできます。 アプリを起動するためにシステムパスに入る必要はありません。

さらに、「ファイル アクセス許可」の説明に従って制限された機能 broadFileSystemAccess を追加することで、UWP コンソール アプリにファイル システムへの広範な アクセス権を付与することもできます。 この機能は、Windows.Storage 名前空間の API で動作します。

テンプレートによって SupportsMultipleInstances 機能がアプリの Package.appxmanifest ファイルに追加されるため、複数の UWP コンソール アプリのインスタンスを同時に実行できます。

テンプレートは Package.appxmanifest ファイルに Subsystem="console" の機能も追加します。これは、この UWP アプリがコンソール アプリであることを示しています。 desktop4 と iot2 namespace プレフィックスに注意してください。 UWP コンソール アプリは、デスクトップやモノのインターネット (IoT) プロジェクトでのみサポートされています。

<Package
  ...
  xmlns:desktop4="http://schemas.microsoft.com/appx/manifest/desktop/windows10/4" 
  xmlns:iot2="http://schemas.microsoft.com/appx/manifest/iot/windows10/2" 
  IgnorableNamespaces="uap mp uap5 desktop4 iot2">
  ...
  <Applications>
    <Application Id="App"
    ...
      desktop4:Subsystem="console" 
      desktop4:SupportsMultipleInstances="true" 
      iot2:Subsystem="console" 
      iot2:SupportsMultipleInstances="true"  >
      ...
      <Extensions>
          <uap5:Extension 
            Category="windows.appExecutionAlias" 
            Executable="YourApp.exe" 
            EntryPoint="YourApp.App">
            <uap5:AppExecutionAlias desktop4:Subsystem="console">
              <uap5:ExecutionAlias Alias="YourApp.exe" />
            </uap5:AppExecutionAlias>
          </uap5:Extension>
      </Extensions>
    </Application>
  </Applications>
    ...
</Package>

UWP コンソール アプリに関するその他の考慮事項

  • C++/WinRT および C++/CX UWP アプリのみがコンソール アプリです。
  • UWP コンソール アプリはデスクトップまたは IoT プロジェクト タイプをターゲットにする必要があります。
  • UWP コンソール アプリでは、ウィンドウが作成されない場合があります。 MessageBox()、Location()、またはユーザーの同意プロンプトなど、何らかの理由でウィンドウを作成する可能性のあるその他の API を使用することはできません。
  • UWP コンソール アプリは、バックグラウンド タスクを消費したり、バックグラウンド タスクとして機能したりしない場合があります。
  • コマンド ラインのアクティブ化 を除き、UWP コンソール アプリは、ファイルの関連付け、プロトコルの関連付けなどのアクティブ化をサポートしていません。
  • UWP コンソール アプリは複数インスタンスをサポートしていますが、複数インスタンスのリダイレクト はサポートしていません
  • UWP アプリで使用できる Win32 API の一覧については、「UWP アプリ用の Win32 API と COM API」をご覧ください。