Как определить версию Windows?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 12814
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Как определить версию Windows?

Post by John Doe »

Ищу простой способ определения версии Windows.
Подумывал о ffi + GetVersionExW, но получается довольно громоздко (и не факт что будет работать после 8.1).

P.S.
Собственно требуется определить XP или выше.

User avatar
zg
zero-gravity
Posts: 5816
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 147 times
Contact:

Как определить версию Windows?

Post by zg »

John Doe wrote:Собственно требуется определить XP или выше.
попытаться загрузить функцию, которой нет в xp/w2k3, но есть в младших ос?

alexmitin
Posts: 50
Joined: Tue 17 Feb, 2009 08:37
Been thanked: 1 time

Как определить версию Windows?

Post by alexmitin »

John Doe wrote:Ищу простой способ определения версии Windows.
Подумывал о ffi + GetVersionExW, но получается довольно громоздко (и не факт что будет работать после 8.1).

P.S.
Собственно требуется определить XP или выше.
Используйте Version Helper functions:
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Например, для вашего случая:
IsWindowsXPOrGreater()
IsWindowsXPSP1OrGreater()
IsWindowsXPSP2OrGreater()
IsWindowsXPSP3OrGreater()

Все эти функции реализованы в VersionHelpers.h как оболочки над VerifyVersionInfoW().

NOTE: VerifyVersionInfoW() доступна начиная с Windows 2000.

Если вы пользуетесь старым Windows SDK и в нем VersionHelpers.h файл отсутствует, то вот как пользоваться VerifyVersionInfoW():
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

User avatar
John Doe
Бюрократ
Posts: 12814
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Как определить версию Windows?

Post by John Doe »

alexmitin wrote: Если вы пользуетесь старым Windows SDK и в нем VersionHelpers.h файл отсутствует, то вот как пользоваться VerifyVersionInfoW():
Возможности использовать Windows SDK в luajit ffi нет.
С учётом этого выходит что VerifyVersionInfoW самый правильный вариант. Но очень уж громоздкий.
zg wrote: попытаться загрузить функцию, которой нет в xp/w2k3, но есть в младших ос?
Да, вот так работает:

Code: Select all

local ffi = require"ffi"
ffi.cdef[[unsigned long GetCurrentProcessorNumber(void);]]
return pcall(function() return ffi.C.GetCurrentProcessorNumber end)

User avatar
John Doe
Бюрократ
Posts: 12814
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Как определить версию Windows?

Post by John Doe »

Есть и другие способы (менее надёжные, зато простые):

Получить версию из реестра:

Code: Select all

win.GetRegKey("HKLM",[[SOFTWARE\Microsoft\Windows NT\CurrentVersion]],"CurrentVersion")
Или можно посмотреть переменные окружения.
Например в XP по умолчанию не задана %LOCALAPPDATA% похоже это у меня личное.

2useven10
Posts: 4039
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 185 times

Как определить версию Windows?

Post by 2useven10 »

Или M$ врёт.
У меня на XP x64 тоже нет %LOCALAPPDATA%

Post Reply

Return to “Нужна помощь”