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

IImmersiveMonitorNotificationService

Immersive Shellにおいてディスプレイ(画面、モニター)変更を検出するために、その通知を受け取るインスタンスを登録・解除するためのインターフェイスです。

確認済み OS

Windows 8.1, Windows 10 (Build 10240, 10586)

構文

[C/C++]

// struct IImmersiveMonitorNotificationService : public IUnknown
DECLARE_INTERFACE_IID_(IImmersiveMonitorNotificationService, IUnknown, "7C7A3E75-4362-4D12-860D-68EE72909F83")
{
    /*** IUnknown methods ***/
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObject) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /*** IImmersiveMonitorNotification methods ***/
    STDMETHOD(Register)(THIS_ IImmersiveMonitorNotification*, ULONG*) PURE;
    STDMETHOD(Unregister)(THIS_ ULONG) PURE;
};

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

関連する型

インターフェイス

使用上の注意点

解説

Windows 8で導入された「Immersive Shell」において、IImmersiveMonitorNotificationService はディスプレイの追加やディスプレイ設定の変更(解像度や拡大率の変更など)が行われた際にその通知を受け取る目的で利用するインターフェイスの1つです。変更の通知を受け取るには、IImmersiveMonitorNotification の各メソッドを実装したクラスインスタンスを本インターフェイスのインスタンスに渡します。

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

「CLSID_ImmersiveShell」({C2F03A33-21F5-47FA-B4BB-156362A2F239}) のクラスインスタンスを CoCreateInstance で作成し、IServiceProvider::QueryService にてサービスIDに「5B8461BC-2B08-4F37-A627-7436D66D8134」を指定して取得します。

// ※ 定数名は仮のものです。
// {5B8461BC-2B08-4F37-A627-7436D66D8134}
EXTERN_C const GUID SID_ImmersiveMonitorManagerNotificationService =
{ 0x5B8461BC, 0x2B08, 0x4F37, { 0xA6, 0x27, 0x74, 0x36, 0xD6, 0x6D, 0x81, 0x34 } };

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

            // 登録の解除を終えたら Release
            // (解除しない場合は別途 AddRef してインスタンスを保持しておきます)
            pNotificationService->Release();
        }
        pService->Release();
    }

最終更新日: 2015/12/30