Узнать разрядность ОС Windows C++

345
23 ноября 2017, 03:50

Здравствуйте, возник вопрос с тем, как узнать разрядность ОС Windows. Пробовал через препроцессинг, но выдает неправильные данные...

#ifdef WIN64
#define OS_BIT 64
#endif // !WIN64
#ifdef WIN32
#define OS_BIT 32
#endif // !WIN32

Может быть есть какой-нибудь другой способ?

Answer 1
BOOL Is64BitWindows()
{
#if defined(_WIN64)
 return TRUE;  // Программа скомпилирована для x64
#elif defined(_WIN32)
 // Программа скомпилирована для x32, спрашиваем ОС
 BOOL f64 = FALSE;
 return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#else
 return FALSE; // Программа скомпилирована для x16
#endif
}

Источник: https://blogs.msdn.microsoft.com/oldnewthing/20050201-00/?p=36553/

Answer 2

Можно попытаться узнать путь к папке Wow64. На 32-битных системах этот вызов всегда возвращает FALSE и код ошибки будет ERROR_CALL_NOT_IMPLEMENTED. Привилегированных прав для вызова не требуется, должна работать начиная с WindowsXP (на 10 работает точно).

bool Is64bitWindows(void) noexcept
{
    auto is_64_bit{true};
    if(FALSE == GetSystemWow64DirectoryW(nullptr, 0u))
    {
        auto const last_error{::GetLastError()};
        if(ERROR_CALL_NOT_IMPLEMENTED == last_error)
        {
            is_64_bit = false;
        }
    }
    return(is_64_bit);
}
READ ALSO
Данные из файла в вектор, массив типа point

Данные из файла в вектор, массив типа point

Всем доброго вечера, возник вопросИмеется файл, пусть будет обычный текстовый

319
getline в цикле С++

getline в цикле С++

Здраствуйте, такая проблема - нудно считать строку с пробелами в цикле while()делаю это через getline(cin, string); и при первом вхождении в цикл все ок, но при...

270
Разница между компиляцией в Qt Creator и g++

Разница между компиляцией в Qt Creator и g++

Обычно, я программирую в среде Qt Creator (на текущий момент это 44

244