api완전정복책도보고 지식인 고수님들 도움도얻어서 만들고있는 간단한 systeminformation알아오는 소스가있는데요 수많은 api를 찾아보다가 아래의 2개 api를 찾았는데요 아래의 msdn도 보고그랬는데도 실제로 활용이
어렵습니다. 지식인 고수님들께서 도와주세요ㅠㅠ
http://msdn2.microsoft.com/en-us/library/ms724833.aspx
http://msdn2.microsoft.com/en-us/library/ms724429.aspx
OSVERSIONINFOEX : OS버전 가져오기
hostent 구조체 : IP정보를 가져오기
#include <windows.h>
// 윈도우 프로시저(각종 메시지 처리)
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage,
WPARAM wParam, LPARAM lParam);
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("System Information");
void GetMemoryStatus(long *lMemTotal, long *lAvailMemTotal, long *lVirtualTotal);
void GetProcessorInfo(LPSTR lpCPUSpeed, LPSTR lpProcessorType,
LPSTR lpNumProcessors);
enum INFO {MEMORY, PROCESSOR}; // 열거형 타입 선언
// 메인함수(콘솔의 main에 해당)
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG Msg;
HWND hWnd;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return (int)Msg.wParam;
}
void GetMemoryStatus(long *lMemTotal, long *lAvailMemTotal, long *lVirtualTotal)
{
MEMORYSTATUS memoryStatus;
memset(&memoryStatus, 0, sizeof(MEMORYSTATUS));
memoryStatus.dwLength = sizeof(memoryStatus);
GlobalMemoryStatus(&memoryStatus);
// 기본 단위는 바이트
// 아래는 KB 단위로 환산...
*lMemTotal = memoryStatus.dwTotalPhys / 1024;
*lAvailMemTotal = memoryStatus.dwAvailPhys / 1024;
*lVirtualTotal = memoryStatus.dwTotalVirtual / 1024;
}
void GetProcessorInfo(LPSTR lpCPUSpeed, LPSTR lpProcessorType,
LPSTR lpNumProcessors)
{
SYSTEM_INFO sysInfo;
LONG result;
HKEY hKey;
DWORD data;
DWORD dataSize;
//lpCPUSpeed[0] = 0;
// ---------------------------------------------
// 프로세서의 속도를 얻어낸다.
// ---------------------------------------------
result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Hardware\\Description\\System\\CentralProcessor\\0", 0,
KEY_QUERY_VALUE, &hKey);
if (result == ERROR_SUCCESS)
{
result = RegQueryValueEx(hKey, "~MHz", NULL, NULL,(LPBYTE)&data, &dataSize);
wsprintf(lpCPUSpeed, "%d MHz", data);
}
RegCloseKey(hKey);
// ------------------------------------------
// 하드웨어 정보를 얻어낸다.
// ------------------------------------------
GetSystemInfo(&sysInfo);
// 프로세서 타입부터 검사한다.
if (sysInfo.dwProcessorType == PROCESSOR_INTEL_386)
{
strcpy(lpProcessorType, "Intel 386");
}
else if (sysInfo.dwProcessorType == PROCESSOR_INTEL_486)
{
strcpy(lpProcessorType, "Intel 486");
}
else if (sysInfo.dwProcessorType == PROCESSOR_INTEL_PENTIUM)
{
if (sysInfo.wProcessorLevel == 6)
{
strcpy(lpProcessorType, "Intel Pentium (II/Pro)");
}
else
{
strcpy(lpProcessorType, "Intel Pentium");
}
}
else
{
strcpy(lpProcessorType, "알 수 없는 시스템");
}
// 프로세서의 갯수를 검사한다.
wsprintf(lpNumProcessors, "%d", sysInfo.dwNumberOfProcessors);
}
// 윈도우 프로시저 함수(각종 메시지 처리)
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HWND hButton1;
HWND hButton2;
long lMemTotal = 0;
long lAvailMemTotal = 0;
long lVirtualTotal = 0;
static TCHAR CPUSpeed[100];
static TCHAR ProcessorType[100];
static TCHAR NumProcessors[100];
static TCHAR MemoryInfo[200];
static TCHAR ProcessorInfo[250];
static INFO InfoType = MEMORY;
switch (iMessage)
{
case WM_CREATE :
hButton1 = CreateWindow(TEXT("button"), TEXT("Memory Info"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, 100, 30, hWnd, (HMENU)100, g_hInst, NULL);
hButton2 = CreateWindow(TEXT("button"), TEXT("Processor Info"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 50, 100, 30, hWnd, (HMENU)101, g_hInst, NULL);
return 0;
case WM_COMMAND :
switch (LOWORD(wParam)) // 컨트롤의 ID처리
{
case 100 :
GetMemoryStatus(&lMemTotal, &lAvailMemTotal, &lVirtualTotal);
wsprintf(MemoryInfo, "전체 실제 메모리: %d, 사용가능 실제 메모리: %d,전체 가상 메모리: %d", lMemTotal, lAvailMemTotal, lVirtualTotal);
InfoType = MEMORY;
break;
case 101 :
GetProcessorInfo(CPUSpeed, ProcessorType, NumProcessors);
wsprintf(ProcessorInfo, "프로세서 속도: %s, 타입: %s, 갯수: %s", CPUSpeed,
ProcessorType, NumProcessors);
InfoType = PROCESSOR;
break;
}
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case WM_PAINT :
hdc = BeginPaint(hWnd, &ps);
switch (InfoType)
{
case MEMORY :
TextOut(hdc, 100, 250, MemoryInfo, lstrlen(MemoryInfo));
break;
case PROCESSOR :
TextOut(hdc, 100, 250, ProcessorInfo, lstrlen(ProcessorInfo));
}
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY :
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}
'API' 카테고리의 다른 글
TerminateThread사용시 생존여부 판단 주의(GetExitCodeThread 사용시 리턴값 주의) (0) | 2010.03.16 |
---|---|
리스트뷰(혹은 트리뷰 등등)의 배경에 그림 넣기입니다 (2) | 2009.11.05 |
[팁] 일반 윈도우에서 다이얼로그박스의 편리한 키보드 인터페이스 구현하기 (1) | 2009.10.15 |
리스트뷰 아이템 스왑, 이동, 정렬 관련 API 소스 (2) | 2009.09.03 |
윈도우 속성 제거 및 추가 (and or not 연산) (0) | 2009.08.17 |
[펌] 프로세스의 메모리안에 접근하고 읽고 쓰기. (0) | 2009.07.11 |
메시지 박스 띄울시 재진입 관련 문제..... (2) | 2009.07.08 |