Win32API 利用可能なモニター情報を列挙する EnumMonitors
利用可能なモニター情報を列挙するには、EnumMonitors関数を用いる。
EnumMonitors関数は、以下のように定義されている
BOOL EnumMonitors( LPTSTR pName, // サーバー名へのポインタ(NULLを指定した場合、ローカルモニターが列挙される) DWORD Level, // 構造体のレベル LPBYTE pMonitors, // 構造体配列へのポインタ DWORD cbBuf, // バッファのサイズ (バイト数) LPDWORD pcbNeeded, // コピーされた (または必要な) バイト数を受け取る // 変数のアドレス LPDWORD pcReturned // コピーされたジョブ情報構造体の数を受け取る // 変数のアドレス );
第2引数Levelは、構造体のレベルを表している。Levelに「1」を指定した場合は、MONITOR_INFO_1構造体へのポインタを第3引数pMonitorsに指定し、「2」を指定した場合は、MONITOR_INFO_2構造体へのポインタを第3引数pMonitorsに指定する。
MONITOR_INFO_1構造体は、以下のように定義されている。
typedef struct _MONITOR_INFO_1 { LPTSTR pName;//モニターの名前 } MONITOR_INFO_1, *PMONITOR_INFO_1;
また、MONITOR_INFO_2構造体(MONITOR_INFO_2A構造体)は、以下のように定義されている。
typedef struct _MONITOR_INFO_2 { LPTSTR pName;//モニターの名前 LPTSTR pEnvironment;//モニターの環境(例:Windows NT x86, Windows IA64, Windows x64) LPTSTR pDLLName;//モニターDLLの名前 } MONITOR_INFO_2, *PMONITOR_INFO_2;
#include <windows.h> #include <winspool.h> #pragma comment(lib, "winspool.lib") int main() { MONITOR_INFO_1A *pInfo; DWORD dwNeeded; DWORD dwReturned; BYTE *lpBuffer; ::EnumMonitorsA(NULL, 1, NULL, 0, &dwNeeded, &dwReturned); lpBuffer = (LPBYTE)LocalAlloc(LPTR, dwNeeded); if (lpBuffer == NULL) { return 1; } ::EnumMonitorsA(NULL, 1, lpBuffer, dwNeeded, &dwNeeded, &dwReturned); pInfo = (MONITOR_INFO_1A *)lpBuffer; puts(pInfo->pName); LocalFree(lpBuffer); return 0; }
実行結果(拙者の実行環境にて)
WSD Port
#include <windows.h> #include <winspool.h> #pragma comment(lib, "winspool.lib") int main() { MONITOR_INFO_2A *pInfo; DWORD dwNeeded; DWORD dwReturned; BYTE *lpBuffer; ::EnumMonitorsA(NULL, 2, NULL, 0, &dwNeeded, &dwReturned); lpBuffer = (LPBYTE)LocalAlloc(LPTR, dwNeeded); if (lpBuffer == NULL) { return 1; } ::EnumMonitorsA(NULL, 2, lpBuffer, dwNeeded, &dwNeeded, &dwReturned); pInfo = (MONITOR_INFO_2A *)lpBuffer; printf("Name: %s\n", pInfo->pName); printf("Environment: %s\n", pInfo->pEnvironment); printf("DLLName: %s\n", pInfo->pDLLName); LocalFree(lpBuffer); return 0; }
実行結果(拙者の実行環境にて)
Name: WSD Port Environment: Windows NT x86 DLLName: WSDMon.dll
参考
EnumMonitors関数
http://msdn.microsoft.com/ja-jp/library/cc428545.aspx
MONITOR_INFO_1構造体
http://msdn.microsoft.com/en-us/library/dd145067.aspx
MONITOR_INFO_2構造体
http://msdn.microsoft.com/en-us/library/dd145068.aspx