Win32API システム情報を取得する GetSystemInfo
システム情報を取得するには、GetSystemInfo関数を用いる。
GetSystemInfoのプロトタイプ
VOID GetSystemInfo( LPSYSTEM_INFO lpSystemInfo // システム情報 );
SYSTEM_INFO構造体の定義(winbase.h)
typedef struct _SYSTEM_INFO { union { DWORD dwOemId; // Obsolete field...do not use struct { WORD wProcessorArchitecture; WORD wReserved; }; }; DWORD dwPageSize; LPVOID lpMinimumApplicationAddress; LPVOID lpMaximumApplicationAddress; DWORD_PTR dwActiveProcessorMask; DWORD dwNumberOfProcessors; DWORD dwProcessorType; DWORD dwAllocationGranularity; WORD wProcessorLevel; WORD wProcessorRevision; } SYSTEM_INFO, *LPSYSTEM_INFO;
使用例
#include <windows.h> #include <stdio.h> const char *GetProcessorTypeAsString(DWORD dwProcessorType) { switch (dwProcessorType) { case PROCESSOR_INTEL_386: return "PROCESSOR_INTEL_386"; case PROCESSOR_INTEL_486: return "PROCESSOR_INTEL_486"; case PROCESSOR_INTEL_PENTIUM: return "PROCESSOR_INTEL_PENTIUM"; case PROCESSOR_INTEL_IA64: return "PROCESSOR_INTEL_IA64"; case PROCESSOR_AMD_X8664: return "PROCESSOR_AMD_X8664"; case PROCESSOR_MIPS_R4000:// incl R4101 & R3910 for Windows CE return "PROCESSOR_MIPS_R4000"; case PROCESSOR_ALPHA_21064: return "PROCESSOR_ALPHA_21064"; case PROCESSOR_PPC_601: return "PROCESSOR_PPC_601"; case PROCESSOR_PPC_603: return "PROCESSOR_PPC_603"; case PROCESSOR_PPC_604: return "PROCESSOR_PPC_604"; case PROCESSOR_PPC_620: return "PROCESSOR_PPC_620"; case PROCESSOR_HITACHI_SH3: // Windows CE return "PROCESSOR_HITACHI_SH3"; case PROCESSOR_HITACHI_SH3E: // Windows CE return "PROCESSOR_HITACHI_SH3E"; case PROCESSOR_HITACHI_SH4: // Windows CE return "PROCESSOR_HITACHI_SH4"; case PROCESSOR_MOTOROLA_821: // Windows CE return "PROCESSOR_MOTOROLA_821"; case PROCESSOR_SHx_SH3: // Windows CE return "PROCESSOR_SHx_SH3"; case PROCESSOR_SHx_SH4: // Windows CE return "PROCESSOR_SHx_SH4"; case PROCESSOR_STRONGARM: // Windows CE - 0xA11 return "PROCESSOR_STRONGARM"; case PROCESSOR_ARM720: // Windows CE - 0x720 return "PROCESSOR_ARM720"; case PROCESSOR_ARM820: // Windows CE - 0x820 return "PROCESSOR_ARM820"; case PROCESSOR_ARM920: // Windows CE - 0x920 return "PROCESSOR_ARM920"; case PROCESSOR_ARM_7TDMI: // Windows CE return "PROCESSOR_ARM_7TDMI"; case PROCESSOR_OPTIL: // MSIL return "PROCESSOR_OPTIL"; default: return "Unknown"; } } const char *GetProcessorArchitechtureAsString(WORD wProcessorArchitecture) { switch (wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_INTEL: return "PROCESSOR_ARCHITECTURE_INTEL"; case PROCESSOR_ARCHITECTURE_MIPS: return "PROCESSOR_ARCHITECTURE_MIPS"; case PROCESSOR_ARCHITECTURE_ALPHA: return "PROCESSOR_ARCHITECTURE_ALPHA"; case PROCESSOR_ARCHITECTURE_PPC: return "PROCESSOR_ARCHITECTURE_PPC"; case PROCESSOR_ARCHITECTURE_SHX: return "PROCESSOR_ARCHITECTURE_SHX"; case PROCESSOR_ARCHITECTURE_ARM: return "PROCESSOR_ARCHITECTURE_ARM"; case PROCESSOR_ARCHITECTURE_IA64: return "PROCESSOR_ARCHITECTURE_IA64"; case PROCESSOR_ARCHITECTURE_ALPHA64: return "PROCESSOR_ARCHITECTURE_ALPHA64"; case PROCESSOR_ARCHITECTURE_MSIL: return "PROCESSOR_ARCHITECTURE_MSIL"; case PROCESSOR_ARCHITECTURE_AMD64: return "PROCESSOR_ARCHITECTURE_AMD64"; case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: return "PROCESSOR_ARCHITECTURE_IA32_ON_WIN64"; case PROCESSOR_ARCHITECTURE_UNKNOWN: return "PROCESSOR_ARCHITECTURE_UNKNOWN"; default: return "Unknown"; } } const char *GetProcessorLevelAsString(WORD wProcessorArchitecture, WORD wProcessorLevel) { if (wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) { switch (wProcessorLevel) { case 3: return "80386"; case 4: return "i486"; case 5: return "Pentium"; case 6: return "Intel Pentium Pro, II, III or 4"; default: return "Unknown"; } } else if (wProcessorArchitecture == PROCESSOR_ARCHITECTURE_MIPS) { if (wProcessorLevel & 0x0004) { return "MIPS R4000"; } else { return "Unknown"; } } else if (wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ALPHA) { switch (wProcessorLevel) { case 21064: return "Alpha 21064"; case 21066: return "Alpha 21066"; case 21164: return "Alpha 21164"; default: return "Unknown"; } } else if (wProcessorArchitecture == PROCESSOR_ARCHITECTURE_PPC) { switch (wProcessorLevel) { case 1: return "PPC 601"; case 3: return "PPC 603"; case 4: return "PPC 604"; case 6: return "PPC 603+"; case 9: return "PPC 604+"; case 20: return "PPC 620"; default: return "Unknown"; } } else { return "Unkown"; } } int main() { SYSTEM_INFO systemInfo; GetSystemInfo(&systemInfo); printf("dwActiveProcessorMask = %u\n", systemInfo.dwActiveProcessorMask); printf("dwAllocationGranularity = %u\n", systemInfo.dwAllocationGranularity); printf("dwNumberOfProcessors = %u\n", systemInfo.dwNumberOfProcessors); printf("dwOemId = %u\n", systemInfo.dwOemId); printf("dwPageSize = %u\n", systemInfo.dwPageSize); printf("dwProcessorType = %s\n", GetProcessorTypeAsString(systemInfo.dwProcessorType)); printf("lpMaximumApplicationAddress = %p\n", systemInfo.lpMaximumApplicationAddress); printf("lpMinimumApplicationAddress = %p\n", systemInfo.lpMinimumApplicationAddress); printf("wProcessorArchitecture = %s\n", GetProcessorArchitechtureAsString(systemInfo.wProcessorArchitecture)); printf("wProcessorLevel = %s\n", GetProcessorLevelAsString( systemInfo.wProcessorArchitecture, systemInfo.wProcessorLevel)); printf("wProcessorRevision = %u\n", systemInfo.wProcessorRevision); return 0; }