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

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

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

 

[cpp]  view plain  copy
  1. /* 头文件 */  
  2. #include <windows.h>  
  3. #include <Lmcons.h>  
  4. #include <stdio.h>  
  5. /* 函数声明 */  
  6. void ShowVersionInfo();  
  7. void ShowSystemInfo();  
  8. void GetFolders();  
  9. void GetNames();  
  10. void MouseSpeed();  
  11. /* ************************************ 
  12. * int main() 
  13. * 功能    依次调用各示例函数 
  14. **************************************/  
  15. int main()  
  16. {  
  17.     ShowVersionInfo();  
  18.     ShowSystemInfo();  
  19.     GetFolders();  
  20.     GetNames();  
  21.     MouseSpeed();  
  22. }  
  23.   
  24. /* ************************************ 
  25. * void ShowVersionInfo() 
  26. * 功能    获取并显示系统版本信息 
  27. **************************************/  
  28. void ShowVersionInfo()  
  29. {  
  30.     OSVERSIONINFOEX ovex;  
  31.     CHAR szVersionInfo[1024];  
  32.     *szVersionInfo = '\x00';  
  33.     // 设置参数大小,调用并判断是否成功  
  34.     ovex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);  
  35.     if(!GetVersionEx(&ovex))  
  36.     {  
  37.         printf("error %d\n",GetLastError());  
  38.         return;  
  39.     }  
  40.     // 判断版本  
  41.     if(ovex.dwMajorVersion==5)  
  42.     {  
  43.         if(ovex.dwMinorVersion==0)  
  44.             lstrcat(szVersionInfo,"Windows 2000 ");  
  45.         else if(ovex.dwMinorVersion==1)  
  46.             lstrcat(szVersionInfo,"Windows XP ");  
  47.         else if(ovex.dwMinorVersion==2)  
  48.             lstrcat(szVersionInfo,"Windows Server 2003 ");  
  49.         else if(ovex.dwMinorVersion==7)  
  50.             lstrcat(szVersionInfo,"Windows 7 ");  
  51.     }  
  52.     else if(ovex.dwMajorVersion == 6)  
  53.         lstrcat(szVersionInfo,"Windows Vista ");  
  54.     else  
  55.         lstrcat(szVersionInfo,"Windows NT 4.0 或者其他 ");  
  56.     // 安装的SP,字符串  
  57.     lstrcat(szVersionInfo,ovex.szCSDVersion);  
  58.     // 判断wProductType,产品类型  
  59.     switch(ovex.wProductType)  
  60.     {  
  61.     case VER_NT_DOMAIN_CONTROLLER:  
  62.         lstrcat(szVersionInfo,"\n域控制器");  
  63.         break;  
  64.     case VER_NT_SERVER:  
  65.         lstrcat(szVersionInfo,"\n服务器");  
  66.         break;  
  67.     case VER_NT_WORKSTATION :  
  68.         lstrcat(szVersionInfo,"\n独立工作站");  
  69.         break;  
  70.     }  
  71.     // 判断wSuiteMask  
  72.     if(ovex.wSuiteMask & VER_SUITE_PERSONAL)  
  73.     {  
  74.         lstrcat(szVersionInfo,"\nWindows XP Home Edition");  
  75.     }  
  76.     if(ovex.wSuiteMask & VER_SUITE_SINGLEUSERTS)  
  77.     {  
  78.         lstrcat(szVersionInfo,"\n安装了终端服务,但只支持一个会话");  
  79.     }  
  80.     // wSuiteMask成员还可能是以下值的组合  
  81.     //VER_SUITE_BLADE  
  82.     //VER_SUITE_COMPUTE_SERVER  
  83.     //VER_SUITE_DATACENTER  
  84.     //VER_SUITE_ENTERPRISE  
  85.     //VER_SUITE_EMBEDDEDNT  
  86.     //VER_SUITE_PERSONAL  
  87.     //VER_SUITE_SINGLEUSERTS  
  88.     //VER_SUITE_SMALLBUSINESS  
  89.     //VER_SUITE_SMALLBUSINESS_RESTRICTED  
  90.     //VER_SUITE_STORAGE_SERVER  
  91.     //VER_SUITE_TERMINAL  
  92.     printf("%s\n",szVersionInfo);  
  93. }  
  94. /* ************************************ 
  95. * void ShowSystemInfo() 
  96. * 功能    获取并显示硬件相关信息 
  97. **************************************/  
  98. void ShowSystemInfo()  
  99. {  
  100.     SYSTEM_INFO si;  
  101.     GetSystemInfo(&si);  
  102.     printf("内存分页大小:0x%.8X,可用内存起始:0x%.8X,可用内存结束:0x%.8X,\n"  
  103.         "处理器个数:%d,处理器类型:",  
  104.         si.dwPageSize,  
  105.         si.lpMinimumApplicationAddress,  
  106.         si.lpMaximumApplicationAddress,  
  107.         si.dwNumberOfProcessors);  
  108.   
  109.     switch (si.dwProcessorType)  
  110.     {  
  111.     case PROCESSOR_INTEL_386:  
  112.         printf("386");  
  113.         break;  
  114.     case PROCESSOR_INTEL_486:  
  115.         printf("486");  
  116.         break;  
  117.     case PROCESSOR_INTEL_PENTIUM:  
  118.         printf("pentium");  
  119.         printf(", Cpu Model 0x%.2X, Stepping 0x%.2X",  
  120.             (BYTE)(si.wProcessorRevision>>8),  
  121.             (BYTE)si.wProcessorRevision);  
  122.         break;  
  123.     }  
  124.     printf("\n处理器架构:");  
  125.     switch (si.wProcessorArchitecture)  
  126.     {  
  127.     case PROCESSOR_ARCHITECTURE_INTEL:  
  128.         printf("intel");  
  129.         printf(" CPU vendor is %d",si.wProcessorLevel);  
  130.         break;  
  131.     case PROCESSOR_ARCHITECTURE_IA64:  
  132.         printf("64 bits intel");  
  133.         break;  
  134.     case PROCESSOR_ARCHITECTURE_AMD64:  
  135.         printf("64 bits AMD");  
  136.         break;  
  137.     case PROCESSOR_ARCHITECTURE_UNKNOWN:  
  138.         printf("UNKNOWN");  
  139.         break;  
  140.     }  
  141.     printf("\n");  
  142. }  
  143. /* ************************************ 
  144. *void GetFolders() 
  145. * 功能    获取系统目录等信息 
  146. **************************************/  
  147. void GetFolders()  
  148. {  
  149.     TCHAR szSystemDirectory[MAX_PATH];  
  150.     TCHAR szWindowsDirectory[MAX_PATH];  
  151.   
  152.     GetSystemDirectory(szSystemDirectory,MAX_PATH);  
  153.     GetWindowsDirectory(szWindowsDirectory,MAX_PATH);  
  154.     printf("系统目录:\t%s\nWindows目录:\t%s\n",  
  155.         szSystemDirectory,  
  156.         szWindowsDirectory);  
  157. }  
  158. /* ************************************ 
  159. * void GetNames() 
  160. * 功能    获取计算机名、用户名等信息 
  161. **************************************/  
  162. void GetNames()  
  163. {  
  164.     DWORD dwComputerNameLen = MAX_COMPUTERNAME_LENGTH+1;  
  165.     DWORD dwUserNameLen = UNLEN+1;  
  166.     TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH+1];  
  167.     TCHAR szUserName[UNLEN + 1];  
  168.     if(!SetComputerName("My_Computer"))  
  169.     {  
  170.         printf("Set Error %d",GetLastError());  
  171.     }  
  172.     GetComputerName(szComputerName,&dwComputerNameLen);  
  173.   
  174.     printf("计算机名:%s\n",szComputerName);  
  175.   
  176.     //ComputerNameNetBIOS   
  177.     //ComputerNameDnsHostname   
  178.     //ComputerNameDnsFullyQualified   
  179.     //ComputerNamePhysicalNetBIOS   
  180.     //ComputerNamePhysicalDnsHostname   
  181.     //ComputerNamePhysicalDnsDomain   
  182.     //ComputerNamePhysicalDnsFullyQualified   
  183.     dwComputerNameLen = MAX_COMPUTERNAME_LENGTH+1;  
  184.     GetComputerNameEx(ComputerNameDnsHostname,szComputerName,&dwComputerNameLen);  
  185.     printf("ComputerNameDnsHostname: %s\n",szComputerName);  
  186.   
  187.     dwComputerNameLen = MAX_COMPUTERNAME_LENGTH+1;  
  188.     GetComputerNameEx(ComputerNamePhysicalNetBIOS,szComputerName,&dwComputerNameLen);  
  189.     printf("ComputerNamePhysicalNetBIOS: %s\n",szComputerName);   
  190.     GetUserName(szUserName,&dwUserNameLen);  
  191.     printf("用户名:%s\n",szUserName);  
  192. }  
  193. /* ************************************ 
  194. * void MouseSpeed() 
  195. * 功能    获取系统目录等信息 
  196. **************************************/  
  197. void MouseSpeed()  
  198. {  
  199.   
  200.     BOOL fResult;  
  201.     int aMouseInfo[3];       // 保存数据信息的数组  
  202.   
  203.     // 调用 SystemParametersInfo  
  204.     fResult = SystemParametersInfo(  
  205.         SPI_GETMOUSE,   // 获取鼠标信息  
  206.         0,              // 未使用  
  207.         &aMouseInfo,    // 用于保存鼠标信息  
  208.         0);             // 未使用  
  209.   
  210.     // 把鼠标速度加倍   
  211.     if( fResult )  
  212.     {  
  213.         aMouseInfo[2] = 2 * aMouseInfo[2];   
  214.   
  215.         SystemParametersInfo(  
  216.             SPI_SETMOUSE,       // 设置鼠标信息  
  217.             0,                 // 未使用  
  218.             aMouseInfo,         // 鼠标信息  
  219.             SPIF_SENDCHANGE);  // 更新 win.ini   
  220.     }  
  221. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值