zoukankan      html  css  js  c++  java
  • 获得系统信息

     1         // Internet账号的注册表KEY
     2         const LPCTSTR INTERNET_ACCOUNTS_REGKEY = _T("Software\Microsoft\Internet Account Manager\Accounts");
     3 
     4         // SMTP值名
     5         const LPCTSTR SMTP_VALUE_NAME = _T("SMTP Email Address");
     6 
     7         // 邮件代理的注册表KEY
     8         const LPCTSTR MAIL_AGENT_REGKEY = _T("Mailto\shell\open\command");
     9 
    10         // 未读邮件的注册表KEY
    11         const LPCTSTR UNREAD_MAIL_REGKEY = _T("Software\Microsoft\Windows\CurrentVersion\UnreadMail");
    12 
    13         // OUTLOOK程序名
    14         const LPCTSTR OUTLOOK_NAME = _T("OUTLOOK.EXE");
    15 
    16         // OUTLOOK EXPRESS程序名
    17         const LPCTSTR EXPRESS_NAME = _T("OUTLOOK EXPRESS");
    18 
    19         // FOXMAIL程序名
    20         const LPCTSTR FOXMAIL_NAME = _T("FOXMAIL.EXE");
    21 
    22         // FOXMAIL帐号文件名
    23         const LPCTSTR FOXMAIL_ACCOUNT_FILENAME = _T("Account.stg");
    24 
    25         // FOXMAIL帐号开始标志
    26         const LPCTSTR FOXMAIL_ACCOUNT_FLAG = _T("MailAddress="); 
     1         // 引号
     2         const TCHAR CHAR_QUOTATION = _T('"');
     3 
     4         // 星号
     5         const TCHAR CHAR_ASTERISK = _T('*');
     6 
     7         // 点
     8         const TCHAR CHAR_DOT = _T('.');
     9 
    10         // 百分号字符
    11         const TCHAR CHAR_PERCENT_SIGN = _T('%');
    12 
    13         // 下划线字符
    14         const TCHAR CHAR_UNDERLINE = _T('_');
    15 
    16         // 反斜线
    17         const TCHAR CHAR_BACKSLASH = _T('\');
      1 CString GetWMIInformation(const CString& strClass, const CString& strKeyName,
      2             const CString& strFields, bool blScalar)
      3         {
      4             CString strResult;
      5 
      6             //--------------------------------------
      7             // 整理域名
      8             //--------------------------------------
      9             CString strRealFields(strFields);
     10             if(strRealFields.IsEmpty())
     11             {
     12                 strRealFields = CHAR_ASTERISK;
     13             }
     14 
     15             strRealFields.Remove(CHAR_SPACE);
     16 
     17             CStringArray oFieldArray;
     18             CString strRealKey(strKeyName);
     19             CString strTemp(strRealFields);
     20             if(strTemp.Compare(CString(CHAR_ASTERISK)) != 0)
     21             {
     22                 int nPos = 0;
     23                 CString strSplit(CHAR_COMMA);
     24                 CString strToken(strTemp.Tokenize(strSplit, nPos));
     25                 
     26                 while(!strToken.IsEmpty())
     27                 {
     28                     oFieldArray.Add(strToken);
     29                     strToken = strTemp.Tokenize(strSplit, nPos);
     30                 }
     31 
     32                 if(strRealKey.IsEmpty() && (oFieldArray.GetSize() > 0))
     33                 {
     34                     strRealKey = oFieldArray.ElementAt(0);
     35                 }
     36             }
     37 
     38             IWbemLocator *pWbemLocator = NULL;
     39             IWbemServices *pWbemServices = NULL;
     40             IEnumWbemClassObject *pEnumClassObject = NULL;
     41             IWbemClassObject *pClassObject = NULL; 
     42             do
     43             {
     44                 // 创建COM进程
     45                 if(CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL,
     46                     CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown,
     47                     reinterpret_cast<void**>(&pWbemLocator)) != S_OK)
     48                 {
     49                     ASSERT(false);
     50                     break;
     51                 }
     52 
     53                 // 连接服务器
     54                 if(pWbemLocator->ConnectServer(WBEMSERVICES_NAME,
     55                     NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices) != S_OK)
     56                 {
     57                     break;
     58                 }
     59 
     60                 strTemp.Format(WQL_SENTENCE_FORMAT, strRealFields, strClass);
     61                 BSTR bstrQuery(strTemp.AllocSysString());
     62 
     63                 // WQL查询
     64                 if(pWbemServices->ExecQuery(QUERY_LANGUAGE, bstrQuery,
     65                     WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumClassObject) != S_OK)
     66                 {
     67                     break;
     68                 }
     69 
     70                 // 释放BSTR字符串
     71                 SysFreeString(bstrQuery);
     72 
     73                 // 枚举类对象复位
     74                 if(pEnumClassObject->Reset() != S_OK)
     75                 {
     76                     break;
     77                 }
     78 
     79                 ULONG ulCount = 1;
     80                 ULONG ulReturned = 0;
     81 
     82                 VARIANT tValue;
     83                 VARIANT tCurVar;
     84                 LONG lIndex = 0;
     85                 BSTR bstrKeyName = NULL;
     86 
     87                 if(blScalar)
     88                 {
     89                     if(pEnumClassObject->Next(WBEM_INFINITE, ulCount, &pClassObject, &ulReturned) == S_OK)
     90                     {
     91                         VariantInit(&tValue);
     92 
     93                         bstrKeyName = strRealKey.AllocSysString();
     94                         if(pClassObject->Get(bstrKeyName, 0, &tValue, NULL, 0) == S_OK)
     95                         {
     96                             if((tValue.vt & VT_ARRAY) == VT_ARRAY)
     97                             {
     98                                 VariantInit(&tCurVar);
     99                                 SafeArrayGetElement(tValue.parray, &lIndex, &tCurVar);
    100 
    101                                 tValue = tCurVar;
    102                             }
    103 
    104                             if(tValue.vt == VT_BSTR)
    105                             {
    106                                 strResult = (LPCTSTR)_bstr_t(tValue);
    107                             }
    108                         }
    109 
    110                         // 释放BSTR字符串
    111                         SysFreeString(bstrKeyName);
    112 
    113                     }
    114                 }
    115                 else
    116                 {
    117                     int nFieldCount = 0;
    118                     int nFieldSize = oFieldArray.GetSize();
    119 
    120                     long lLBound = 0;
    121                     long lUBound = 0;
    122 
    123                     // 循环查询
    124                     while(pEnumClassObject->Next(WBEM_INFINITE, ulCount, &pClassObject, &ulReturned) == S_OK) 
    125                     {
    126                         for(nFieldCount = 0; nFieldCount < nFieldSize; nFieldCount++)
    127                         {
    128                             VariantInit(&tValue); 
    129                             bstrKeyName = oFieldArray.ElementAt(nFieldCount).AllocSysString();
    130 
    131                             // 查找各个域名
    132                             if(pClassObject->Get(bstrKeyName, 0, &tValue, NULL, 0) == S_OK) 
    133                             { 
    134                                 if((tValue.vt & VT_ARRAY) == VT_ARRAY)
    135                                 {
    136                                     SafeArrayGetLBound(tValue.parray, 1, &lLBound);
    137                                     SafeArrayGetUBound(tValue.parray, 1, &lUBound);
    138 
    139                                     for(lIndex = lLBound; lIndex <= lUBound; lIndex++)
    140                                     {
    141                                         VariantInit(&tCurVar);
    142                                         SafeArrayGetElement(tValue.parray, &lIndex, &tCurVar);
    143 
    144                                         if(tCurVar.vt == VT_BSTR)
    145                                         {
    146                                             if(lIndex == lLBound)
    147                                             {
    148                                                 strResult += (LPCTSTR)_bstr_t(tValue);
    149                                             }
    150                                             else
    151                                             {
    152                                                 strResult = strResult + CHAR_VLINE + (LPCTSTR)_bstr_t(tValue);
    153                                             }
    154                                         }
    155                                     }
    156 
    157                                     strResult += CHAR_TAB;
    158                                 }
    159                                 else if((tValue.vt == VT_EMPTY) || (tValue.vt == VT_NULL))
    160                                 {
    161                                     strResult = strResult + STR_NULL + CHAR_TAB;
    162                                 }
    163                                 else if(tValue.vt == VT_BSTR)
    164                                 {
    165                                     strResult = strResult + (LPCTSTR)_bstr_t(tValue) + CHAR_TAB;
    166                                 }
    167                             }
    168 
    169                             // 释放BSTR字符串
    170                             SysFreeString(bstrKeyName);
    171                         }
    172 
    173                         strResult += STR_CRLF;
    174                     }
    175                 }
    176             } while(false);
    177 
    178             if(pClassObject != NULL)
    179             {
    180                 pClassObject-> Release();
    181             }
    182 
    183             if(pEnumClassObject != NULL)
    184             {
    185                 pEnumClassObject-> Release();
    186             }
    187 
    188             if(pWbemServices != NULL)
    189             {
    190                 pWbemServices-> Release();
    191             }
    192 
    193             if(pWbemLocator != NULL)
    194             {
    195                 pWbemLocator-> Release();
    196             }
    197             return strResult; 
    198         }
     1         CString GetRegFirstSubKeyName(HKEY hKeyParent, LPCTSTR szKeyName)
     2         {
     3             CString strResult;
     4 
     5             do
     6             {
     7                 CRegKey oRegKey;
     8 
     9                 // 打开注册表项
    10                 if(oRegKey.Open(hKeyParent, szKeyName, KEY_READ) != ERROR_SUCCESS)
    11                 {
    12                     break;
    13                 }
    14 
    15                 TCHAR szTemp[MAX_PATH];
    16                 memset(szTemp, 0, sizeof(szTemp));
    17 
    18                 // 枚举所有的子项
    19                 DWORD dwLength = MAX_PATH;
    20                 if(oRegKey.EnumKey(0, szTemp, &dwLength) != ERROR_SUCCESS)
    21                 {
    22                     oRegKey.Close();
    23                     break;
    24                 }
    25 
    26                 strResult = szTemp;
    27                 oRegKey.Close();
    28 
    29             } while(false);
    30 
    31             return strResult;
    32         }
     1     // 初始化COM库
     2     CoInitializeEx(0,COINIT_APARTMENTTHREADED);
     3     // 初始化权限
     4     HRESULT hResult = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
     5         RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
     6     if((hResult != S_OK) && (hResult != RPC_E_TOO_LATE))
     7     { 
     8         ASSERT(FALSE);
     9         TRACE(_T("Failed to initialize COM Security!"));
    10         Log4cxx(LOG4CXX__ERROR, MODULE_NAME, _T("Failed to initialize COM Security!"));
    11     }
    12 
    13 。。。
    14 
    15     // 关闭COM库
    16     CoUninitialize();
    •  获取default Email
     1         CString GetDefaultMailAgent()
     2         {
     3             CString strResult;
     4 
     5             do
     6             {
     7                 CRegKey oRegKey;
     8 
     9                 // 打开注册表项
    10                 if(oRegKey.Open(HKEY_CLASSES_ROOT, MAIL_AGENT_REGKEY, KEY_READ) != ERROR_SUCCESS)
    11                 {
    12                     break;
    13                 }
    14 
    15                 TCHAR szTemp[MAX_PATH];
    16                 memset(szTemp, 0, sizeof(szTemp));
    17 
    18                 // 查询邮件代理
    19                 DWORD dwLength = MAX_PATH;
    20                 if(oRegKey.QueryStringValue(NULL, szTemp, &dwLength) != ERROR_SUCCESS)
    21                 {
    22                     oRegKey.Close();
    23                     break;
    24                 }
    25 
    26                 strResult = szTemp;
    27                 oRegKey.Close();
    28 
    29             } while(false);
    30 
    31             return strResult;
    32         }
     1         CString GetOutlookExpressEmails()
     2         {
     3             CString strResult;
     4 
     5             do
     6             {
     7                 CRegKey oRegKey;
     8                 CRegKey oSubKey;
     9 
    10                 // 打开注册表项
    11                 if(oRegKey.Open(HKEY_CURRENT_USER, INTERNET_ACCOUNTS_REGKEY, KEY_READ) != ERROR_SUCCESS)
    12                 {
    13                     break;
    14                 }
    15 
    16                 DWORD dwIndex = 0;
    17                 DWORD dwLength = 0;
    18 
    19                 TCHAR szTemp[MAX_PATH];
    20                 memset(szTemp, 0, sizeof(szTemp));
    21 
    22                 do
    23                 {
    24                     // 枚举所有的子项
    25                     dwLength = MAX_PATH;
    26                     if(oRegKey.EnumKey(dwIndex, szTemp, &dwLength) != ERROR_SUCCESS)
    27                     {
    28                         break;
    29                     }
    30 
    31                     dwIndex++;
    32 
    33                     // 打开子项
    34                     if(oSubKey.Open(HKEY_CURRENT_USER,
    35                         CString(INTERNET_ACCOUNTS_REGKEY) + CHAR_BACKSLASH + szTemp, KEY_READ) != ERROR_SUCCESS)
    36                     {
    37                         continue;
    38                     }
    39 
    40                     // 查询SMTP
    41                     dwLength = MAX_PATH;
    42                     if(oSubKey.QueryStringValue(SMTP_VALUE_NAME, szTemp, &dwLength) != ERROR_SUCCESS)
    43                     {
    44                         oSubKey.Close();
    45                         continue;
    46                     }
    47 
    48                     strResult = szTemp;
    49                     oSubKey.Close();
    50                     break;
    51 
    52                 } while(true);
    53 
    54                 // 关闭注册表项
    55                 oRegKey.Close();
    56 
    57             } while(false);
    58 
    59             return strResult;
    60         }
     1         CString GetFoxmailUserInfo(const CString &strMailAgent)
     2         {
     3             CString strResult;
     4 
     5             // 去除引号,获取执行文件的路径
     6             CString strPath(strMailAgent);
     7             strPath.Remove(CHAR_QUOTATION);
     8             strPath = strPath.Left(strPath.ReverseFind(CHAR_BACKSLASH) + 1);
     9 
    10             // 查找文件
    11             CFileFind oFind;
    12             BOOL blFind = oFind.FindFile(strPath + CHAR_ASTERISK + CHAR_DOT + CHAR_ASTERISK);
    13 
    14             CFile oAccountFile;
    15             CString strContent;
    16 
    17             int nStartPos = 0;
    18             int nEndPos = 0;
    19             char *szBuffer = NULL;
    20             unsigned int unLength = 0;
    21 
    22             while(blFind)
    23             {
    24                 // 查找下一个文件
    25                 blFind = oFind.FindNextFile();
    26 
    27                 // 只要目录
    28                 if(oFind.IsDots() || !oFind.IsDirectory())
    29                 {
    30                     continue;
    31                 }
    32 
    33                 // 打开帐号文件
    34                 if(!oAccountFile.Open(oFind.GetFilePath() + CHAR_BACKSLASH + FOXMAIL_ACCOUNT_FILENAME, CFile::modeRead))
    35                 {
    36                     continue;
    37                 }
    38 
    39                 // 分配缓冲区
    40                 unLength = static_cast<unsigned int>(oAccountFile.GetLength());
    41                 szBuffer = new char[unLength + 1];
    42 
    43                 try
    44                 {
    45                     // 读出文件内容
    46                     oAccountFile.Read(szBuffer, unLength);
    47                     oAccountFile.Close();
    48 
    49                     szBuffer[unLength] = 0;
    50 
    51                     // 转换为字符串
    52                     strContent = (LPCTSTR)_bstr_t(szBuffer);
    53                 }
    54                 catch(CFileException *poException)
    55                 {
    56                     oAccountFile.Abort();
    57 
    58                     poException->Delete();
    59                 }
    60 
    61                 delete []szBuffer;
    62 
    63                 // 查找开始标志
    64                 nStartPos = strContent.Find(FOXMAIL_ACCOUNT_FLAG);
    65 
    66                 if(nStartPos < 0)
    67                 {
    68                     continue;
    69                 }
    70 
    71                 // 查找结束标志
    72                 nStartPos += _tcslen(FOXMAIL_ACCOUNT_FLAG);
    73                 nEndPos = strContent.Find(STR_CRLF, nStartPos);
    74 
    75                 if(nEndPos < 0)
    76                 {
    77                     continue;
    78                 }
    79 
    80                 if(strResult.IsEmpty())
    81                 {
    82                     // 取得第一个帐号
    83                     strResult = strContent.Mid(nStartPos, nEndPos - nStartPos);
    84                 }
    85                 else
    86                 {
    87                     // 后续帐号,用逗号分隔开
    88                     strResult = strResult + CHAR_COMMA + strContent.Mid(nStartPos, nEndPos - nStartPos);
    89                 }
    90             }
    91 
    92             oFind.Close();
    93 
    94             return strResult;
    95         }
     1         CString GetDefaultEmail()
     2         {
     3             CString strResult;
     4 
     5             CString strMailAgent(GetDefaultMailAgent());
     6             strMailAgent.MakeUpper();
     7 
     8             CString strDefault(GetRegFirstSubKeyName(HKEY_CURRENT_USER, UNREAD_MAIL_REGKEY));
     9 
    10             // OUTLOOK
    11             if(strMailAgent.Find(OUTLOOK_NAME) >= 0)
    12             {
    13                 strResult = strDefault;
    14             }
    15             // OUTLOOK EXPRESS
    16             else if(strMailAgent.Find(EXPRESS_NAME) >= 0)
    17             {
    18                 strResult = GetOutlookExpressEmails();
    19             }
    20             // FOXMAIL
    21             else if(strMailAgent.Find(FOXMAIL_NAME) >= 0)
    22             {
    23                 strResult = GetFoxmailUserInfo(strMailAgent);
    24             }
    25             
    26             if(strResult.IsEmpty())
    27             {
    28                 strResult = strDefault;
    29             }
    30 
    31             return strResult;
    32         }
    • 获取 userName
    1         CString GetSysUserName()
    2         {
    3             return GetWMIInformation(SYSINFO_CLASS, USERNAME_KEY, CString(CHAR_ASTERISK), true);
    4         }
    • 获取 domain
    1         CString GetDomain()
    2         {
    3             return GetWMIInformation(SYSINFO_CLASS, DOMAIN_KEY, CString(CHAR_ASTERISK), true);
    4         }
    • 获取 manufacturer
    1         CString GetManufacturer()
    2         {
    3             return GetWMIInformation(SYSINFO_CLASS, MANUFACTURER_KEY, CString(CHAR_ASTERISK), true);
    4         }
    • 获取 model
     1         CString GetModel()
     2         {
     3             return GetWMIInformation(SYSINFO_CLASS, MODEL_KEY, CString(CHAR_ASTERISK), true);
     4         }
     5 
          // 获得 笔记本 还是 台式机 6 CString GetPCType() 7 { 8 CString strResult(""); 9 HDEVINFO hDevInfo; 10 SP_DEVINFO_DATA DeviceInfoData; 11 DWORD i; 12 // Create a HDEVINFO with all present devices. 13 hDevInfo = SetupDiGetClassDevs(NULL,0,0,DIGCF_PRESENT | DIGCF_ALLCLASSES ); 14 15 // Insert error handling here. 16 if (hDevInfo == INVALID_HANDLE_VALUE) 17 return strResult; 18 19 // Enumerate through all devices in Set. 20 TCHAR buffer[4096]={0}; 21 DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); 22 for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++) 23 { 24 DWORD DataT; 25 DWORD buffersize = 4096; 26 27 // 28 // Call function with null to begin with, 29 // then use the returned buffer size 30 // to Alloc the buffer. Keep calling until 31 // success or an unknown failure. 32 // 33 SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,SPDRP_HARDWAREID,&DataT,(PBYTE)buffer,buffersize,&buffersize); 34 35 if( wcscmp(buffer, L"ACPI//PNP0000")==0 ) 36 { 37 SetupDiDestroyDeviceInfoList(hDevInfo); 38 return _T("笔记本"); 39 } 40 } 41 if ( GetLastError()!=NO_ERROR &&GetLastError()!=ERROR_NO_MORE_ITEMS ) 42 return strResult; 43 // Cleanup 44 SetupDiDestroyDeviceInfoList(hDevInfo); 45 return _T("台式机"); 46 }
    GetPCType()+GetModel();
    • 获取OSUser (即本机登录用户名称)
     1         CString GetOSUser()
     2         {
     3             CString strResult;
     4 
     5             TCHAR szUserName[UNLEN + 1];
     6             memset(szUserName, 0, sizeof(szUserName));
     7 
     8             DWORD dwSize = UNLEN + 1;
     9             if(::GetUserName(szUserName, &dwSize))
    10             {
    11                 strResult = szUserName;
    12             }
    13 
    14             return strResult;
    15         }
    • 获取IEVesion
     1         CString GetIEVersion()
     2         {
     3             LONG LResult;
     4             HKEY hKey;
     5             CString returnResult("Not Found");
     6             LPCTSTR StrKey=_T("Software\Microsoft\Internet Explorer");
     7             LResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,StrKey,NULL,KEY_READ,&hKey);
     8             if (ERROR_SUCCESS==LResult)
     9             {
    10                 DWORD dwSize=500,dwType=REG_SZ;
    11                 TCHAR szVersion[500]={0};
    12                 //先检查svcVersion
    13                 LPCTSTR KeyValueSVC= _T("svcVersion");
    14                 LResult=RegQueryValueEx(hKey,KeyValueSVC,0,&dwType,(LPBYTE)szVersion,&dwSize);
    15                 if (ERROR_SUCCESS!=LResult)
    16                 {
    17                     //如没有svcVersion,在检查Version
    18                     LPCTSTR KeyValue=_T("Version");
    19                     LResult=RegQueryValueEx(hKey,KeyValue,0,&dwType,(LPBYTE)szVersion,&dwSize);
    20                     if(ERROR_SUCCESS!=LResult)
    21                     {
    22                         RegCloseKey(hKey);
    23                         returnResult.Empty();
    24                         return returnResult;
    25                     }
    26                 }    
    27                 returnResult=szVersion;
    28                 RegCloseKey(hKey);
    29                 ZeroMemory(szVersion, dwSize);
    30                 return returnResult;
    31             }else
    32             {
    33                 returnResult.Empty();
    34                 return returnResult;
    35             }
    36         }
    • 获取FlashVesion
     1         CString GetFLASHVersion()
     2         {
     3             LONG LResult;
     4             HKEY hKey;
     5             CString returnResult("Not Found");
     6             LPCTSTR StrKey=_T("Software\Macromedia\FlashPlayer");
     7             LResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,StrKey,NULL,KEY_READ,&hKey);
     8             if (ERROR_SUCCESS==LResult)
     9             {
    10                 DWORD dwSize=500,dwType=REG_SZ;
    11                 TCHAR szVersion[500]={0};
    12                 LPCTSTR KeyValue=_T("CurrentVersion");
    13                 LResult=RegQueryValueEx(hKey,KeyValue,0,&dwType,(LPBYTE)szVersion,&dwSize);
    14                 RegCloseKey(hKey);
    15                 if (ERROR_SUCCESS!=LResult)
    16                 {
    17                     returnResult.Empty();
    18                     return returnResult;
    19                 }    
    20                 else
    21                     returnResult=szVersion;
    22 
    23                 ZeroMemory(szVersion, dwSize);
    24                 return returnResult;
    25             }else
    26             {
    27                 returnResult.Empty();
    28                 return returnResult;
    29             }
    30         }
    • 获取ExcelVesion
     1         CString GetExcelVersion()
     2         {
     3             CString returnResult("");
     4             HKEY hKey;
     5             LONG lResult = 0L;
     6             TCHAR szKey11[128] = _T("Software\Microsoft\Office\11.0\Excel\Options");
     7             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey11, 0, KEY_READ, &hKey);
     8             if (ERROR_SUCCESS == lResult) 
     9                 returnResult+=_T("2003");
    10 
    11             TCHAR szKey12[128] = _T("Software\Microsoft\Office\12.0\Excel\Options");
    12             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey12, 0, KEY_READ, &hKey);
    13             if (ERROR_SUCCESS == lResult) 
    14             {    
    15                 if(!returnResult.IsEmpty())
    16                     returnResult+=_T(",");
    17                 returnResult+=_T("2007");
    18             }
    19 
    20             TCHAR szKey14[128] = _T("Software\Microsoft\Office\14.0\Excel\Options");
    21             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey14, 0, KEY_READ, &hKey);
    22             if (ERROR_SUCCESS == lResult) 
    23             {    
    24                 if(!returnResult.IsEmpty())
    25                     returnResult+=_T(",");
    26                 returnResult+=_T("2010");
    27             }
    28 
    29             TCHAR szKey15[128] = _T("Software\Microsoft\Office\15.0\Excel\Options");
    30             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey15, 0, KEY_READ, &hKey);
    31             if (ERROR_SUCCESS == lResult) 
    32             {    
    33                 if(!returnResult.IsEmpty())
    34                     returnResult+=_T(",");
    35                 returnResult+=_T("2013");
    36             }
    37 
    38             if(returnResult.IsEmpty())
    39                 returnResult+=_T("Not Found");
    40             return returnResult;
    41         }
    • 获取当前ExcelVesion
     1         CString GetCurrentExcelVersion()
     2         {
     3             CString returnResult("Not Found");
     4             HKEY hKey;
     5             LONG lResult = 0L;
     6 
     7             TCHAR szKey[128] = {_T("Excel.Application\CurVer")};
     8 
     9             lResult = RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &hKey);
    10             if (ERROR_SUCCESS != lResult) 
    11                 return returnResult;
    12 
    13             TCHAR szVersion[500]={0};
    14             DWORD lengthVersion=500,dwType=REG_SZ;
    15             lResult = RegQueryValueEx(hKey, NULL,0,&dwType,(LPBYTE)szVersion, &lengthVersion);
    16             RegCloseKey(hKey);
    17             if (ERROR_SUCCESS != lResult) 
    18                 return returnResult;
    19 
    20             PTCHAR pszVersionNumber = _tcsrchr(szVersion, _T('.'));
    21             PTCHAR pVersion = (pszVersionNumber + 1);
    22             returnResult = pVersion;
    23              ZeroMemory(szVersion, lengthVersion);
    24             if(StrCmp(returnResult,_T("11"))==0)
    25                 returnResult=_T("2003");
    26             else if(StrCmp(returnResult,_T("12"))==0)
    27                 returnResult=_T("2007");
    28             else    if(StrCmp(returnResult,_T("14"))==0)
    29                 returnResult=_T("2010");
    30             else    if(StrCmp(returnResult,_T("15"))==0)
    31                 returnResult=_T("2013");
    32             return returnResult;
    33         }
    • 获取MatlablVesion
      1         CString GetMatlabVersion()
      2         {
      3             CString returnResult("");
      4             HKEY hKey;
      5             LONG lResult = 0L;
      6             TCHAR szKey1[128] = _T("SOFTWARE\MathWorks\MATLAB\6.0");
      7             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey1, 0, KEY_READ, &hKey);
      8             if (ERROR_SUCCESS == lResult) 
      9                 returnResult+=_T("R12");
     10 
     11             TCHAR szKey2[128] = _T("SOFTWARE\MathWorks\MATLAB\6.1");
     12             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey2, 0, KEY_READ, &hKey);
     13             if (ERROR_SUCCESS == lResult) 
     14             {    
     15                 if(!returnResult.IsEmpty())
     16                     returnResult+=_T(",");
     17                 returnResult+=_T("R12.1");
     18             }
     19 
     20             TCHAR szKey3[128] = _T("SOFTWARE\MathWorks\MATLAB\6.5");
     21             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey3, 0, KEY_READ, &hKey);
     22             if (ERROR_SUCCESS == lResult) 
     23             {    
     24                 if(!returnResult.IsEmpty())
     25                     returnResult+=_T(",");
     26                 returnResult+=_T("R13");
     27             }
     28 
     29             TCHAR szKey4[128] = _T("SOFTWARE\MathWorks\MATLAB\6.5.1");
     30             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey4, 0, KEY_READ, &hKey);
     31             if (ERROR_SUCCESS == lResult) 
     32             {    
     33                 if(!returnResult.IsEmpty())
     34                     returnResult+=_T(",");
     35                 returnResult+=_T("R13SP1");
     36             }
     37 
     38             TCHAR szKey5[128] = _T("SOFTWARE\MathWorks\MATLAB\6.5.2");
     39             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey5, 0, KEY_READ, &hKey);
     40             if (ERROR_SUCCESS == lResult) 
     41             {    
     42                 if(!returnResult.IsEmpty())
     43                     returnResult+=_T(",");
     44                 returnResult+=_T("R13SP2");
     45             }
     46 
     47             TCHAR szKey6[128] = _T("SOFTWARE\MathWorks\MATLAB\7");
     48             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey6, 0, KEY_READ, &hKey);
     49             if (ERROR_SUCCESS == lResult) 
     50             {    
     51                 if(!returnResult.IsEmpty())
     52                     returnResult+=_T(",");
     53                 returnResult+=_T("R14");
     54             }
     55 
     56             TCHAR szKey7[128] = _T("SOFTWARE\MathWorks\MATLAB\7.0.1");
     57             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey7, 0, KEY_READ, &hKey);
     58             if (ERROR_SUCCESS == lResult) 
     59             {    
     60                 if(!returnResult.IsEmpty())
     61                     returnResult+=_T(",");
     62                 returnResult+=_T("R14SP1");
     63             }
     64 
     65             TCHAR szKey8[128] = _T("SOFTWARE\MathWorks\MATLAB\7.0.4");
     66             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey8, 0, KEY_READ, &hKey);
     67             if (ERROR_SUCCESS == lResult) 
     68             {    
     69                 if(!returnResult.IsEmpty())
     70                     returnResult+=_T(",");
     71                 returnResult+=_T("R14SP2");
     72             }
     73 
     74             TCHAR szKey9[128] = _T("SOFTWARE\MathWorks\MATLAB\7.1");
     75             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey9, 0, KEY_READ, &hKey);
     76             if (ERROR_SUCCESS == lResult) 
     77             {    
     78                 if(!returnResult.IsEmpty())
     79                     returnResult+=_T(",");
     80                 returnResult+=_T("R14SP3");
     81             }
     82 
     83             TCHAR szKey10[128] = _T("SOFTWARE\MathWorks\MATLAB\7.2");
     84             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey10, 0, KEY_READ, &hKey);
     85             if (ERROR_SUCCESS == lResult) 
     86             {    
     87                 if(!returnResult.IsEmpty())
     88                     returnResult+=_T(",");
     89                 returnResult+=_T("R2006a");
     90             }
     91 
     92             TCHAR szKey11[128] = _T("SOFTWARE\MathWorks\MATLAB\7.3");
     93             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey11, 0, KEY_READ, &hKey);
     94             if (ERROR_SUCCESS == lResult) 
     95             {    
     96                 if(!returnResult.IsEmpty())
     97                     returnResult+=_T(",");
     98                 returnResult+=_T("R2006b");
     99             }
    100 
    101             TCHAR szKey12[128] = _T("SOFTWARE\MathWorks\MATLAB\7.4");
    102             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey12, 0, KEY_READ, &hKey);
    103             if (ERROR_SUCCESS == lResult) 
    104             {    
    105                 if(!returnResult.IsEmpty())
    106                     returnResult+=_T(",");
    107                 returnResult+=_T("R2007a");
    108             }
    109 
    110             TCHAR szKey13[128] = _T("SOFTWARE\MathWorks\MATLAB\7.5");
    111             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey13, 0, KEY_READ, &hKey);
    112             if (ERROR_SUCCESS == lResult) 
    113             {    
    114                 if(!returnResult.IsEmpty())
    115                     returnResult+=_T(",");
    116                 returnResult+=_T("R2007b");
    117             }
    118 
    119             TCHAR szKey14[128] = _T("SOFTWARE\MathWorks\MATLAB\7.6");
    120             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey14, 0, KEY_READ, &hKey);
    121             if (ERROR_SUCCESS == lResult) 
    122             {    
    123                 if(!returnResult.IsEmpty())
    124                     returnResult+=_T(",");
    125                 returnResult+=_T("R2008a");
    126             }
    127 
    128             TCHAR szKey15[128] = _T("SOFTWARE\MathWorks\MATLAB\7.7");
    129             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey15, 0, KEY_READ, &hKey);
    130             if (ERROR_SUCCESS == lResult) 
    131             {    
    132                 if(!returnResult.IsEmpty())
    133                     returnResult+=_T(",");
    134                 returnResult+=_T("R2008b");
    135             }
    136 
    137             TCHAR szKey16[128] = _T("SOFTWARE\MathWorks\MATLAB\7.8");
    138             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey16, 0, KEY_READ, &hKey);
    139             if (ERROR_SUCCESS == lResult) 
    140             {    
    141                 if(!returnResult.IsEmpty())
    142                     returnResult+=_T(",");
    143                 returnResult+=_T("R2009a");
    144             }
    145 
    146             TCHAR szKey17[128] = _T("SOFTWARE\MathWorks\MATLAB\7.9");
    147             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey17, 0, KEY_READ, &hKey);
    148             if (ERROR_SUCCESS == lResult) 
    149             {    
    150                 if(!returnResult.IsEmpty())
    151                     returnResult+=_T(",");
    152                 returnResult+=_T("R2009b");
    153             }
    154 
    155             TCHAR szKey18[128] = _T("SOFTWARE\MathWorks\MATLAB\7.10");
    156             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey18, 0, KEY_READ, &hKey);
    157             if (ERROR_SUCCESS == lResult) 
    158             {    
    159                 if(!returnResult.IsEmpty())
    160                     returnResult+=_T(",");
    161                 returnResult+=_T("R2010a");
    162             }
    163 
    164             TCHAR szKey19[128] = _T("SOFTWARE\MathWorks\MATLAB\7.12");
    165             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey19, 0, KEY_READ, &hKey);
    166             if (ERROR_SUCCESS == lResult) 
    167             {    
    168                 if(!returnResult.IsEmpty())
    169                     returnResult+=_T(",");
    170                 returnResult+=_T("R2011a");
    171             }
    172 
    173             TCHAR szKey20[128] = _T("SOFTWARE\MathWorks\MATLAB\7.13");
    174             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey20, 0, KEY_READ, &hKey);
    175             if (ERROR_SUCCESS == lResult) 
    176             {    
    177                 if(!returnResult.IsEmpty())
    178                     returnResult+=_T(",");
    179                 returnResult+=_T("R2011b");
    180             }
    181 
    182             TCHAR szKey21[128] = _T("SOFTWARE\MathWorks\MATLAB\7.14");
    183             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey21, 0, KEY_READ, &hKey);
    184             if (ERROR_SUCCESS == lResult) 
    185             {    
    186                 if(!returnResult.IsEmpty())
    187                     returnResult+=_T(",");
    188                 returnResult+=_T("R2012a");
    189             }
    190 
    191             TCHAR szKey22[128] = _T("SOFTWARE\MathWorks\MATLAB\8.0");
    192             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey22, 0, KEY_READ, &hKey);
    193             if (ERROR_SUCCESS == lResult) 
    194             {    
    195                 if(!returnResult.IsEmpty())
    196                     returnResult+=_T(",");
    197                 returnResult+=_T("R2012b");
    198             }
    199 
    200             TCHAR szKey23[128] = _T("Software\MathWorks\MATLAB\8.1");
    201             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey23, 0, KEY_READ, &hKey);
    202             if (ERROR_SUCCESS == lResult) 
    203             {    
    204                 if(!returnResult.IsEmpty())
    205                     returnResult+=_T(",");
    206                 returnResult+=_T("R2013a");
    207             }
    208 
    209             TCHAR szKey24[128] = _T("SOFTWARE\MathWorks\MATLAB\8.2");
    210             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey24, 0, KEY_READ, &hKey);
    211             if (ERROR_SUCCESS == lResult) 
    212             {    
    213                 if(!returnResult.IsEmpty())
    214                     returnResult+=_T(",");
    215                 returnResult+=_T("R2013b");
    216             }
    217 
    218             TCHAR szKey25[128] = _T("SOFTWARE\MathWorks\MATLAB\8.3");
    219             lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szKey25, 0, KEY_READ, &hKey);
    220             if (ERROR_SUCCESS == lResult) 
    221             {    
    222                 if(!returnResult.IsEmpty())
    223                     returnResult+=_T(",");
    224                 returnResult+=_T("R2014a");
    225             }
    226             if(returnResult.IsEmpty())
    227                 returnResult+=_T("Not Found");
    228             return returnResult;
    229         }
    • 获取MatlablVesion
     1         CString GetWPSVersion()
     2         {
     3             LONG LResult;
     4             HKEY hKey;
     5             CString returnResult("Not Found");
     6             LPCTSTR StrKey=_T("Software\Kingsoft\Office\6.0\Common");
     7             LResult=RegOpenKeyEx(HKEY_CURRENT_USER,StrKey,NULL,KEY_READ,&hKey);
     8             if (ERROR_SUCCESS==LResult)
     9             {
    10                 DWORD dwSize=500,dwType=REG_SZ;
    11                 TCHAR szVersion[500]={0};
    12                 LPCTSTR KeyValue=_T("Version");
    13                 LResult=RegQueryValueEx(hKey,KeyValue,0,&dwType,(LPBYTE)szVersion,&dwSize);
    14                 RegCloseKey(hKey);
    15                 if (ERROR_SUCCESS!=LResult)
    16                 {
    17                     returnResult.Empty();
    18                     return returnResult;
    19                 }    
    20                 else
    21                     returnResult=szVersion;
    22 
    23                 ZeroMemory(szVersion, dwSize);
    24                 return returnResult;
    25             }else
    26             {
    27                 returnResult.Empty();
    28                 return returnResult;
    29             }
    30         }
    • 获取所有monitor的 PelsWidth*PelsHeight
     1         CString GetMonitor()
     2         {
     3             CString strResult;
     4             DISPLAY_DEVICE dd;
     5             memset(&dd, 0, sizeof(DISPLAY_DEVICE));
     6             dd.cb = sizeof(DISPLAY_DEVICE);
     7             BOOL bFlag = TRUE;
     8             DWORD i = 0;
     9             int nCount = 1;
    10             do
    11             {
    12                 bFlag = EnumDisplayDevices(NULL, i, &dd, 0);
    13                 if (bFlag)
    14                 {
    15                     if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
    16                     {
    17                         DEVMODE dm;
    18                         memset(&dm, 0, sizeof(DEVMODE));
    19                         dm.dmSize = sizeof(DEVMODE);
    20                         if (EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm))
    21                         {
    22                             CString strTemp;
    23                             TCHAR szTemp[MAX_PATH];
    24                             memset(szTemp, 0, sizeof(szTemp));
    25                             wsprintf(szTemp, _T("%d,%d*%d;"), nCount, dm.dmPelsWidth, dm.dmPelsHeight);
    26                             strTemp = szTemp;
    27                             strResult += strTemp;
    28                         }
    29                         nCount++;
    30                     }
    31                     i++;
    32                 }
    33             }while(bFlag);
    34             return strResult;
    35         }
    • 获取操作系统信息,如操作系统名称、操作系统语言操作系统位数
    // 安全的取得真实系统信息
    1
    VOID SafeGetNativeSystemInfo(__out LPSYSTEM_INFO lpSystemInfo) 2 { 3 if (NULL==lpSystemInfo) 4 return; 5 typedef VOID (WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo); 6 LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress( GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");; 7 if (NULL != fnGetNativeSystemInfo) 8 fnGetNativeSystemInfo(lpSystemInfo); 9 else 10 GetSystemInfo(lpSystemInfo); 11 }
     1         // 获取操作系统位数
     2         CString GetSystemBits()
     3         {
     4             CString strResult("");
     5             int bit;
     6             SYSTEM_INFO si;
     7             SafeGetNativeSystemInfo(&si);
     8             if (si.wProcessorArchitecture == MS_PROCESSOR_ARCHITECTURE_AMD64 ||
     9             si.wProcessorArchitecture == MS_PROCESSOR_ARCHITECTURE_IA64 )
    10                 bit=64;
    11             else
    12                 bit=32;
    13             strResult.Format(_T("%d"), bit);
    14             return strResult;
    15         }
      1         CString GetOSVersion()
      2         {
      3             CString szOSVersion=getOsVersion();  //获得操作系统名称
      4             CString lanVersion("Not Found");
      5             GetLanguageVersion(lanVersion);//操作系统语言
      6             CString lzBit=GetSystemBits(); // 获取操作系统位数
      7             szOSVersion+=_T("/")+lanVersion;
      8             szOSVersion+=_T("/")+lzBit;
      9             szOSVersion+=_T("");
     10             return szOSVersion;
     11         }
     12 
     13         CString getOsVersion()
     14         {
     15             CString strResult;
     16             OSVERSIONINFOEX versionInfo;
     17             //操作系统版本信息结构
     18             versionInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
     19             if(::GetVersionEx((OSVERSIONINFO*)&versionInfo))
     20             {
     21                 CString strName;
     22                 TCHAR szTemp[MAX_PATH];
     23                 memset(szTemp, 0, sizeof(szTemp));
     24                 wsprintf(szTemp,_T("Windows %d.%d"), versionInfo.dwMajorVersion, versionInfo.dwMinorVersion);
     25                 strName = szTemp;
     26                 switch(versionInfo.dwMajorVersion)
     27                 {
     28                 case 4:
     29                     {
     30                         switch(versionInfo.dwMinorVersion)
     31                         {
     32                         case 0:
     33                             {
     34                                 if(versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
     35                                     strName = _T("Windows NT 4.0");
     36                                 else if(versionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
     37                                     strName = _T("Windows 95"); 
     38                                 break;
     39                             }
     40                         case 10:
     41                             {
     42                                 strName = _T("Windows 98"); 
     43                                 break;
     44                             }
     45                         case 90:
     46                             {
     47                                 strName = _T("Windows Me"); 
     48                                 break;
     49                             }
     50                         }
     51                         break;
     52                     }
     53                 case 5:
     54                     {
     55                         switch(versionInfo.dwMinorVersion)
     56                         {
     57                         case 0:
     58                             {
     59                                 strName = _T("Windows 2000");
     60                                 break;
     61                             }
     62                         case 1:
     63                             {
     64                                 strName = _T("Windows XP");
     65                                 break;
     66                             }
     67                         case 2:
     68                             {
     69                                 if(GetSystemMetrics(SM_SERVERR2))
     70                                     strName = _T("Windows Server 2003 R2");
     71                                 else if (VER_SUITE_STORAGE_SERVER == osvi.wSuiteMask)

                          {
                            result = WINDOWS_STORAGE_SERVER_2003;
                          }
                          else if (VER_NT_WORKSTATION == osvi.wProductType
                                && "64" == GetSystemBits())
                          {
                            result = WINDOWS_XP_PROFESSIONAL_X64_EDITION;
                          }

                                     else
     72                                     strName = _T("Windows Server 2003"); 
     73                                 break;
     74                             }
     75                         }
     76                         break;
     77                     }
     78                 case 6:
     79                     {
     80                         switch(versionInfo.dwMinorVersion)
     81                         {
     82                         case 0:
     83                             {
     84                                 if (versionInfo.wProductType == VER_NT_WORKSTATION)
     85                                     strName = _T("Windows Vista");
     86                                 else
     87                                     strName = _T("Windows Server 2008");
     88                                 break;
     89                             }
     90                         case 1:
     91                             {
     92                                 if (versionInfo.wProductType == VER_NT_WORKSTATION)
     93                                     strName = _T("Windows 7");
     94                                 else
     95                                     strName = _T("Windows Server 2008 R2");
     96                                 break;
     97                             }
     98                         case 2:
     99                             {
    100                                 if (versionInfo.wProductType == VER_NT_WORKSTATION)
    101                                     strName = _T("Windows 8");
    102                                 else
    103                                     strName = _T("Windows Server 2012");
    104                                 break;
    105                             }
    106                         case 3:
    107                             {
    108                                 strName = _T("Windows 8.1");
    109                                 break;
    110                             }
    111                         }
    112                         break;
    113                     }
    114                 default:
    115                     {
    116                         break;
    117                     }
    118                 }
    119                 if (versionInfo.szCSDVersion)
    120                 {
    121                     strName += " ";
    122                     strName += versionInfo.szCSDVersion;
    123                 }
    124                 strResult = strName;
    125 
    126             }
    127             return strResult;
    128         }
    129 
    130         void GetLanguageVersion(CString &strName)
    131         {
    132             TCHAR szName[500];
    133             LANGID lid = GetSystemDefaultLangID();
    134             strName.Format(L"系统语言:%d", lid);
    135             //GetLocaleInfo(MAKELCID(MAKELANGID(lid,0),SORT_DEFAULT),LOCALE_SNATIVELANGNAME,szName,100);
    136             //strName=szName;
    137         }
    • 获取CPU的信息,如CPU名称、CPU数
     1         CString GetCPUInfo()
     2         {
     3             CString resultReturn=GetCPU();
     4             CString cpuCountstr=GetCPUCount();
     5             if(!cpuCountstr.IsEmpty())
     6                 resultReturn+=L"\"+cpuCountstr;
     7             return resultReturn;
     8         }
     9 
    10         CString GetCPU()
    11         {
    12             LONG LResult;
    13             HKEY hKey;
    14             CString returnResult("Not Found");
    15             LPCTSTR StrKey=_T("HARDWARE\DESCRIPTION\System\CentralProcessor\0");
    16             LResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,StrKey,NULL,KEY_READ,&hKey);
    17             if (ERROR_SUCCESS==LResult)
    18             {
    19                 DWORD dwSize=500,dwType=REG_SZ;
    20                 TCHAR szVersion[500]={0};
    21                 LPCTSTR KeyValue=_T("ProcessorNameString");
    22                 LResult=RegQueryValueEx(hKey,KeyValue,0,&dwType,(LPBYTE)szVersion,&dwSize);
    23                 RegCloseKey(hKey);
    24                 if (ERROR_SUCCESS!=LResult)
    25                 {
    26                     returnResult.Empty();
    27                     return returnResult;
    28                 }    
    29                 else
    30                     returnResult=szVersion;
    31 
    32                 ZeroMemory(szVersion, dwSize);
    33                 return returnResult;
    34             }else
    35             {
    36                 returnResult.Empty();
    37                 return returnResult;
    38             }
    39         }
    40 
    41         CString GetCPUCount()
    42         {
    43             CString returnResult;
    44             int countCPU=0;
    45             HKEY hKey;
    46             for(int i=0;i<=15;i++) // 有16个的限制
    47             {
    48                 LONG LResult=1;
    49                 CString strPath;
    50                 strPath.Format(L"HARDWARE\DESCRIPTION\System\CentralProcessor\%d",i);
    51                 LResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,strPath,NULL,KEY_READ,&hKey);
    52                 if(ERROR_SUCCESS==LResult)
    53                 {    
    54                     countCPU++;
    55                     RegCloseKey(hKey);
    56                 }
    57             }
    58             if(0!=countCPU)
    59                 returnResult.Format(L"%dx",countCPU);
    60             return returnResult;
    61         }
    • 获取Memory的信息,如
     1         CString GetMemoryStatus()
     2         {
     3             /*修改之前的内存获取方法,通过GlobalMemoryStatusEX来获取,原方法对双核计算机不适用
     4             CString strResult;
     5             MEMORYSTATUS MemoryStatus; 
     6             MemoryStatus.dwLength = sizeof(MEMORYSTATUS);
     7             ::GlobalMemoryStatus(&MemoryStatus);
     8             TCHAR szTemp[MAX_PATH];
     9             memset(szTemp, 0, sizeof(szTemp));
    10             int nTemp = MemoryStatus.dwTotalPhys / 1024 / 1024;
    11             wsprintf(szTemp,_T("%d"), nTemp);
    12             strResult = szTemp;
    13             return strResult;*/
    14             
    15             CString strResult;
    16             MEMORYSTATUSEX statex;
    17             statex.dwLength = sizeof (statex);
    18             GlobalMemoryStatusEx(&statex);
    19             TCHAR szTemp[MAX_PATH];
    20             memset(szTemp, 0, sizeof(szTemp));
    21             int nTemp =  statex.ullTotalPhys/1024/1024;
    22             wsprintf(szTemp,_T("%d"), nTemp);
    23             strResult = szTemp;
    24             return strResult;
    25         }
    •  获取磁盘序列号
     1         // 用WMI查询硬盘的CLASS字符串
     2         const LPCTSTR HARDDISK_CLASS = _T("DiskDrive where index = 0");
     3         // 用WMI查询硬盘序列号的KEY字符串
     4         const LPCTSTR HARDDISK_KEY = _T("PNPDeviceID");
     5 
     6         // 星号
     7         const TCHAR CHAR_ASTERISK = _T('*');
     8         // 下划线字符
     9         const TCHAR CHAR_UNDERLINE = _T('_');
    10         // 空字符串
    11         const LPCTSTR STR_EMPTY = _T("");
    12 
    13         // 从查询到的硬盘序列号中去除的字符串
    14         const LPCTSTR DISKSN_DELETE_STRING = _T("IDE\DISK");
    1         CString GetHardDiskSN()
    2         {
    3             CString strResult(GetWMIInformation(HARDDISK_CLASS, HARDDISK_KEY, CString(CHAR_ASTERISK), true));
    4 
    5             strResult.Remove(CHAR_UNDERLINE);
    6             strResult.Replace(DISKSN_DELETE_STRING, STR_EMPTY);
    7 
    8             return strResult;
    9         }
     1 void CConfigManager::InitDeviceInfo()
     2 {
     3     if(m_bHardwareLoaded)
     4         return;
     5     // 初始化COM库
     6     CoInitializeEx(0,COINIT_APARTMENTTHREADED);
     7     // 初始化权限
     8     HRESULT hResult = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
     9         RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
    10     if((hResult != S_OK) && (hResult != RPC_E_TOO_LATE))
    11     { 
    12         ASSERT(FALSE);
    13         TRACE(_T("Failed to initialize COM Security!"));
    14         Log4cxx(LOG4CXX__ERROR, MODULE_NAME, _T("Failed to initialize COM Security!"));
    15     }
    16     // 获取磁盘序列号
    17     m_strHardDiskSN = GetHardDiskSN();
    20     // 关闭COM库
    21     CoUninitialize();
    22     m_bHardwareLoaded=TRUE;
    23 }
    •  获取磁盘某个盘符的ID的MD5
    1 // 系统根目录名
    2 const LPCTSTR ROOT_PATH_NAME = _T("C:\");
    3 
    4 // 硬盘ID的字符串格式
    5 const LPCTSTR DISKID_FORMAT = _T("%04X-%04X_%s");
     1         // 获取磁盘ID的MD5
     2         TCHAR* szMD5 = GetStringMD5(GetDriverID(ROOT_PATH_NAME));
     3 
     4 
     5         CString GetDriverID(const CString& strDriver)
     6         {
     7             CString strResult;
     8 
     9             DWORD dwVolumeSerialNumber = 0;
    10             DWORD dwMaximumComponentLength = 0;
    11             DWORD dwFileSystemFlags = 0;
    12 
    13             TCHAR szVolumeNameBuffer[MAX_PATH + 1];
    14             TCHAR szFileSystemNameBuffer[MAX_PATH + 1];
    15 
    16             memset(szVolumeNameBuffer, 0, sizeof(szVolumeNameBuffer));
    17             memset(szFileSystemNameBuffer, 0, sizeof(szFileSystemNameBuffer));
    18 
    19             if(::GetVolumeInformation(strDriver, szVolumeNameBuffer, MAX_PATH + 1,
    20                 &dwVolumeSerialNumber, &dwMaximumComponentLength, &dwFileSystemFlags,
    21                 szFileSystemNameBuffer, MAX_PATH + 1))
    22             {
    23                 strResult.Format(DISKID_FORMAT, HIWORD(dwVolumeSerialNumber),
    24                     LOWORD(dwVolumeSerialNumber), szVolumeNameBuffer);
    25             }
    26 
    27             return strResult;
    28         }
    •  获取CPU编号
    1         // 用WMI查询CPU的CLASS字符串
    2         const LPCTSTR CPU_CLASS = _T("Processor");
    3         // 用WMI查询CPUID的KEY字符串
    4         const LPCTSTR CPU_KEY = _T("ProcessorId");
    5 
    6         // 星号
    7         const TCHAR CHAR_ASTERISK = _T('*');
    1         CString GetCPUID()
    2         {
    3             return GetWMIInformation(CPU_CLASS, CPU_KEY, CString(CHAR_ASTERISK), true);
    4         }
     1 void CConfigManager::InitDeviceInfo()
     2 {
     3     if(m_bHardwareLoaded)
     4         return;
     5     // 初始化COM库
     6     CoInitializeEx(0,COINIT_APARTMENTTHREADED);
     7     // 初始化权限
     8     HRESULT hResult = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
     9         RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
    10     if((hResult != S_OK) && (hResult != RPC_E_TOO_LATE))
    11     { 
    12         ASSERT(FALSE);
    13         TRACE(_T("Failed to initialize COM Security!"));
    14         Log4cxx(LOG4CXX__ERROR, MODULE_NAME, _T("Failed to initialize COM Security!"));
    15     }
    16     // 获取CPU编号
    17     m_strCPUID = GetCPUID();
    18     // 关闭COM库
    19     CoUninitialize();
    20     m_bHardwareLoaded=TRUE;
    21 }
    •  获取计算机名
     1         CString GetComputerNameString()
     2         {
     3             CString strResult;
     4 
     5             TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1];
     6             memset(szComputerName, 0, sizeof(szComputerName));
     7 
     8             DWORD dwCount = MAX_COMPUTERNAME_LENGTH + 1;
     9             if(::GetComputerName(szComputerName, &dwCount))
    10             {
    11                 strResult = szComputerName;
    12             }
    13 
    14             return strResult;
    15         }
    •  获取操作系统语言
     1 bool CSysInfoHelper::IsSimpleChineseOS()
     2 {
     3     LANGID languageID = GetSystemDefaultLangID();
     4 
     5     if (LANG_CHINESE == PRIMARYLANGID(languageID) && SUBLANG_CHINESE_SIMPLIFIED == SUBLANGID(languageID))
     6     {
     7         return true;
     8     }
     9     else
    10     {
    11         return false;
    12     }
    13 }
     1 bool CSysInfoHelper::IsEnglishOS()
     2 {
     3     LANGID languageID = GetSystemDefaultLangID();
     4 
     5     if (LANG_ENGLISH == PRIMARYLANGID(languageID))
     6     {
     7         return true;
     8     } 
     9     else
    10     {
    11         return false;
    12     }
    13 }
    •  获取codepage
     1     //std::locale old = std::locale::global(std::locale(""));
     2     //std::locale old = std::locale::global(std::locale(".1252"));
     3     std::locale old = std::locale::global(std::locale(".936"));
     4 
     5     UINT cp = GetACP();
     6     UINT oem_cp = GetOEMCP();
     7 
     8     log4cxx(LOG4CXX__INFO, "default code page : acp(%d) oemcp(%d)", cp, oem_cp);
     9     codepage_to_log(cp);
    10     codepage_to_log(oem_cp);
    11     codepage_to_log(CP936);
    12     codepage_to_log(CP_UTF8);
    1 void codepage_to_log(UINT cp)
    2 {
    3     CPINFOEXA cp_info;
    4     GetCPInfoExA(cp, CP_ACP, &cp_info);
    5     string cp_name(cp_info.CodePageName);
    6 
    7     BOOL ret = IsValidCodePage(cp);
    8     log4cxx(LOG4CXX__INFO, "[%s] code page (%d) : %s", (ret ? "*" : " "), cp, cp_name.c_str());
    9 }

    结果:

    default code page : acp(936) oemcp(936)
    [*] code page (936) : 936   (ANSI/OEM - 简体中文 GBK)
    [*] code page (936) : 936   (ANSI/OEM - 简体中文 GBK)
    [*] code page (936) : 936   (ANSI/OEM - 简体中文 GBK)
    [*] code page (65001) : 65001 (UTF-8)


     

    •  管理员权限
     1 int CSysInfoHelper::IsHasAdminAuthority()
     2 {
     3     // 第一步:调用OpenProcessToken函数获取当前进程TOKEN的句柄
     4     // 当获得TOKEN句柄之后,我们还得获取这个TOKEN的分组信息
     5     
     6     HANDLE hAccessToken; 
     7     BOOL flag = ::OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hAccessToken);
     8     if (!flag)
     9     {
    10         return -1;
    11     }
    12 
    13     BYTE InfoBuffer[1024]; 
    14     DWORD dwInfoBufferSize; 
    15     flag = ::GetTokenInformation(hAccessToken, TokenGroups, InfoBuffer, 1024, &dwInfoBufferSize);
    16     if (!flag)
    17     {
    18         return -1;
    19     }
    20 
    21     // 第二步:为Local Admin账号获取安全标示符(SID),
    22     // 我们要利用这个账号在所有TOKEN分组中查找Local Admin SID(不要忘了调用FreeSid函数来释放内存)。
    23 
    24     PSID psidAdministrators; 
    25     SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY; 
    26     flag = ::AllocateAndInitializeSid(&siaNtAuthority, 
    27                                     2, 
    28                                     SECURITY_BUILTIN_DOMAIN_RID, 
    29                                     DOMAIN_ALIAS_RID_ADMINS, 
    30                                     0,0,0,0,0,0, 
    31                                     &psidAdministrators);
    32     if (!flag)
    33     {
    34         return -1;
    35     }
    36 
    37     // 最后一步:在所有TOKEN分组中查找Local Admin SID
    38     PTOKEN_GROUPS ptgGroups = (PTOKEN_GROUPS)InfoBuffer; 
    39     for(UINT i = 0; i < ptgGroups-> GroupCount; i++) 
    40     { 
    41         if (EqualSid(psidAdministrators, ptgGroups->Groups[i].Sid)) 
    42         { 
    43             // 释放内存
    44             FreeSid(psidAdministrators);
    45 
    46             // 此进程有管理权限 
    47             return 1;
    48         } 
    49     }
    50 
    51     // 释放内存
    52     FreeSid(psidAdministrators);
    53 
    54     return -1;
    55 }
  • 相关阅读:
    Java Web(5) Spring 下使用Junit4 单元测试
    聊聊单元测试(三)——Spring Test+JUnit完美组合
    浅谈ELK日志分析平台
    ELK 实现 Java 分布式系统日志分析架构
    ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
    开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
    自动补全下拉框(可输入匹配的下拉框)
    这是一篇满载真诚的微信小程序开发干货
    微服务化的多组件项目,跨地域、分布式版本管理和发布方式
    解放双手,发掘更大的价值:智能化运维
  • 原文地址:https://www.cnblogs.com/spriteflk/p/4506004.html
Copyright © 2011-2022 走看看