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

このトピックでは、 c++/WinRT または c++/cx ユニバーサル WINDOWS プラットフォーム (UWP) コンソールアプリを作成する方法について説明します。This topic describes how to create a C++/WinRT or C++/CX Universal Windows Platform (UWP) console app.

Windows 10 バージョン1803以降では、コンソールウィンドウ (DOS、PowerShell コンソールウィンドウなど) で実行される C++/WinRT または C++/CX の UWP コンソールアプリを作成できます。Starting with Windows 10, version 1803, you can write C++/WinRT or C++/CX UWP console apps that run in a console window, such as a DOS or PowerShell console window. コンソールアプリは、入力と出力にコンソールウィンドウを使用し、 printfGetcharなどのユニバーサル C ランタイム関数を使用できます。Console apps use the console window for input and output, and can use Universal C Runtime functions such as printf and getchar. Microsoft Store には、UWP コンソール アプリを公開することができます。UWP console apps can be published to the Microsoft Store. それらのアプリは、アプリのリストにエントリがあり、スタート メニューに固定することができるプライマリ タイルがあります。They have an entry in the app list, and a primary tile that can be pinned to the Start menu. UWP コンソールアプリは、[スタート] メニューから起動できますが、通常はコマンドラインから起動します。UWP console apps can be launched from the Start menu, though you will typically launch them from the command-line.

1つの動作を確認するために、UWP コンソールアプリの作成に関するビデオをご覧ください。To see one in action, here's a video about Creating a UWP Console App.

UWP コンソール アプリ テンプレートを使用するUse a UWP Console app template

UWP コンソール アプリを作成するには、まず Visual Studio Marketplace から入手できるコンソール アプリ (ユニバーサル) プロジェクト テンプレートをインストールします。To create a UWP console app, first install the Console App (Universal) Project Templates, available from the Visual Studio Marketplace. インストールされたテンプレートは、[新しいプロジェクト] [ > インストールされている > 他の言語] の下で利用可能に > Visual C++ > なります。windows ユニバーサルは、コンソールアプリ c++/WinRT (ユニバーサル windows)コンソールアプリ c++/cx (ユニバーサル windows) Visual C++ ます。The installed templates are then available under New Project > Installed > Other Languages > Visual C++ > Windows Universal as Console App C++/WinRT (Universal Windows) and Console App C++/CX (Universal Windows).

Main() にコードを追加します。Add your code to main()

テンプレートは Program.cpp を追加します。これには main() 関数が含まれています。The templates add Program.cpp, which contains the main() function. これは、UWP コンソール アプリで実行が開始される場所です。This is where execution begins in a UWP console app. __argc および __argv パラメーターでコマンドライン引数にアクセスします。Access the command-line arguments with the __argc and __argv parameters. 制御が main() から返ってくると、UWP コンソール アプリは終了します。The UWP console app exits when control returns from main().

次の プログラム .cpp の例は、 コンソールアプリ C++/WinRT テンプレートによって追加されています。The following example of Program.cpp is added by the Console App C++/WinRT template:

#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 Console app behavior

UWP コンソール アプリは、実行されているディレクトリ、およびその下のファイル システムにアクセスできます。A UWP Console app can access the file-system from the directory it is run from, and below. テンプレートは AppExecutionAlias 拡張機能をアプリの Package.appxmanifest ファイルに追加するため、これが可能になります。This is possible because the template adds the AppExecutionAlias extension to your app's Package.appxmanifest file. この拡張機能を使用すると、コンソール ウィンドウからエイリアスを入力してアプリを起動することもできます。This extension also enables the user to type the alias from a console window to launch the app. アプリを起動するためにシステムパスに入る必要はありません。The app does not need to be in the system path to launch.

さらに、ファイル アクセス許可 で説明されているように、制限された機能 broadFileSystemAccess を追加することで、ファイルシステムへの広範なアクセスを UWP コンソール アプリに付与することができます。You can additionally give broad access to the file system to your UWP console app by adding the restricted capability broadFileSystemAccess as described in File access permissions. この機能は、Windows.Storage 名前空間の API で動作します。This capability works with APIs in the Windows.Storage namespace.

テンプレートによって SupportsMultipleInstances 機能がアプリの Package.appxmanifest ファイルに追加されるため、複数の UWP コンソール アプリのインスタンスを同時に実行できます。More than one instance of a UWP Console app can run at a time because the template adds the SupportsMultipleInstances capability to your app's Package.appxmanifest file.

テンプレートは Package.appxmanifest ファイルに Subsystem="console" の機能も追加します。これは、この UWP アプリがコンソール アプリであることを示しています。The template also adds the Subsystem="console" capability to the Package.appxmanifest file, which denotes that this UWP app is a console app. desktop4 と iot2 namespace プレフィックスに注意してください。Note the desktop4 and iot2 namespace prefixes. UWP コンソール アプリは、デスクトップやモノのインターネット (IoT) プロジェクトでのみサポートされています。UWP Console apps are only supported on desktop and Internet of Things (IoT) projects.

<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 コンソール アプリに関するその他の考慮事項Additional considerations for UWP console apps

  • コンソールアプリとして使用できるのは、C++/WinRT および C++/CX UWP アプリだけです。Only C++/WinRT and C++/CX UWP apps may be console apps.
  • UWP コンソール アプリはデスクトップまたは IoT プロジェクト タイプをターゲットにする必要があります。UWP Console apps must target the Desktop, or IoT project type.
  • UWP コンソールアプリでは、ウィンドウを作成できない場合があります。UWP console apps may not create a window. メッセージボックス ()、場所 ()、またはユーザーの同意プロンプトなど、何らかの理由でウィンドウを作成する可能性のあるその他の API を使用することはできません。They cannot use MessageBox(), or Location(), or any other API that may create a window for any reason, such as user consent prompts.
  • UWP コンソール アプリは、バックグラウンド タスクを消費したり、バックグラウンド タスクとして機能したりしない場合があります。UWP console apps may not consume background tasks nor serve as a background task.
  • コマンド ラインのアクティブ化 を除き、UWP コンソール アプリは、ファイルの関連付け、プロトコルの関連付けなどのアクティブ化をサポートしていません。With the exception of Command-Line activation, UWP console apps do not support activation contracts, including file association, protocol association, etc.
  • UWP コンソール アプリは複数インスタンスをサポートしていますが、複数インスタンスのリダイレクト はサポートしていませんAlthough UWP console apps support multi-instancing, they do not support Multi-instancing redirection
  • UWP アプリで使用できる Win32 API の一覧については、「UWP アプリ用の Win32 API と COM API」をご覧ください。For a list of Win32 APIs that are available to UWP apps, see Win32 and COM APIs for UWP apps