获取 Windows 操作系统版本信息

该博客介绍了一个C++程序,用于获取Windows操作系统的版本信息,包括Windows Server 2003、XP、2000等的版本、服务包和构建号。程序通过GetVersionEx函数获取OS信息,并展示操作系统类型、服务包和已安装的补丁。
摘要由CSDN通过智能技术生成
// 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 ");
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值