系统相关功能开发(七)-系统信息


1.获取CPIUD

void CSystemInfoSampleDlg::OnButtonGetCpuid()	// 获取CPU ID值
{
	BYTE szCPU[16]= {0};			// 定义存放CPU类型的数组
	UINT uCPUID = 0U;				// 定义存放CPUID的数组
	_asm							// 开始执行汇编
	{
		mov eax, 0					// 获取CPU型号
		cpuid						
		mov dword ptr szCPU[0], ebx	// 取CPU型号的前4个字符
		mov dword ptr szCPU[4], edx	// 取CPU型号的中间4个字符
		mov dword ptr szCPU[8], ecx	// 取CPU型号的最后4个字符
		mov eax, 1					// 取CPUID
		cpuid
		mov uCPUID, edx				// 取CPUID的值
	}
	WriteLog("当前系统的CPU类型为=%s----CPU ID=%u", szCPU, uCPUID);	// 输出CPU信息
}


2.获取CPU时钟频率

void CSystemInfoSampleDlg::OnButtonGetCpufrequency()	// 获取CPU时钟频率
{
	unsigned long ulSpeed=0;	// 定义CPU时钟频率变量  
	HKEY hKey;					// 定义注册表键
	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0, KEY_READ, &hKey) == ERROR_SUCCESS)   
	{   // 打开注册表
		unsigned long ulLen= sizeof(ulSpeed);	// 赋值长度	
		RegQueryValueEx(hKey, "~MHz", NULL, NULL, (LPBYTE)&ulSpeed, &ulLen);   // 查询CPU时钟频率
		RegCloseKey(hKey);		// 关闭注册表
		WriteLog("CPU时钟频率=%ldMHz",ulSpeed);// 显示获取的信息
	}
	else WriteLog("获取CPU时钟频率失败");		// 输出错误信息
}


3.获得Windows路径获得System路径

void CSystemInfoSampleDlg::OnButtonGetWindowpath()			// 获得Windows路径
{
	TCHAR szPath[MAX_PATH]={0};								// 定义路径变量
	int nLength = GetWindowsDirectory(szPath, MAX_PATH);	// 获取Windows路径
	if (nLength > 0) WriteLog("获取Window路径=%s", szPath);	// 输出路径信息
	else WriteLog("获取Window路径失败");					// 输出错误信息
}
void CSystemInfoSampleDlg::OnButtonGetSystempath()			// 获得System路径
{
	TCHAR szPath[MAX_PATH]={0};								// 定义路径变量
	int nLength =  GetSystemDirectory(szPath, MAX_PATH);	// 获取System路径
	if (nLength > 0) WriteLog("获取System路径=%s", szPath);	// 输出路径信息
	else WriteLog("获取System路径失败");					// 输出错误信息
}



4.获取特殊文件夹路径

void CSystemInfoSampleDlg::OnButtonGetspecialpath()			// 获取特殊文件夹路径
{
	TCHAR  szPath[MAX_PATH];								// 定义路径变量
	int	iIndex[]={CSIDL_ALTSTARTUP, CSIDL_APPDATA, CSIDL_BITBUCKET, CSIDL_COMMON_ALTSTARTUP, 
		CSIDL_COMMON_DESKTOPDIRECTORY, CSIDL_COMMON_FAVORITES, CSIDL_COMMON_PROGRAMS, 
		CSIDL_COMMON_STARTMENU, CSIDL_COMMON_STARTUP, CSIDL_CONTROLS, CSIDL_COOKIES, 
		CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY, CSIDL_DRIVES,  CSIDL_FAVORITES, 
		CSIDL_FONTS, CSIDL_HISTORY, CSIDL_INTERNET, CSIDL_INTERNET_CACHE, 
		CSIDL_NETHOOD, CSIDL_NETWORK, CSIDL_PERSONAL, CSIDL_PRINTERS, CSIDL_PRINTHOOD,
		CSIDL_PROGRAMS, CSIDL_RECENT, CSIDL_SENDTO, CSIDL_STARTMENU, CSIDL_STARTUP,
		CSIDL_TEMPLATES};									// 路径CSIDL数组
	CString	csIndex[]={"CSIDL_ALTSTARTUP", "CSIDL_APPDATA", "CSIDL_BITBUCKET", "CSIDL_COMMON_ALTSTARTUP", 
		"CSIDL_COMMON_DESKTOPDIRECTORY", "CSIDL_COMMON_FAVORITES", "CSIDL_COMMON_PROGRAMS", 
		"CSIDL_COMMON_STARTMENU", "CSIDL_COMMON_STARTUP", "CSIDL_CONTROLS", "CSIDL_COOKIES", 
		"CSIDL_DESKTOP", "CSIDL_DESKTOPDIRECTORY", "CSIDL_DRIVES",  "CSIDL_FAVORITES", 
		"CSIDL_FONTS", "CSIDL_HISTORY", "CSIDL_INTERNET", "CSIDL_INTERNET_CACHE", 
		"CSIDL_NETHOOD", "CSIDL_NETWORK", "CSIDL_PERSONAL", "CSIDL_PRINTERS", "CSIDL_PRINTHOOD",
		"CSIDL_PROGRAMS", "CSIDL_RECENT", "CSIDL_SENDTO", "CSIDL_STARTMENU", "CSIDL_STARTUP",
		"CSIDL_TEMPLATES"};									// 路径名称数组
	for (int i = 0;i < 30; i++)								// 使用for循环依次获取文件夹
	{
		memset(szPath, 0x00, sizeof(szPath));				// 清空变量值
		if (SHGetSpecialFolderPath(HWND_DESKTOP, szPath, iIndex[i], FALSE) != 0)	// 获取特殊文件夹
			WriteLog("%s=%s", csIndex[i], szPath);			// 输出文件夹路径
		else WriteLog("获取%s失败", csIndex[i]);			// 输出错误信息
	}
}





5.检测系统启动模式

void CSystemInfoSampleDlg::OnButtonGetstartmode()	// 检测系统启动模式
{
	int iMode = GetSystemMetrics(SM_CLEANBOOT);		// 获取系统启动模式
	switch (iMode)									// 判断返回的模式值
	{
	case 0:	// 正常模式
		WriteLog("系统启动模式为--正常模式");break;
	case 1:	// 安全模式
		WriteLog("系统启动模式为--安全模式");break;
	case 2:	// 网络环境下安全模式
		WriteLog("系统启动模式为--网络环境下安全模式");break;
	default:// 其他模式
		WriteLog("系统启动模式为--其他");break;
	}
}


6.判断操作系统类型

void CSystemInfoSampleDlg::OnButtonGetSysversion()	// 判断操作系统类型
{
	OSVERSIONINFO osvi;								// 定义版本信息结构
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);	// 设置版本结构大小
	if (GetVersionEx (&osvi))							// 获取版本信息
		WriteLog("获取操作系统版本成功,主版本=%d;次版本=%d;\r\n生成版本=%d;平台ID=%d;系统描述=%s",
			osvi.dwMajorVersion, osvi.dwMinorVersion, 
			osvi.dwBuildNumber,	osvi.dwPlatformId, osvi.szCSDVersion);	// 输出版本信息
	else WriteLog("获取操作系统版本失败");				// 输出错误信息	
}




7.获取当前系统的运行时间

void CSystemInfoSampleDlg::OnButtonGetruntime()			// 获取当前系统的运行时间
{	
	DWORD dwTicks = GetTickCount();						// 获取运行的单位时间数
	CTimeSpan timeSpan(dwTicks/1000);					// 将其转换为CTimeSpan类型
	// 输出运行时间信息
	WriteLog("系统已经运行了%d天,%d小时,%d分钟,%d秒", timeSpan.GetDays(), timeSpan.GetHours(), timeSpan.GetMinutes(), timeSpan.GetSeconds());	
}


8.系统启动时间

void CSystemInfoSampleDlg::OnButtonGetstarttime()		// 获取Windows 2000系统启动时间
{	
	DWORD dwTicks = GetTickCount();						// 获取运行的单位时间数
	CTime time = CTime::GetCurrentTime();				// 获取当前时间
	CTimeSpan timeSpan(dwTicks/1000);					// 将其转换为CTimeSpan类型
	time -= timeSpan;									// 当前时间减去已经运行的时间
	WriteLog("系统启动时间为:%s", time.Format("%Y-%m-%d %H:%M:%S"));	// 输出启动时间
}


9. 获取处理器信息

void CSystemInfoSampleDlg::OnButtonGetProcessor()		// 获取处理器信息
{
	SYSTEM_INFO sysinfo;								// 定义系统信息结构
	GetSystemInfo(&sysinfo);							// 获取处理器信息
	switch(sysinfo.wProcessorArchitecture)				// 判断处理器种类
	{
	case PROCESSOR_ARCHITECTURE_INTEL:					// Intel处理器
		switch (sysinfo.wProcessorLevel)				// 判断处理器型号
		{
		case 3:
			WriteLog("处理器类型=PROCESSOR_ARCHITECTURE_INTEL--Intel 80386");	break; 
		case 4:
			WriteLog("处理器类型=PROCESSOR_ARCHITECTURE_INTEL--Intel 80486");	break;
		case 5:
			WriteLog("处理器类型=PROCESSOR_ARCHITECTURE_INTEL--Pentium"); break;
		default:
			WriteLog("处理器类型=PROCESSOR_ARCHITECTURE_INTEL"); break;
		}
		break;
	case PROCESSOR_ARCHITECTURE_MIPS :					// MIPS
		WriteLog("处理器类型=MIPS--R%d000", sysinfo.wProcessorLevel);
		break;
	case PROCESSOR_ARCHITECTURE_ALPHA:					// ALPHA
		WriteLog("处理器类型=ALPHA--%d", sysinfo.wProcessorLevel);
		break;
	case PROCESSOR_ARCHITECTURE_PPC:					// PPC
		switch (sysinfo.wProcessorLevel)				// 判断处理器型号
		{
		case 1:
			WriteLog("处理器类型=PPC--PPC 601");break;
		case 3:
			WriteLog("处理器类型=PPC--PPC 603");break;
		case 4:
			WriteLog("处理器类型=PPC--PPC 604");break;
		case 6:
			WriteLog("处理器类型=PPC--PPC 603+");break;
		case 9:
			WriteLog("处理器类型=PPC--PPC 604+");break;
		case 20:
			WriteLog("处理器类型=PPC--PPC 620");break;
		default:
			WriteLog("处理器类型=PPC--PPC PPC");		
		}
		break;
	case PROCESSOR_ARCHITECTURE_UNKNOWN :			// 处理器未知
		WriteLog("处理器类型未知");break;
	default:										// 其他未知值
		WriteLog("处理器类型未知");break;
	}
	WriteLog("系统中的处理器数目为%d", sysinfo.dwNumberOfProcessors);	// 输出处理器数目
}




10.检测是否安装声卡

void CSystemInfoSampleDlg::OnButtonIsaudio()		// 检测是否安装声卡
{	// 打开音频播放
	MMRESULT mmResult = waveOutOpen(NULL, WAVE_MAPPER, NULL, NULL, NULL,WAVE_FORMAT_QUERY);
	if (GetLastError() == MMSYSERR_NODRIVER)	// 如果错误结果为没有驱动=没有安装声卡
		WriteLog("系统中没有安装声卡");			// 输出提示信息
	else  WriteLog("系统中安装了声卡");			// 输出提示信息
}



11.获取当前用户名

void CSystemInfoSampleDlg::OnButtonGetUsername()	// 获取当前用户名
{	
	TCHAR szName[MAX_PATH];							// 定义用户名数组
	DWORD dwLen = MAX_PATH;							// 定义用户名长度
	if (GetUserName(szName, &dwLen))				// 获取用户名
		WriteLog("获取用户名成功,长度=%d;用户名=%s", dwLen, szName);// 输出用户名
	else WriteLog("获取用户名失败");				// 输出错误信息
}


 

12.获取系统环境变量



void CSystemInfoSampleDlg::OnButtonGetEnrovar()		// 获取系统环境变量
{
	char szBuffer[1024] = {0};						// 定义环境变量值数组
	DWORD dwSize=1024;								// 定义数组大小
	if (GetEnvironmentVariable("PATH",(LPTSTR)szBuffer, dwSize) > 0)	// 获取环境变量值
		WriteLog("环境变量PATH=%s", szBuffer);		// 输出环境变量值
	else WriteLog("获取环境变量失败");				// 输出错误提示
}


13.修改计算机名称



void CSystemInfoSampleDlg::OnButtonSetComputeName() // 修改计算机名称
{
	if (SetComputerName("huge-lln"))			// 修改计算机名称
	{
		char szName[128] = "";	// 定义计算机名称数组
		DWORD dwLen = 128;		// 定义计算机名称长度
		if (GetComputerName(szName, &dwLen))		// 获取计算机名称
			WriteLog("设置计算机名称成功,修改后的计算机名称=%s", szName);	// 输出计算机名称	
	}
	else
        WriteLog("设置计算机名称失败");			// 输出错误提示   
}


14.获取当前屏幕颜色质量



void CSystemInfoSampleDlg::OnButtonGetScreencolor()		// 获取当前屏幕颜色质量
{
	HDC hdc = GetDC()->m_hDC;							// 获取设备上下文句柄
	int iColors = GetDeviceCaps(hdc, BITSPIXEL);		// 获取屏幕颜色质量
	WriteLog("当前屏幕颜色质量为%d", iColors);			// 输出屏幕颜色质量
}


15.获得当前屏幕的分辨率

void CSystemInfoSampleDlg::OnButtonGetScreenxy()		// 获得当前屏幕的分辨率
{
	int iScreenX = GetSystemMetrics(SM_CXSCREEN);		// X分辨率
	int iScreenY = GetSystemMetrics(SM_CYSCREEN);		// Y分辨率
	WriteLog("当前屏幕分辨率为%d*%d", iScreenX, iScreenY);	// 输出屏幕分辨率
}




















































猜你喜欢

转载自blog.csdn.net/greless/article/details/77579059
今日推荐