获取 Windows 操作系统版本信息

原创 2007年10月11日 03:13:00
// OSinfo.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include "winsock.h"
#include <string>
#include <iostream>
using std::cout;using std::string;using std::iostream;
using std::endl;using std::ios;using std::fstream;
using std::ofstream;using std::cin;
#pragma comment( lib, "Ws2_32.lib" )
#define MAX_VALUE_NAME   256

//char osinfo[MAX_PATH][MAX_PATH];
char patchname[MAX_VALUE_NAME];

//全局变量
char *LocalIP="";   //定义IP地址变量

//获取本机ip
bool GetLocalIp()
{
        WSADATA wsaData;
        char name[255];//定义用于存放获得的主机名的变量
        PHOSTENT hostinfo;
        //调用MAKEWORD()获得Winsock版本的正确值,用于加载Winsock库
        if ( WSAStartup( MAKEWORD(2,2), &wsaData ) == 0 )
        {
                //现在是加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续
                if( gethostname ( name, sizeof(name)) == 0)
                {
                        //如果成功地将本地主机名存放入由name参数指定的缓冲区中
                        if((hostinfo = gethostbyname(name)) != NULL)
                        {
                                //这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo
                                //为PHOSTENT型的变量,下面即将用到这个结构体
                                LocalIP = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
                                //调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP
                                //地址(如192.168.0.1)
                                // printf("the ip is:%s/n",LocalIP);//输出IP地址
                        }
                }
                WSACleanup( );//卸载Winsock库,并释放所有资源
               
        }
        return TRUE;
}

//显示系统版本
bool DisplaySystemVesion(FILE *fp)
{
        OSVERSIONINFOEX osvi;
        BOOL bOsVersionInfoEx;
        //利用OSVERSIONINFOEX结构调用GetVersionEx()函数
        //如果调用失败,可尝试使用OSVERSIONINFO结构
        ZeroMemory(&osvi,sizeof(OSVERSIONINFOEX));
        osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
        if(!(bOsVersionInfoEx=GetVersionEx((OSVERSIONINFO*)&osvi)))
        {
                //
                osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
                if(!GetVersionEx((OSVERSIONINFO*)&osvi))
                        return FALSE;
        }
        switch(osvi.dwPlatformId)
        {
        case VER_PLATFORM_WIN32_NT:
                //get os information
                if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
                {
                        printf("Microsoft Windows Server 2003 family ");
                        //fprintf( fp, "Microsoft Windows Server 2003 family ");
                        fprintf( fp, "WindowsServer2003");
                        // strcpy(osinfo[0],"Microsoft Windows Server 2003 family ");
                }
               
                if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
                {
                        printf("Microsoft Windows XP ");
                        //fprintf( fp, "Microsoft Windows XP ");
                        fprintf( fp, "WindowsXP");
                        //  strcpy(osinfo[0],"Microsoft Windows XP ");
                }
                if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
                {
                        printf("Microsoft Windows 2000 ");
                        //fprintf( fp, "Microsoft Windows 2000 ");
                        fprintf( fp, "Windows2000");
                        // strcpy(osinfo[0],"Microsoft Windows 2000 ");
                }
                if ( osvi.dwMajorVersion <= 4 )
                {
                        printf("Microsoft Windows NT ");
                        //fprintf( fp, "Microsoft Windows NT ");
                        fprintf( fp, "WindowsNT");
                        //   strcpy(osinfo[0],"Microsoft Windows NT ");
                }
                //
                if(bOsVersionInfoEx)
                {
                        if(osvi.wProductType==VER_NT_WORKSTATION)
                        {
                                printf("Professional ");
                                // fprintf(fp,"Professional ");
                        }
                        if(osvi.wProductType==VER_NT_SERVER)
                        {
                                printf("Server ");
                                // fprintf(fp,"Server ");
                        }
                        //printf("/n");
                        fprintf(fp,"/n");
                }
                else
                {
                        HKEY hKey;
                        char szProductType[80];
                        DWORD dwBufLen;
                        RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM//CurrentControlSet//Control//ProductOptions",0,KEY_QUERY_VALUE,&hKey);
                        RegQueryValueEx(hKey,"ProductType",NULL,NULL,(LPBYTE)szProductType,&dwBufLen);
                        RegCloseKey(hKey);
                       
                        if(lstrcmpi("WINNT",szProductType)==0)
                        {
                                printf("Workstation ");
                                // fprintf(fp,"Workstation ");
                        }
                        if(lstrcmpi("SERVERNT",szProductType)==0)
                        {
                                printf("Server ");
                                // fprintf(fp,"Server ");
                        }
                        //printf("/n");
                        fprintf(fp,"/n");
                }
               
                // Display service pack (if any) and build number.
                if( osvi.dwMajorVersion == 4 &&
                        lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 )
                {
                        HKEY hKey;
                        LONG lRet;
                        // Test for SP6 versus SP6a.
                        lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                                "SOFTWARE//Microsoft//Windows NT//CurrentVersion//Hotfix//Q246009",
                                0, KEY_QUERY_VALUE, &hKey );
                        if( lRet == ERROR_SUCCESS )
                        {
                                printf( "Service Pack 6a (Build %d)/n", osvi.dwBuildNumber & 0xFFFF );
                                // fprintf( fp,"Service Pack 6a (Build %d)/n", osvi.dwBuildNumber & 0xFFFF );
                                // fprintf( fp,"Service Pack 6a/n" );
                                fprintf( fp,"6a/n" );
                        }
                        else // Windows NT 4.0 prior to SP6a
                        {
                                printf( "%s (Build %d)",osvi.szCSDVersion,osvi.dwBuildNumber & 0xFFFF);
                                /* printf( "%s (Build %d)/n",
                                osvi.szCSDVersion,
                                osvi.dwBuildNumber & 0xFFFF);
                                */
                                // fprintf( fp,"%s (Build %d)/n",
                                //  osvi.szCSDVersion,
                                //  osvi.dwBuildNumber & 0xFFFF);
                                // fprintf( fp,"%s/n",osvi.szCSDVersion);
                                fprintf( fp,"%s/n",osvi.szCSDVersion+13);  //去掉"Service Pack "共13个字节,只保留最后的号
                        }
                        RegCloseKey( hKey );
                }
                else // Windows NT 3.51 and earlier or Windows 2000 and later
                {
                        printf( "%s (Build %d)",osvi.szCSDVersion,osvi.dwBuildNumber & 0xFFFF);
                        /*printf( "%s (Build %d)/n",
                        osvi.szCSDVersion,
                        osvi.dwBuildNumber & 0xFFFF);
                        */
                        // fprintf( fp,"%s (Build %d)/n",
                        //  osvi.szCSDVersion,
                        //  osvi.dwBuildNumber & 0xFFFF);
                        // fprintf( fp,"%s/n",osvi.szCSDVersion);
                        fprintf( fp,"%s/n",osvi.szCSDVersion+13);    //去掉"Service Pack "共13个字节,只保留最后的号
                }
                break;
case VER_PLATFORM_WIN32_WINDOWS:
         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
         {
                 printf("Microsoft Windows 95 ");
                 fprintf(fp,"Microsoft Windows 95 ");
                 if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
                 {
                         printf("OSR2");
                         fprintf(fp,"OSR2");
                         //  strcat(osinfo[0], "OSR2" );
                 }
                 printf("/n");
                 fprintf(fp,"/n");
         }
         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
         {
                 printf("Microsoft Windows 98 ");
                 fprintf(fp,"Microsoft Windows 98 ");
                 if ( osvi.szCSDVersion[1] == 'A' )
                 {
                         printf("SE");
                         fprintf(fp,"SE");
                 }
                 printf("/n");
                 fprintf(fp,"/n");
         }
         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
         {
                 printf("Microsoft Windows Millennium Edition/n");
                 fprintf(fp,"Microsoft Windows Millennium Edition/n");
         }
         break;
case VER_PLATFORM_WIN32s:
         printf(" Microsoft Win32s/n");
         fprintf(fp," Microsoft Win32s/n");
         break;
}
return TRUE;
}
void DisplaySetupedPatch(FILE *fp)
{
        HKEY hKey;
        // LONG lRet;
        // char Buf[80];
        // char lpBuf[80];
        DWORD i;
        DWORD retCode;
        // DWORD j;
        // DWORD retValue;
        DWORD dwxValueName=MAX_VALUE_NAME;
        LPCTSTR path="SOFTWARE//Microsoft//Windows NT//CurrentVersion//Hotfix";
        LONG return0=RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_READ,&hKey);
        if(return0!=ERROR_SUCCESS)
        {
                printf("错误:无法打开有关的键!");
        }
        for(i=1,retCode=ERROR_SUCCESS;retCode==ERROR_SUCCESS;i++)
        {
                retCode=RegEnumKey(hKey,i,patchname,MAX_PATH);
                if(retCode==ERROR_SUCCESS)
                {
                        printf("%s/n",patchname);
                        fprintf(fp,"%s/n",patchname);
                }
        }
       
}
void main()
{
        //写入文件
        FILE *fp;
        GetLocalIp();
        const char SaveReciveFilePath[]="f://";
        string abPath(SaveReciveFilePath);
        char Filename[512]="";
        strcpy(Filename,LocalIP);   //拷贝字符串
        strcat(Filename,".txt");    //连接字符串
        abPath += Filename;
        fp=fopen(abPath.c_str(),"w");
        while(fp==NULL);
        // printf("the LocalIP is:%s/n",LocalIP);//输出IP地址
        printf("本机IP地址:%s/n",LocalIP);//输出IP地址
        // fprintf(fp,"本机IP:%s/n",LocalIP);
        // fprintf(fp,"%s/n",LocalIP);
        bool a=FALSE;
        printf("本机操作系统版本是:");
        // fprintf(fp,"本机操作系统版本是:");
        //操作系统版本信息
        while (a!=TRUE)
        {
                a=DisplaySystemVesion(fp);
        }
        //操作系统语言信息
        printf("语言:");
        // fprintf(fp,"语言:");
        /* WORD wLangPID = PRIMARYLANGID( GetSystemDefaultLangID() );
        if( LANG_CHINESE == wLangPID )
        {
        printf("CHS/n");//中文
        fprintf(fp,"CHN/n");
        }
        else
        {
        printf("ENG/n"); //英文
        fprintf(fp,"ENG/n");
        }
        if( NULL == wLangPID )
        {
        printf( "Failure!/n" );
        }
        */
        int LanguageID=GetSystemDefaultLangID();   //返回操作系统语言的ID号
        switch(LanguageID)
        {
        case 0x0404:
                printf("CHT/n");//Chinese  Taiwan
                fprintf(fp,"CHT/n");
                break;
        case 0x0804:
                printf("CHS/n");//Chinese PRC
                fprintf(fp,"CHS/n");
                break;
        case 0x0c04:
                printf("ZHH/n");//Chinese Hong Kong SAR
                fprintf(fp,"ZHH/n");
                break;
        case 0x1004:
                printf("ZHH/n");//Chinese Singapore
                fprintf(fp,"ZHH/n");
                break;
        case 0x1404:
                printf("ZHM/n");//Chinese Macau SAR  
                fprintf(fp,"ZHM/n");
                break;
        case 0x0809:
                printf("ENG/n");//English United Kingdom
                fprintf(fp,"ENG/n");
                break;
        case 0x0409:
                printf("USA/n");//English United States  
                fprintf(fp,"USA/n");
                break;
        default:
                printf("Default/n");
                fprintf(fp,"Default/n");
                break;
        }
        // printf("%d/n",id);
        //操作系统已安装补丁信息
        printf("系统已经安装的升级补丁有:/n");
        // fprintf(fp,"系统已经安装的升级补丁有:/n");
        DisplaySetupedPatch(fp);
        fclose(fp);

VC/MFC程序中获取当前Windows操作系统版本名称(2016-04-25修改)

CString getOSName() { CString osName = _T(""); int a=0,b=0,i=0,j=0; _asm { pushad m...
  • dezhihuang
  • dezhihuang
  • 2016年01月09日 11:57
  • 2223

获取Windows系统版本号

前言 由于前段时间比较忙,一直没有来跟大家分享交流技术,实在是抱歉,往后我会不定时跟大家分享一些C++技术。 废话 有些东西看似简单,但坑多着呢,所以大家还是要多亲自尝试,不要眼高手低。 核心代码 /...
  • sunflover454
  • sunflover454
  • 2016年05月28日 15:48
  • 5032

C++中获取操作系统的名称和版本名称

//读取操作系统的名称 void GetSystemName(CString& osname) { SYSTEM_INFO info; //用SYSTEM_INFO结构判断64位...
  • pjl1119
  • pjl1119
  • 2013年01月30日 16:17
  • 11365

在.Net Framework中获得Windows目录、机器名、操作系统版本信息等系统环境信息

机器名代码:Environment.MachineName结果示例:"BOBOPO.COM"用户名代码:Environment.UserName结果示例:"Bobopo"CPU数量代码:Environ...
  • icewizardry
  • icewizardry
  • 2013年12月11日 16:12
  • 360

在.Net Framework中获得Windows目录、机器名、操作系统版本信息等系统环境信息

机器名 代码: Environment.MachineName 结果示例: "BOBOPO.COM" 用户名 代码: Environment.UserName 结果示例: "Bobo...
  • ligengdipan
  • ligengdipan
  • 2012年10月03日 00:15
  • 580

获取操作系统版本信息的VC源代码

  • 2010年01月23日 13:39
  • 42KB
  • 下载

获取操作系统版本信息源代码(42KB)

  • 2006年02月23日 09:05
  • 42KB
  • 下载

获取所有操作系统版本信息[FULLOSVersion.rar]-精品源代码

  • 2009年10月11日 03:19
  • 4KB
  • 下载

qt 获取win操作系统版本信息

11
  • tjdgluo
  • tjdgluo
  • 2015年05月08日 16:48
  • 933

HttpServletRequest请求中获取操作系统,浏览器及浏览器版本信息

从request中获取操作系统和浏览器及浏览器版本信息。
  • zhouseawater
  • zhouseawater
  • 2017年02月10日 17:36
  • 4968
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取 Windows 操作系统版本信息
举报原因:
原因补充:

(最多只允许输入30个字)