基于Visual C++之Windows核心编程代码分析(4)获取操作系统信息

来源:互联网 发布:c语言||什么意思 编辑:程序博客网 时间:2024/04/28 23:57

我们在进行Windows编程的时候,经常需要获取操作系统的信息,好根据操作系统的信息进行信息处理,保证软件的兼容性。

具体请见代码实现与注释分析。

 

/* 头文件 */#include <windows.h>#include <Lmcons.h>#include <stdio.h>/* 函数声明 */void ShowVersionInfo();void ShowSystemInfo();void GetFolders();void GetNames();void MouseSpeed();/* ************************************* int main()* 功能依次调用各示例函数**************************************/int main(){ShowVersionInfo();ShowSystemInfo();GetFolders();GetNames();MouseSpeed();}/* ************************************* void ShowVersionInfo()* 功能获取并显示系统版本信息**************************************/void ShowVersionInfo(){OSVERSIONINFOEX ovex;CHAR szVersionInfo[1024];*szVersionInfo = '\x00';// 设置参数大小,调用并判断是否成功ovex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);if(!GetVersionEx(&ovex)){printf("error %d\n",GetLastError());return;}// 判断版本if(ovex.dwMajorVersion==5){if(ovex.dwMinorVersion==0)lstrcat(szVersionInfo,"Windows 2000 ");else if(ovex.dwMinorVersion==1)lstrcat(szVersionInfo,"Windows XP ");else if(ovex.dwMinorVersion==2)lstrcat(szVersionInfo,"Windows Server 2003 ");else if(ovex.dwMinorVersion==7)lstrcat(szVersionInfo,"Windows 7 ");}else if(ovex.dwMajorVersion == 6)lstrcat(szVersionInfo,"Windows Vista ");elselstrcat(szVersionInfo,"Windows NT 4.0 或者其他 ");// 安装的SP,字符串lstrcat(szVersionInfo,ovex.szCSDVersion);// 判断wProductType,产品类型switch(ovex.wProductType){case VER_NT_DOMAIN_CONTROLLER:lstrcat(szVersionInfo,"\n域控制器");break;case VER_NT_SERVER:lstrcat(szVersionInfo,"\n服务器");break;case VER_NT_WORKSTATION :lstrcat(szVersionInfo,"\n独立工作站");break;}// 判断wSuiteMaskif(ovex.wSuiteMask & VER_SUITE_PERSONAL){lstrcat(szVersionInfo,"\nWindows XP Home Edition");}if(ovex.wSuiteMask & VER_SUITE_SINGLEUSERTS){lstrcat(szVersionInfo,"\n安装了终端服务,但只支持一个会话");}// wSuiteMask成员还可能是以下值的组合//VER_SUITE_BLADE//VER_SUITE_COMPUTE_SERVER//VER_SUITE_DATACENTER//VER_SUITE_ENTERPRISE//VER_SUITE_EMBEDDEDNT//VER_SUITE_PERSONAL//VER_SUITE_SINGLEUSERTS//VER_SUITE_SMALLBUSINESS//VER_SUITE_SMALLBUSINESS_RESTRICTED//VER_SUITE_STORAGE_SERVER//VER_SUITE_TERMINALprintf("%s\n",szVersionInfo);}/* ************************************* void ShowSystemInfo()* 功能获取并显示硬件相关信息**************************************/void ShowSystemInfo(){SYSTEM_INFO si;GetSystemInfo(&si);printf("内存分页大小:0x%.8X,可用内存起始:0x%.8X,可用内存结束:0x%.8X,\n""处理器个数:%d,处理器类型:",si.dwPageSize,si.lpMinimumApplicationAddress,si.lpMaximumApplicationAddress,si.dwNumberOfProcessors);switch (si.dwProcessorType){case PROCESSOR_INTEL_386:printf("386");break;case PROCESSOR_INTEL_486:printf("486");break;case PROCESSOR_INTEL_PENTIUM:printf("pentium");printf(", Cpu Model 0x%.2X, Stepping 0x%.2X",(BYTE)(si.wProcessorRevision>>8),(BYTE)si.wProcessorRevision);break;}printf("\n处理器架构:");switch (si.wProcessorArchitecture){case PROCESSOR_ARCHITECTURE_INTEL:printf("intel");printf(" CPU vendor is %d",si.wProcessorLevel);break;case PROCESSOR_ARCHITECTURE_IA64:printf("64 bits intel");break;case PROCESSOR_ARCHITECTURE_AMD64:printf("64 bits AMD");break;case PROCESSOR_ARCHITECTURE_UNKNOWN:printf("UNKNOWN");break;}printf("\n");}/* *************************************void GetFolders()* 功能获取系统目录等信息**************************************/void GetFolders(){TCHAR szSystemDirectory[MAX_PATH];TCHAR szWindowsDirectory[MAX_PATH];GetSystemDirectory(szSystemDirectory,MAX_PATH);GetWindowsDirectory(szWindowsDirectory,MAX_PATH);printf("系统目录:\t%s\nWindows目录:\t%s\n",szSystemDirectory,szWindowsDirectory);}/* ************************************* void GetNames()* 功能获取计算机名、用户名等信息**************************************/void GetNames(){DWORD dwComputerNameLen = MAX_COMPUTERNAME_LENGTH+1;DWORD dwUserNameLen = UNLEN+1;TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH+1];TCHAR szUserName[UNLEN + 1];if(!SetComputerName("My_Computer")){printf("Set Error %d",GetLastError());}GetComputerName(szComputerName,&dwComputerNameLen);printf("计算机名:%s\n",szComputerName);//ComputerNameNetBIOS //ComputerNameDnsHostname //ComputerNameDnsFullyQualified //ComputerNamePhysicalNetBIOS //ComputerNamePhysicalDnsHostname //ComputerNamePhysicalDnsDomain //ComputerNamePhysicalDnsFullyQualified dwComputerNameLen = MAX_COMPUTERNAME_LENGTH+1;GetComputerNameEx(ComputerNameDnsHostname,szComputerName,&dwComputerNameLen);printf("ComputerNameDnsHostname: %s\n",szComputerName);dwComputerNameLen = MAX_COMPUTERNAME_LENGTH+1;GetComputerNameEx(ComputerNamePhysicalNetBIOS,szComputerName,&dwComputerNameLen);printf("ComputerNamePhysicalNetBIOS: %s\n",szComputerName);GetUserName(szUserName,&dwUserNameLen);printf("用户名:%s\n",szUserName);}/* ************************************* void MouseSpeed()* 功能获取系统目录等信息**************************************/void MouseSpeed(){BOOL fResult;int aMouseInfo[3];       // 保存数据信息的数组// 调用 SystemParametersInfofResult = SystemParametersInfo(SPI_GETMOUSE,   // 获取鼠标信息0,              // 未使用&aMouseInfo,    // 用于保存鼠标信息0);             // 未使用// 把鼠标速度加倍 if( fResult ){aMouseInfo[2] = 2 * aMouseInfo[2]; SystemParametersInfo(SPI_SETMOUSE,// 设置鼠标信息0,                 // 未使用aMouseInfo,// 鼠标信息SPIF_SENDCHANGE);  // 更新 win.ini }}


 

原创粉丝点击