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 }