728x90
반응형

1. 개요

- OSVERSIONINFOEX 구조체로 윈도우의 버전을 알수있음.

 

2. 코드

OSVERSIONINFOEX osvi;

ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 

// OSVERSIONINFOEX 구조체를 이용하여 버전 구분
switch(osvi.dwPlatformId){    
    // NT 기반 운영체제    
    case VER_PLATFORM_WIN32_NT:        
    /*                   
    dwMajorVersion, dwMinorVersion 멤버로 운영체제 구분        
    ex)             
        if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0) version = "vista";            
        if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1) version = "window 7";                    
    ...        
    */        
    break;
}

- 윈도우 NT 4.0 SP6 보다 낮은 버전 os에서는 OSVERSIONINFO 구체를 사용해야함.

 
OSVERSIONINFOEX osvi;

ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

// 윈도우 NT 4.0 SP6 이하 윈도우라면 FALSE == 윈도우 버전이 낮음
if(!GetVersionEx((OSVERSIONINFO *)&osvi))
{
    // OSVERSIONINFO로 재설정
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
}

switch(osvi.dwPlatformId){
    // 윈도우즈 9x 기반의 운영체제인 경우
    case VER_PLATFORM_WIN32_WINDOWS:
        /*
        if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) version = "window 95";
        else if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) version = "window 98";
        else if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) version = "window ME";
        */
        break;
}
 

 

[Major/Minor Chart]

 

[표 출처]

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms724833(v=vs.85).aspx

728x90
반응형
728x90
반응형

Property -> Linker -> Manifest File -> UAC Execution Level

728x90
반응형
728x90
반응형

ATL90.dll

[Project] Property -> General -> Use of ATL -> Static Link to ATL

 

 

MSVCR90.dll

[Project] Property -> C/C++ -> Code Generation -> Runtime Library -> /MT

단, Debug로 컴파일 할 경우에는 /MTd

 

728x90
반응형
728x90
반응형

1. 코드

#include<windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_Inst;
LPCWSTR lpszClass = TEXT("Window");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszClassParam, int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_Inst = 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(&Message, NULL, 0, 0))
    {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return (int)Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{

    switch(iMessage)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hWnd, iMessage, wParam,lParam);
}

 

728x90
반응형

+ Recent posts