Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

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

#cpp #c #windows #winapi


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

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

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


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


Ответы

Ответ 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/

Ответ 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); }

Комментариев нет:

Отправить комментарий