OrangeMaker_logo
memo アイコン SDK-MFC 備忘録

Windows SDKやMFCに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)

マルチモニタ情報取得

2009/10/1 作成
2010/1/23 MONITORINFOF_PRIMARY,MONITORINFOEXについて追記

マルチモニタの情報取得に関するメモです。

1)情報取得方法

 マルチモニタの情報を取得するには、列挙タイプのAPIで取得します。

例)

BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC 
hdc,LPRECT,lprcMonitor,LPARAM dwData)
{
    MONITORINFO mi;
    mi.cbSize = sizeof(mi);
    GetMonitorInfo(hMonitor, &mi);
        //(略)
    return TRUE;//継続
}
	

//ディスプレイの情報を取得する
VOID getMultiDisplayInfo()
{
    EnumDisplayMonitors(
        NULL,	/* デバイスコンテキストのハンドル */
        NULL,	/* クリッピング領域のポインタ */
        (MONITORENUMPROC)MonitorEnumProc,	/* コールバック関数のポインタ */
(LPARAM)0); /* 関数に渡されるパラメータ */
} MONITORINFOの構成は、 typedef struct tagMONITORINFO { DWORD cbSize; RECT rcMonitor; RECT rcWork; DWORD dwFlags; } MONITORINFO, *LPMONITORINFO;

rcMonitorはディスプレイのサイズ,rcWorkはタスクバーを除いたディスプレイサイズ、swFlagsはMONITORINFOF_PRIMARY(1)の場合プライマリディスプレイを示します。

MONITORINFOの代わりにMONITORINFOEXを使用するとデバイス名が取得できます。この場合cbSizeにはMONITORINFOEXのサイズを設定します。