CPU정보 얻어오기
[ CPU정보를 얻어보자 ]
여기서는 현재 CPU종류와 프로세스갯수, 그리고 CPU가 얼마나 사용되고 있는정도를 알아보겠습니다. 첫 번째것은 단순히 함수의 호출로 알 수 있지만, 후자의 경우는 레지스트리에 저장되는 값을 사용하게 됩니다.
CPU의 종류와 프로세스 개수 알기
먼저 CPU의 종류와 프로세스 갯수를 알아보는 방법에 대해 알아보겠습니다. 이것 역시 단순히 API함수의 호출로 알 수가 있으므로, 그냥 서술하겠습니다. 이때 사용되는 함수는 GetSystemInfo라는 함수이며, 아래와 같은 구조를 이루고 있습니다.
dwProcessorType |
CPU의 타입(자세한 것은 위의 코드 참조) |
dwNumberOfProcessors |
유효한 CPU의 수 |
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
CString str;
switch(sysInfo.dwProcessorType) {
case PROCESSOR_INTEL_386:
str="386"; break;
case PROCESSOR_INTEL_486:
str="486"; break;
case PROCESSOR_INTEL_PENTIUM:
str="Pentium"; break;
case PROCESSOR_MIPS_R4000:
str="MIPS"; break;
case PROCESSOR_ALPHA_21064:
str="ALPHA"; break;
default:
str="Don't Know"; break;
}
CString str2;
str2.Format("CPU %s가 %d개있습니다.", strCpu, sysInfo.dwNumberOfProcessors);
CPU의 사용률 알기
레지스트리내의 HKEY_DYN_DATA내의 KERNEL\\CPUUsage의 StartStat를 읽어들인후, 같은 방식으로 StatData를 접근하면 CPU의 사용률을 알 수 있습니다. 이런방식으로 다음과 같은 코드로 접근할 수 있습니다.
HKEY hKey;
DWORD dwType=REG_DWORD;
DWORD dw=4;
DWORD dwDust;
char *pszRegKey="KERNEL\\CPUUsage";
int nCPUUsing; // 이변수에 사용률이 저장됩니다.
::RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\\StartStat", 0, KEY_READ, &hKey);
::RegQueryValueEx(hKey, pszRegKey, 0L, &dwType, (unsigned char *) &dwDust, &dw);
::RegCloseKey(hKey);
::RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\\StatData", 0, KEY_READ, &hKey);
::RegQueryValueEx(hKey, pszRegKey, 0L, &dwType, (unsigned char *) &nCPUUsing, &dw);
::RegCloseKey(hKey);
RegOpenKeyEx : 이함수는 어떤 특정화된 key를 엽니다.
LONG RegOpenKeyEx
(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult );
Parameters 설명
hKey : 다루려고하는 key값을 지정합니다.
lpSubKey : hKey값의 하위에 있는 키를 지정합니다.
ulOptions : Reserved; set to 0.
samDesired : Not supported; set to 0.
phkResult :현재 지정된 키값에 지정된 핸들 포인터를 받습니다.(사용후에는 반드시 RegCloseKey함수를 이용해서 제거해 주어야합니다.)
RegQueryValueEx : 이함수는 registry key에의해 연관된 값에대해, 그 타입과 데이터를 넘겨줍니다.
LONG RegQueryValueEx ( HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
Parameters 설명
hKey : 다루려는 킷값(여기서는 RegOpenKeyEx에서 지정해준 킷값을 씁니다.)
lpValueName : 알고싶은 쿼리값에대한 위치 포인터가 옵니다.
lpReserved : Reserved; set to NULL.
lpType : 알고싶은 값에 대한 데이터형을 지정합니다.(자세한건 MSDN을 참고)
lpData : 위의 인자에서 지정된 값이 저장될 포인터
lpcbData : lpData의 버퍼크기
'C & C++ > C & C++' 카테고리의 다른 글
현재 메모리 정보 얻어오기 (0) | 2011.11.17 |
---|---|
윈도우 부팅모드 알아내기 (0) | 2011.11.17 |
API함수를 이용한 바탕화면 바꾸기 (0) | 2011.11.17 |
API함수를 이용한 컴퓨터 사용자명 알아오기 (0) | 2011.11.17 |
현재 내 컴퓨터에 어떤 프로그램이 실행중인가 ? (0) | 2011.11.17 |
댓글