hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

いまさらのWindowsCEプログラミング(10) - システム情報の取得

今回は様々なシステム情報の取得方法を説明します。

GetVersionEx

GetVersionEx()でOSのバージョンが取得できます。

OSVERSIONINFO osvi;
memset(&osvi,0, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx( &osvi );

OSVERSIONINFOは次のように定義された構造体です。

typedef struct _OSVERSIONINFO{ 
	DWORD dwOSVersionInfoSize; 
	DWORD dwMajorVersion; 
	DWORD dwMinorVersion; 
	DWORD dwBuildNumber; 
	DWORD dwPlatformId; 
	TCHAR szCSDVersion[128]; 
} OSVERSIONINFO; 

Dell Axim X50Vの場合、次の値が戻ります。スタート→設定→システム→バージョン情報で表示されるバージョン番号と同じですね。

OS  表示  dwPlatformId dwMajorVersion dwMinorVersion dwBuildNumber
Dell Axim X50V 4.21.1088  VER_PLATFORM_WIN32_CE 4  21  1088 

ちなみにWindowsの場合、次の値が戻ります。

OS  表示  dwPlatformId dwMajorVersion dwMinorVersion dwBuildNumber
Windows 95 4.00.950 VER_PLATFORM_WIN32_WINDOWS 4 0 950
Windows 95 OSR 2 4.00.950B VER_PLATFORM_WIN32_WINDOWS 4 0 1111
Windows 95 OSR 2.5 4.00.950C VER_PLATFORM_WIN32_WINDOWS 4 0 1212
Windows 98 4.10.1998 VER_PLATFORM_WIN32_WINDOWS 4 10 1998
Windows 98 SE 4.10.2222 VER_PLATFORM_WIN32_WINDOWS 4 10 2222
Windows Me 4.90.3000 VER_PLATFORM_WIN32_WINDOWS 4 90 3000
Windows NT 3.51   VER_PLATFORM_WIN32_NT 3 51  
Windows NT 4.0 4.00.1381 VER_PLATFORM_WIN32_NT 4 0 1381
Windows 2000 5.00.2195 VER_PLATFORM_WIN32_NT 5 0 2195
Windows XP   VER_PLATFORM_WIN32_NT 5 1  

SystemParametersInfo

SystemParametersInfoは、システム全体に関するパラメータを取得または設定するAPIです。

画面の作業領域のサイズを取得する例:

RECT wrc;
SystemParametersInfo(SPI_GETWORKAREA, 0, &wrc, 0);
応用例:PocketPostPetかどうかを判定
	OSVERSIONINFO osvi;
	memset(&osvi,0, sizeof(OSVERSIONINFO));
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	GetVersionEx( &osvi );

	RECT wrc;
	SystemParametersInfo(SPI_GETWORKAREA, 0, &wrc, 0);

	if ( wrc.right == 320 
		&& osvi.dwPlatformId == VER_PLATFORM_WIN32_HH
		&& osvi.dwMajorVersion == 2
		&& osvi.dwMinorVersion == 12
		) {
		// WindowsCE 2.12 でかつ横幅が320なら、きっとPocketPostPet!
	}

GetSystemMetrics

GetSystemMetrics()では、画面上の各項目のサイズを取得できます。

VGAかどうかを判定する方法の例:

if ( GetSystemMetrics( SM_CXSMICON ) >= 30 ) {	// 小アイコンの推奨サイズ;
	// VGAです。
}
else {
	// QVGAです。
}