Je veux détecter si le système d'exploitation Windows actuel est 32 bits ou 64 bits. Comment y parvenir en utilisant C++? Je ne veux pas le type de processeur, je veux le type de bit du système d'exploitation. En effet, vous pouvez installer un système d'exploitation 32 bits sur un processeur 64 bits.
La fonction à appeler est IsWow64Process
ou IsWow64Process2
. Il indique à votre application 32 bits si elle s'exécute sur un Windows 64 bits.
Si le programme est compilé pour 64 bits, il le saura déjà.
Si votre code est en 64 bits et en cours d'exécution, Windows est en 64 bits - rien à vérifier. Si votre processus est un appel 32 bits IsWow64Process()
- Les processus 32 bits s'exécutent dans WOW64 sur Windows 64 bits et sans WOW64 sinon.
bool getWindowsBit(bool & isWindows64bit)
{
#if _WIN64
isWindows64bit = true;
return true;
#Elif _WIN32
BOOL isWow64 = FALSE;
//IsWow64Process is not available on all supported versions of Windows.
//Use GetModuleHandle to get a handle to the DLL that contains the function
//and GetProcAddress to get a pointer to the function if available.
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)
GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if(fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(), &isWow64))
return false;
if(isWow64)
isWindows64bit = true;
else
isWindows64bit = false;
return true;
}
else
return false;
#else
assert(0);
return false;
#endif
}
vous pouvez utiliser IsWow64Process si votre application est une application 32 bits, s'il est vrai que vous utilisez un système d'exploitation x64, sinon c'est 32 bits
Vous devez utiliser GetNativeSystemInfo
. Étant donné que vous vous attendez à ce que cela fonctionne sur un système d'exploitation 32 bits, vous devez utiliser LoadLibrary
+ GetProcAddress
pour pouvoir gérer cette fonction n'étant pas disponible. Donc, si cela échoue, vous savez que c'est un système d'exploitation 32 bits. Si non, SYSTEM_INFO.wProcessorArchitecture
vous donne le type de processeur réel au lieu de celui émulé.
Utilisez la fonction GetNativeSystemInfo
. Il obtient un LPSYSTEM_INFO
paramètre pour obtenir ce que vous voulez.
SYSTEM_INFO
structure:
wProcessorArchitecture
L'architecture du processeur du système d'exploitation installé.
Vous pouvez exécuter la commande Windows systeminfo
en tant que processus dans votre programme.
#include <stdlib.h>
system("systeminfo");
L'une des catégories renvoyées est le type de système.
Sa sortie indique: System Type: x86-based PC
, ou System Type: x64-based PC
Cela peut être une solution plus compliquée que celle fournie par d'autres, mais j'ai pensé que je l'ajouterais comme une possibilité. (Peut-être que vous recherchez également des informations supplémentaires.)
Voici une autre façon: GetSystemWow64Directory - "Récupère le chemin du répertoire système utilisé par WOW64. Ce répertoire n'est pas présent sur Windows 32 bits." et "Sous Windows 32 bits, la fonction échoue toujours et l'erreur étendue est définie sur ERROR_CALL_NOT_IMPLEMENTED
. "
Personnellement, je ne suis pas sûr de l'utilisation de IsWow64Process
puisque dans MSDN dans la description du IsWow64Process
il y a le texte "Notez que cette technique n'est pas un moyen fiable de détecter si le système d'exploitation est une version 64 bits de Windows car le Kernel32.dll dans les versions actuelles de Windows 32 bits contient également cette fonction."