c++ - sesion - pida a su administrador de ti que le conceda acceso a microsoft teams
Compruebe la versiĆ³n de Windows (7)
¿Cómo puedo verificar en C ++ si la versión de Windows instalada en la computadora es Windows Vista y superior (Windows 7)?
Creo que estás buscando la función GetVersionEx .
En Visual Studio 2013 o superior, también puede usar las nuevas funciones de Version Helper.
Hay métodos para muchas versiones diferentes de Windows. Ejemplo:
#include <VersionHelpers.h>
if (!IsWindowsVistaOrGreater())
{
MessageBox(NULL, "You need at least Windows Vista", "Version Not Supported", MB_OK);
}
Mas informacion here
Esta página de soporte de Microsoft le da detalles para versiones anteriores.
Para determinar el sistema operativo que se ejecuta en un sistema dado, se necesitan los siguientes datos:
95 98 ME NT 4 2000 XP PlatformID 1 1 1 2 2 2 Major version 4 4 4 4 5 5 Minor version 0 10 90 0 0 1
Podría implementar el código y ejecutarlo en una máquina Vista y Windows-7 para verificar los valores devueltos.
Para obtener la información de la versión del sistema operativo realice la siguiente llamada:
System::OperatingSystem *osInfo = System::Environment::OSVersion;
Podría usar la función GetVersion () o GetVersionEx () en el kernel32.dll. Estas dos funciones solo están disponibles en Windows 2000 o posterior.
Para leer más sobre este aspecto en GetVersionEx .
Similar a otras pruebas para verificar la versión de Windows NT:
OSVERSIONINFO vi;
memset (&vi, 0, sizeof vi);
vi .dwOSVersionInfoSize = sizeof vi;
GetVersionEx (&vi);
if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT && vi.dwMajorVersion >= 6)
Todas las respuestas en este hilo apuntan a usar GetVersion
o GetVersionEx
para esta prueba, lo cual es incorrecto . Parece funcionar, pero es arriesgado. La fuente principal de problemas de la aplicación para las actualizaciones del sistema operativo Windows proviene de pruebas mal escritas basadas en los resultados de GetVersion
con suposiciones GetVersion
o comparaciones GetVersion
.
La forma correcta de realizar esta prueba es usar VerifyVersionInfo
, no GetVersion
o GetVersionEx
.
Si está utilizando el conjunto de herramientas del compilador VS 2013 y el SDK de Windows 8.1, puede usar VersionHelpers.h
y simplemente llamar a IsWindowsVistaOrGreater
.
Si está utilizando el conjunto de herramientas de la plataforma VS 2013
v120_xp
para apuntar a Windows XP, en realidad está usando el SDK de Windows 7.1A, por lo que necesita usarVeriyVersionInfo
directamente.
De lo contrario, utilice:
bool IsWindowsVistaOrGreater()
{
OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
DWORDLONG const dwlConditionMask = VerSetConditionMask(
VerSetConditionMask(
VerSetConditionMask(
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
VER_MINORVERSION, VER_GREATER_EQUAL),
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
osvi.dwMajorVersion = HIBYTE(_WIN32_WINNT_VISTA);
osvi.dwMinorVersion = LOBYTE(_WIN32_WINNT_VISTA);
osvi.wServicePackMajor = 0;
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
}
Este código funcionará en Windows 2000 o posterior y le dará un resultado sólido. Si realmente necesitara esta prueba para ejecutarse en Windows 98 o Windows ME -y- está usando un conjunto de herramientas del compilador con la edad suficiente para ejecutarse en esa plataforma, haría la misma prueba pero con un enlace explícito en lugar de implícito. ¿Qué hay en un número de versión?
Además, el uso de GetVersion
o GetVersionEx
obtendrá de forma predeterminada la versión incorrecta en Windows 8.1 y Windows 10. Ver Manifest Madness .
Tenga en cuenta que con Windows 10
VerifyVersionInfo
también está sujeto al mismo comportamiento basado en manifiestos (es decir, sin el elemento GUID para Windows 10, VVI actúa como si el número de versión del sistema operativo fuera 6.2 en lugar de 10.0. Dicho esto, la mayoría de las pruebas del mundo real comoIsWindowsVistaOrGreater
IsWindows7OrGreater
,IsWindows7SP1OrGreater
,IsWindows8OrGreater
funcionarán bien incluso sin el manifiesto, solo si está usandoIsWindows8Point1OrGreater
oIsWindows10OrGreater
oIsWindows10OrGreater
que el comportamiento basado en el manifiesto sea importante.
Véase también this hilo de desbordamiento de pila.
Use la función de API GetVersionEx definida en kernel32.dll
:
bool IsWindowsVistaOrHigher() {
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
return osvi.dwMajorVersion >= 6;
}