电脑系统判断函数

系统判断函数

不多讲,代码含注释

void whichxitong() {
	typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
	HINSTANCE hinst = LoadLibrary("ntdll.dll");
	DWORD dwMajor, dwMinor, dwBuildNumber;
	NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");
	proc(&dwMajor, &dwMinor, &dwBuildNumber);
	if (dwMajor == 10 && dwMinor == 0) { //win10
		xt = 10;
	} else if (dwMajor == 6 && dwMinor == 3) { //win8.1
		xt = 8.1;
	}
	SYSTEM_INFO info;
	GetSystemInfo(&info);
	OSVERSIONINFOEX os;
	os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
	if (GetVersionEx((OSVERSIONINFO *)&os)) {
		switch (os.dwMajorVersion) {
			case 4:
				switch (os.dwMinorVersion) {
					case 0:
						if (os.dwPlatformId == VER_PLATFORM_WIN32_NT) { //NT 4.0
							xt = 4;
						} else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { //win95
							xt = 95;
						}
						break;
					case 10: //win98
						xt = 98;
						break;
					case 90: //win Me
						xt = 1000;
						break;
				}
				break;
			case 5:
				switch (os.dwMinorVersion) {
					case 0: //win2000
						xt = 2000;
						break;
					case 1: //win XP
						xt = 3000;
						break;
					case 2:
						if (os.wProductType == VER_NT_WORKSTATION// &&
						        /*  info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AWD64*/) { //xin XPx64
							xt = 3500;
						} else if (GetSystemMetrics(SM_SERVERR2) == 0) { //win Server 2003
							xt = 2003;
						} else if (GetSystemMetrics(SM_SERVERR2) != 0) { //win Server 2003 R2
							xt = 2004;
						}
						break;
				}
				break;
			case 6:
				switch (os.dwMinorVersion) {
					case 1:
						if (os.wProductType == VER_NT_WORKSTATION) { //win7
							xt = 7;
						} else { //win Server 2008 R2
							xt = 2009;
						}
						break;
					case 2:
						if (os.wProductType == VER_NT_WORKSTATION) { //win8
							xt = 8;
						} else { //win Server 2012
							xt = 2012;
						}
						break;
				}
				break;
			default:
				xt = -1;
		}
	} else {
		xt = -1000;
	}
}
posted @ 2024-02-27 19:42  wswwhcs  阅读(4)  评论(0编辑  收藏  举报