How to determine if my software works in Windows XP?

I have Windows XP discovery code that I think should work, but what should I replace? with which you can determine if I am running in Windows XP?

bool IsWindowsXP() { bool isWindowsXp = false; OSVERSIONINFOEX osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( GetVersionEx((OSVERSIONINFO*)&osvi) ) { const DWORD MinXpVersion = ??; const DWORD MaxXpVersion = ??; if ((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (vi.dwMajorVersion >= MinXpVersion) && (vi.dwMajorVersion <= MinXpVersion)) { isWindowsXp = false; } } return isWindowsXp; } 
+4
source share
3 answers

On the documentation page for the OSVERSIONINFOEX structure, two corresponding fields indicate this:

See the notes for more information.

There is a convenient table in the notes section of the notes table:

  Operating system Version number dwMajorVersion dwMinorVersion Other
 Windows 8 6.2 6 2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
 Windows Server 2012 6.2 6 2 OSVERSIONINFOEX.wProductType! = VER_NT_WORKSTATION
 Windows 7 6.1 6 1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
 Windows Server 2008 R2 6.1 6 1 OSVERSIONINFOEX.wProductType! = VER_NT_WORKSTATION
 Windows Server 2008 6 6 0 OSVERSIONINFOEX.wProductType! = VER_NT_WORKSTATION
 Windows Vista 6 6 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
 Windows Server 2003 R2 5.2 5 2 GetSystemMetrics (SM_SERVERR2)! = 0
 Windows Home Server 5.2 5 2 OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER
 Windows Server 2003 5.2 5 2 GetSystemMetrics (SM_SERVERR2) == 0
 Windows XP Prof x64 Ed 5.2 5 2 (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
 Windows XP 5.1 5 1 Not applicable
 Windows 2000 5 5 0 Not applicable

As can be seen from the table, XP is 5.1.

+5
source

No need for additional library, header, work with VC ++ Express

BOOL chkxp(){ DWORD version = GetVersion(); DWORD major = (DWORD)(LOBYTE(LOWORD(version))); DWORD minor = (DWORD)(HIBYTE(LOWORD(version))); return ((major == 5) && (minor == 1)); // 5.1 is WIN Xp 5.2 is XP x64 }

+1
source

The SDK has <VersionHelpers.h> , which provides built-in functions for checking versions of Windows. Historically, many developers made mistakes in these checks, so abstract functions were added to make the checks more reliable.

Specifically, IsWindowsXPOrGreater() && !IsWindowsVistaOrGreater() seems to meet your needs.

Please note that using the Windows 10 SDK using GetVersionEx generates compilation obsolescence warnings.

0
source

Source: https://habr.com/ru/post/1497244/


All Articles