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; };
※ すべてのメソッドの挙動は確認していません。
関連する型
インターフェイス
- IImmersiveMonitor
- IObjectArray - Windows SDKの ObjectArray.h をインクルード
列挙子
IMMERSIVE_MONITOR_MOVE_DIRECTION:
enum IMMERSIVE_MONITOR_MOVE_DIRECTION
{
IMMD_PREVIOUS = 0,
IMMD_NEXT = 1
};
使用上の注意点
- IImmersiveMonitor インターフェイスのIIDはWindows 8.1とWindows 10(Build 10240)で異なるため、IImmersiveMonitorManager::GetMonitorArray を使用する際はご注意ください。IImmersiveMonitorManager::GetAt を用いる場合はIIDが不要なためどちらのOSでも動作すると考えられます。
- 下記の「このインターフェイスの主な取得元」で紹介していますが、IImmersiveMonitorManager を取得するためのサービスGUIDは IImmersiveMonitorManager のIIDと異なります。
解説
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