// 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 ");
#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 ");