获得系统信息

 

 

 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 }

 

posted @ 2015-05-15 15:07  醉游  阅读(542)  评论(0编辑  收藏  举报