Programming Field - ドキュメント無し関数 / 名前無し関数

IImmersiveMonitorManager

Immersive Shellにおいてディスプレイ(画面、モニター)を管理・列挙します。

確認済み OS

Windows 8.1, Windows 10 (Build 10240, 10586)

構文

[C/C++]

// struct IImmersiveMonitorManager : public IUnknown
DECLARE_INTERFACE_IID_(IImmersiveMonitorManager, IUnknown, "4D4C1E64-E410-4FAA-BAFA-59CA069BFEC2")
{
    /*** IUnknown methods ***/
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObject) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /*** IImmersiveMonitorManager methods ***/
    STDMETHOD(GetCount)(THIS_ UINT*) PURE;
    STDMETHOD(GetConnectedCount)(THIS_ UINT*) PURE;
    STDMETHOD(GetAt)(THIS_ UINT, IImmersiveMonitor**) PURE;
    STDMETHOD(GetFromHandle)(THIS_ HMONITOR, IImmersiveMonitor**) PURE;
    STDMETHOD(GetFromIdentity)(THIS_ ULONG, IImmersiveMonitor**) PURE;
    STDMETHOD(GetImmersiveProxyMonitor)(THIS_ IImmersiveMonitor**) PURE;
    STDMETHOD(QueryService)(THIS_ HMONITOR, REFGUID, REFIID, void**) PURE;
    STDMETHOD(QueryServiceByIdentity)(THIS_ ULONG, REFGUID, REFIID, void**) PURE;
    STDMETHOD(QueryServiceFromWindow)(THIS_ HWND, REFGUID, REFIID, void**) PURE;
    STDMETHOD(QueryServiceFromPoint)(THIS_ const POINT*, REFGUID, REFIID, void**) PURE;
    STDMETHOD(GetNextImmersiveMonitor)(THIS_ IMMERSIVE_MONITOR_MOVE_DIRECTION, IImmersiveMonitor*, IImmersiveMonitor**) PURE;
    STDMETHOD(GetMonitorArray)(THIS_ IObjectArray**) PURE;
};

※ すべてのメソッドの挙動は確認していません。

関連する型

インターフェイス

列挙子

IMMERSIVE_MONITOR_MOVE_DIRECTION:

enum IMMERSIVE_MONITOR_MOVE_DIRECTION
{
    IMMD_PREVIOUS = 0,
    IMMD_NEXT = 1
};

使用上の注意点

解説

Windows 8で導入された「Immersive Shell」において、IImmersiveMonitorManager はコンピューターで利用できる複数のディスプレイを管理しています。IImmersiveMonitorManager が管理するディスプレイは現在コンピューターに接続されているものだけでなく、現在のセッションにおいて一度でも接続されたことがあるディスプレイも含まれます。

個々のディスプレイの詳細を取得したり各種インターフェイスにてディスプレイ情報を受け渡す場合は IImmersiveMonitor インターフェイスのインスタンスを利用しますが、そのインスタンスは IImmersiveMonitorManager から取得することができます。

このインターフェイスの主な取得元

「CLSID_ImmersiveShell」({C2F03A33-21F5-47FA-B4BB-156362A2F239}) のクラスインスタンスを CoCreateInstance で作成し、IServiceProvider::QueryService にてサービスIDに「47094E3A-0CF2-430F-806F-CF9E4F0F12DD」を指定して取得します。

// ※ 定数名は仮のものです。
// {47094E3A-0CF2-430F-806F-CF9E4F0F12DD}
EXTERN_C const GUID SID_ImmersiveMonitorManager =
{ 0x47094E3A, 0x0CF2, 0x430F, { 0x80, 0x6F, 0xCF, 0x9E, 0x4F, 0x0F, 0x12, 0xDD } };

    HRESULT hr;
    IServiceProvider* pService;
    ImmersiveMonitorManager* pManager;
    // エクスプローラーが内部で登録するクラスのため
    // CLSCTX_LOCAL_SERVER を指定して取得する
    hr = CoCreateInstance(CLSID_ImmersiveShell, NULL, CLSCTX_LOCAL_SERVER,
        IID_IServiceProvider, reinterpret_cast<void**>(&pService));
    if (SUCCEEDED(hr))
    {
        hr = pService->QueryService(SID_ImmersiveMonitorManager,
            IID_IImmersiveMonitorManager, reinterpret_cast<void**>(&pManager));
        if (SUCCEEDED(hr))
        {
            // ここで ImmersiveMonitorManager を利用

            pManager->Release();
        }
        pService->Release();
    }

最終更新日: 2015/12/30