Window Version 구하기

2017. 2. 16. 20:24IT-개발/winapi 및 MFC

반응형


msdn에 현재까지 MS에서 발매한 OS 버전 정보가 간단히 있다.

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


그러나 SDK를 동원 / 제공되는 api를 호출해도 현재 윈도우 버전 정보가 쉽게 구해지지 않더라.



GetVersionEx 를 사용하면, 정상적인 윈도우 버전 정보가 나오질 않더라.


윈도우10 에 대해서 6.3 으로 나온다. Window 8.1 로 판단하더라~


BOOL GetWindowVersion(DWORD & dwMajorVersion, DWORD & dwMinorVersion, DWORD & dwPlat )

{

LPWKSTA_INFO_100 pwi = NULL;

if ( NERR_Success == NetWkstaGetInfo( NULL, 100, (LPBYTE*)&pwi) ) 

{

dwMajorVersion = pwi->wki100_ver_major;

dwMinorVersion = pwi->wki100_ver_minor;

dwPlat  = pwi->wki100_platform_id;

NetApiBufferFree(pwi);


  return TRUE;

}

else

return FALSE;

}


요렇게 하니까 나온다...


좋은 활용 방법인듯~ ^^

참고하자~


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


msdn에 친절한 예제 소스와 설명도 있다.


#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <stdio.h>
#include <windows.h> 
#include <lm.h>

int wmain(int argc, wchar_t *argv[])
{
   DWORD dwLevel = 102;
   LPWKSTA_INFO_102 pBuf = NULL;
   NET_API_STATUS nStatus;
   LPWSTR pszServerName = NULL;
   //
   // Check command line arguments.
   //
   if (argc > 2)
   {
      fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
      exit(1);
   }
   // The server is not the default local computer.
   //
   if (argc == 2)
      pszServerName = argv[1];
   //
   // Call the NetWkstaGetInfo function, specifying level 102.
   //
   nStatus = NetWkstaGetInfo(pszServerName,
                             dwLevel,
                             (LPBYTE *)&pBuf);
   //
   // If the call is successful,
   //  print the workstation data.
   //
   if (nStatus == NERR_Success)
   {
      printf("\n\tPlatform: %d\n", pBuf->wki102_platform_id);
      wprintf(L"\tName:     %s\n", pBuf->wki102_computername);
      printf("\tVersion:  %d.%d\n", pBuf->wki102_ver_major,
                                  pBuf->wki102_ver_minor);
      wprintf(L"\tDomain:   %s\n", pBuf->wki102_langroup);
      wprintf(L"\tLan Root: %s\n", pBuf->wki102_lanroot);
      wprintf(L"\t# Logged On Users: %d\n", pBuf->wki102_logged_on_users);
   }
   //
   // Otherwise, indicate the system error.
   //
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);
   //
   // Free the allocated memory.
   //
   if (pBuf != NULL)
      NetApiBufferFree(pBuf);

   return 0;
}