Win32 API 日本語リファレンス
ホームUI.Shell › IApplicationDesignModeSettings

IApplicationDesignModeSettings

COM
IID2a3dee9a-e31d-46d6-8508-bcc597db3557継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

開発ツールアプリケーションが、ネイティブディスプレイ解像度、デバイススケールファクター、アプリケーションビュー状態といったシステムおよびユーザーの状態を動的に偽装(スプーフ)できるようにします。これにより、実際のハードウェアを用意することなく、さまざまなフォームファクターに対してデザインモードで動作する Windows ストアアプリをテストできます。また、通常はユーザーが制御する状態の変化を偽装することで、さまざまなシナリオ下で Windows ストアアプリをテストすることも可能にします。

解説(Remarks)

このインターフェイスは、CLSID_ApplicationDesignModeSettings をコクリエイト(cocreate)することで取得します。

ユーザーは通常、次のような使用パターンに従います:

  1. Windows ストアアプリのプロセス内のスレッドで、CLSID_ApplicationDesignModeSettings を指定して CoCreateInstance を呼び出し、アプリケーションデザインモード設定オブジェクトを作成します。
  2. アプリケーションデザインモード設定オブジェクトで QueryInterface を呼び出し、IInitializeWithWindow オブジェクトを取得します。
  3. IInitializeWithWindow オブジェクトの Initialize メソッドを、プロキシコアウィンドウの HWND を渡して呼び出します。これは「set」系メソッドを呼び出す前に行う必要があり、プロセスごとに一度だけ成功します。コード例については、[CoreWindow に依存する WinRT UI オブジェクトを表示する](/windows/apps/develop/ui-input/display-ui-objects#winui-3-with-c) を参照してください。
  4. IApplicationDesignModeSettings に対して QueryInterface を呼び出し、適切なメソッド(SetNativeDisplaySizeSetScaleFactor など)を呼び出して、必要なテスト状態を偽装します。これらのメソッドは、Windows ストアアプリに対して適切な Windows ランタイムイベントを発生させます。
  5. ComputeApplicationSize メソッドを呼び出して、現在偽装されている状態に基づき、アプリに適切なサイズを求めます。すべてのレイアウト「set」系メソッドは事前に呼び出されている必要があり、そうでない場合この呼び出しは失敗します。アプリウィンドウの配置とサイズ設定は、必要に応じて開発ツールアプリケーションが行う責任があります。

実装するタイミング

このインターフェイスを実装しないでください。実装は Windows によって提供されます。

使用するタイミング

このインターフェイスのメソッドを使用して、さまざまな偽装された構成やシナリオの下で Windows ストアアプリをテストします。

この例では、このインターフェイスのメソッドの使用方法を示します。


IApplicationDesignModeSettings *pDesignModeSettings;

// CoCreate the design mode settings object
HRESULT hr = CoCreateInstance(CLSID_ApplicationDesignModeSettings, nullptr, CLSCTX_INPROC, IID_PPV_ARGS(&pDesignModeSettings));
if (SUCCEEDED(hr))
{
    IInitializeWithWindow *pInitializeWithWindow;
    hr = pDesignModeSettings->QueryInterface(IID_PPV_ARGS(&pInitializeWithWindow);
    if (SUCCEEDED(hr))
    {
        // Before we spoof any state, we must first initialize the design
        // mode settings object with a proxy core window. Since apps
        // running in design mode don't have an actual core window, we must
        // supply an HWND that can be used as a proxy.
        hr = pInitializeWithWindow->Initialize(hwndProxyCoreWindow);
        pInitializeWithWindow->Release();
    }

    if (SUCCEEDED(hr))
    {
        // Verify that our desired spoofed settings are supported.
        SIZE sizeNativeDisplay = {1366, 768};
        SCALE_FACTOR scaleFactor = SCALE_100_PERCENT;
        APPLICATION_VIEW_STATE viewState = AVS_FULLSCREEN_LANDSCAPE;
        BOOL fSupported;
        hr = pDesignModeSettings->IsApplicationViewStateSupported(viewState,
                                                                  sizeNativeDisplay,
                                                                  scaleFactor,
                                                                  &fSupported);
    }

    if (SUCCEEDED(hr) && fSupported))
    {
        // Set the spoofed native display size.
        hr = pDesignModeSettings->SetNativeDisplaySize(sizeNativeDisplay);

        if (SUCCEEDED(hr))
        {
            // Set the spoofed scale factor to 100%.
            hr = pDesignModeSettings->SetScaleFactor(SCALE_100_PERCENT);
        }

        if (SUCCEEDED(hr))
        {
            // Set the spoofed application view state to full-screen landscape.
            hr = pDesignModeSettings->SetApplicationViewState(AVS_FULLSCREEN_LANDSCAPE);
        }

        if (SUCCEEDED(hr))
        {
            // Now that all the necessary state has been spoofed, calculate
            // the size that the app should occupy.
            SIZE sizeApplication;
            hr = pDesignModeSettings->ComputeApplicationSize(&sizeApplication);
        }
    }

    pDesignModeSettings->Release();
}

メソッド 6

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetNativeDisplaySize(SIZE nativeDisplaySizePixels)

デザインモードで動作する Windows ストアアプリに使用する、偽装されたネイティブディスプレイサイズを設定します。

nativeDisplaySizePixelsSIZEin偽装するディスプレイのネイティブサイズを SIZE 構造体で指定します。指定したサイズは横向き(ランドスケープ)方向に正規化されます。向きを偽装するには、SetApplicationViewState を参照してください。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、次を含む HRESULT エラーコードを返します:

戻り値のコード 説明
E_NOT_SET

プロキシコアウィンドウを設定するための IInitializeWithWindow::Initialize が呼び出されていません。

E_MONITOR_RESOLUTION_TOO_LOW
解像度がこの値まで低い場合、イマーシブアプリを起動したり切り替えたりすることはできません。これは現在、横向き方向で水平 800 ピクセルまたは垂直 600 ピクセルを下回る解像度として定義されています。
vtbl 4 HRESULT SetScaleFactor(DEVICE_SCALE_FACTOR scaleFactor)

デザインモードで動作する Windows ストアアプリに使用する、偽装されたデバイススケールファクターを設定します。

scaleFactorDEVICE_SCALE_FACTORin偽装するデバイススケールファクターを示す DEVICE_SCALE_FACTOR 列挙値のいずれか。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、次を含む HRESULT エラーコードを返します:

戻り値のコード 説明
E_NOT_SET

プロキシコアウィンドウを設定するための IInitializeWithWindow::Initialize が呼び出されていません。

vtbl 5 HRESULT SetApplicationViewState(APPLICATION_VIEW_STATE viewState)

デザインモードで動作する Windows ストアアプリに使用する、偽装されたアプリケーションビュー状態(全画面ランドスケープ、全画面ポートレート、フィル、またはスナップ)を設定します。

viewStateAPPLICATION_VIEW_STATEin偽装するアプリケーションビュー状態を示す APPLICATION_VIEW_STATE 列挙値のいずれか。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、次を含む HRESULT エラーコードを返します:

戻り値のコード 説明
E_NOT_SET

プロキシコアウィンドウを設定するための IInitializeWithWindow::Initialize が呼び出されていません。

vtbl 6 HRESULT ComputeApplicationSize(SIZE* applicationSizePixels)

現在の偽装設定のセットに基づいて、Windows ストアアプリのサイズを取得します。

applicationSizePixelsSIZE*outこのメソッドが正常に返ると、現在の偽装設定のセットに基づいて Windows ストアアプリが占めるべきサイズへのポインターを受け取ります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、次を含む HRESULT エラーコードを返します:

戻り値のコード 説明
E_NOT_SET

プロキシコアウィンドウを設定するための IInitializeWithWindow::Initialize が呼び出されていません。

vtbl 7 HRESULT IsApplicationViewStateSupported(APPLICATION_VIEW_STATE viewState, SIZE nativeDisplaySizePixels, DEVICE_SCALE_FACTOR scaleFactor, BOOL* supported)

特定の偽装されたディスプレイサイズおよびスケールファクター設定に対して、特定のアプリケーションビュー状態がサポートされているかどうかを判定します。

viewStateAPPLICATION_VIEW_STATEinサポートの有無を判定するアプリケーションビュー状態を示す列挙値のいずれか。
nativeDisplaySizePixelsSIZEin偽装するディスプレイのネイティブサイズ。
scaleFactorDEVICE_SCALE_FACTORin偽装するデバイススケールファクターを示す列挙値のいずれか。
supportedBOOL*outこのメソッドが正常に返ると、Boolean 値へのポインターを受け取ります。指定されたディスプレイサイズとスケールファクターに対してアプリケーションビュー状態がサポートされている場合は TRUE、サポートされていない場合は FALSE に設定されます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、次を含む HRESULT エラーコードを返します:

戻り値のコード 説明
E_NOT_SET

プロキシコアウィンドウを設定するための IInitializeWithWindow::Initialize が呼び出されていません。

vtbl 8 HRESULT TriggerEdgeGesture(EDGE_GESTURE_KIND edgeGestureKind)

偽装されたエッジジェスチャイベントを、呼び出し元スレッドのプロキシコアウィンドウに送信します。このジェスチャは、アプリがアプリバーをサポートしている場合、そのアプリバーの表示を切り替えます。呼び出し元は、エッジジェスチャをトリガーした入力の種類を指定できます。

edgeGestureKindEDGE_GESTURE_KINDin

偽装されたエッジジェスチャを生成した EDGE_GESTURE_KIND 入力タイプを示します。タッチ(EGK_TOUCH)を指定した場合、StartingCompleted の両方のエッジジェスチャイベントが送信されます。それ以外の場合は、Completed イベントのみが送信されます。次のいずれかの値:

EGK_TOUCH (0)

エッジジェスチャイベントは、タッチ対応画面上のスワイプによって生成されました。

EGK_KEYBOARD (1)

エッジジェスチャイベントは、キーボードの Win+Z キーシーケンスによって生成されました。

EGK_MOUSE (2)

エッジジェスチャイベントは、マウスの右クリックによって生成されました。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は、次を含む HRESULT エラーコードを返します:

戻り値のコード 説明
E_NOT_SET

プロキシコアウィンドウを設定するための IInitializeWithWindow::Initialize が呼び出されていません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IApplicationDesignModeSettings "{2A3DEE9A-E31D-46D6-8508-BCC597DB3557}"
#usecom global IApplicationDesignModeSettings IID_IApplicationDesignModeSettings "{958A6FB5-DCB2-4FAF-AAFD-7FB054AD1A3B}"
#comfunc global IApplicationDesignModeSettings_SetNativeDisplaySize             3 int
#comfunc global IApplicationDesignModeSettings_SetScaleFactor                   4 int
#comfunc global IApplicationDesignModeSettings_SetApplicationViewState          5 int
#comfunc global IApplicationDesignModeSettings_ComputeApplicationSize           6 var
#comfunc global IApplicationDesignModeSettings_IsApplicationViewStateSupported  7 int,int,int,var
#comfunc global IApplicationDesignModeSettings_TriggerEdgeGesture               8 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。