windows 几乎将所有的信息都记录在了注册表中。
WINADVAPI LSTATUS APIENTRY RegOpenKeyEx (
HKEY hKey,
LPCWSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult);
HKEY hKey;
LONG lRetn = RegOpenKeyEx(HKEY_CURRENT_USER,_T("Software/Microsoft"),0,KEY_READ,&hKey);
if(lRetn == ERROR_SUCCESS){
//Success
}else{
//Failed
}
/*
do something
*/
//结束后关闭注册表项
RegCloseKey(hKey);
LONG RegQueryValueEx(
HKEY hKey,
LPCTSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
DWORD dwType = REG_SZ;
DWORD dwBufferSize = 256;
CString strTempValue,strValue;
LONG lRetn = RegQueryValueEx(hKey,_T("DisplayName"),0,&dwType,(BYTE*)strTempValue.GetBuffer(dwBufferSize),&dwBuffersize);
strValue.Format(_T("%s"),strTempValue);
strTempValue.ReleaseBuffer();
if(lRetn == ERROR_SUCCESS){
//Success
}else{
//Failed
}
LONG RegEnumKeyEx(
HKEY hKey,
DWORD dwIndex,
LPTSTR lpName,
LPDWORD lpcName,
LPDWORD lpReserved,
LPTSTR lpClass,
LPDWORD lpcClass,
PFILETIME lpftLastWriteTime
);
枚举HKEY_CURRENT_USER\Software\Microsoft下的子项
DWORD dwIndex = 0;
CString strSubName;
DWORD dwBufferSize = 256;
LONG lRetn = RegEnumKeyEx(hKey,dwIndex,strSubName.GetBuffer(dwBufferSize),&dwBufferSize,0,NULL,NULL,NULL);
while(lRetn == ERROR_SUCCESS){
//Success
/*
do something
*/
strSubName.ReleaseBuffer();
dwIndex ++;
dwBufferSize = 256;
RegEnumKeyEx(hKey,dwIndex,strSubName.GetBuffer(dwBufferSize),&dwBufferSize,0,NULL,NULL,NULL);
}
windows注册表保存CPU主频的位置:HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0 项中名为“~MHz”键中,0表示第一个CPU,1 表示第二个CPU,以此类推。
DWORD GetProcessorSpeed(){
HKEY hKey;
DWORD dwType = REG_DWORD;
dwSize = sizeof(DWORD);
DWORD dwCpuSpeed = 0;
LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE/DESCRIPTION/System/CentralProcessor/0"),0,KEY_READ,&hKey);
if(lRet != ERROR_SUCCESS){
return 0;
}
lRet = RegQueryValueEx(hKey, _T("~MHz"), NULL,&dwType, (BYTE*)&dwCpuSpeed, &dwSize);
RegCloseKey(hKey);
if(ERROR_SUCCESS != lRet){
return 0;
}
return dwCpuSpeed;
}