본문 바로가기

Windows/Windows API

시스템 정보 (GetSystemInfo)

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPSTR lpszClass="GetSystemInfo";

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
         ,LPSTR lpszCmdParam,int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    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)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);
    hWndMain=hWnd;
    
    while(GetMessage(&Message,0,0,0)) {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    SYSTEM_INFO si;
    char str[128];
    char Arch[100], Level[100];
    char KeyType[100];
    int arFunc[]={0,10,12,10,12,10,24,7,8,9,10,11,12};

    switch(iMessage) {
    case WM_CREATE:
        return 0;
    case WM_PAINT:
        hdc=BeginPaint(hWnd, &ps);
        GetSystemInfo(&si);
        wsprintf(str, "프로세서의 개수는 %d개 입니다", si.dwNumberOfProcessors);
        TextOut(hdc,10,10,str,strlen(str));
        switch (si.wProcessorArchitecture) {
        case PROCESSOR_ARCHITECTURE_INTEL:strcpy(Arch, "Intel");break;
        case PROCESSOR_ARCHITECTURE_MIPS:strcpy(Arch, "MIPS");break;
        case PROCESSOR_ARCHITECTURE_ALPHA:strcpy(Arch, "Alpha");break;
        case PROCESSOR_ARCHITECTURE_PPC:strcpy(Arch, "Power PC");break;
        case PROCESSOR_ARCHITECTURE_UNKNOWN:strcpy(Arch, "알수없음");break;
        }
        switch (si.wProcessorLevel) {
        case 3:strcpy(Level,"80386");break;
        case 4:strcpy(Level,"80486");break;
        case 5:strcpy(Level,"Pentium");break;
        case 6:strcpy(Level,"Pentium Pro or Pentium II");break;
        default:strcpy(Level,"기타");break;
        }
        wsprintf(str, "CPU 종류는 %s이며 레벨은 %s, 리비전은 %x입니다",
            Arch, Level, si.wProcessorRevision);
        TextOut(hdc,10,30,str,strlen(str));

        switch (GetKeyboardType(0)) {
        case 1:strcpy(KeyType, "IBM PC/XT or compatible(83 key)");break;
        case 2:strcpy(KeyType, "Olivetti ICO(102 key)");break;
        case 3:strcpy(KeyType, "IBM PC/AT (84 key)");break;
        case 4:strcpy(KeyType, "IBM enhanced(101 or 102 key)");break;
        case 5:strcpy(KeyType, "Nokia 1050");break;
        case 6:strcpy(KeyType, "Nokia 9140");break;
        case 7:strcpy(KeyType, "일본 키보드");break;
        default:strcpy(KeyType, "기타 키보드");break;
        }
        wsprintf(str,"키보드 타입은 %s이며 서브 타입은 %d, 펑션키는 %d개입니다",
            KeyType, GetKeyboardType(1), arFunc[GetKeyboardType(2)]);
        TextOut(hdc,10,50,str,strlen(str));
        EndPaint(hWnd, &ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

'Windows > Windows API' 카테고리의 다른 글

os 버전알기 (GetVersionEx)  (0) 2013.10.01
현재 시간 (GetLocalTime)  (0) 2013.10.01
실행시간 검사 (check run time)  (0) 2013.10.01
윈도우 가운데로 오기 (center window)  (0) 2013.10.01
capture  (0) 2013.10.01