Ищу простой способ определения версии Windows.
Подумывал о ffi + GetVersionExW, но получается довольно громоздко (и не факт что будет работать после 8.1).
P.S.
Собственно требуется определить XP или выше.
Как определить версию Windows?
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Как определить версию Windows?
попытаться загрузить функцию, которой нет в xp/w2k3, но есть в младших ос?John Doe wrote:Собственно требуется определить XP или выше.
Как определить версию Windows?
Используйте Version Helper functions:John Doe wrote:Ищу простой способ определения версии Windows.
Подумывал о ffi + GetVersionExW, но получается довольно громоздко (и не факт что будет работать после 8.1).
P.S.
Собственно требуется определить XP или выше.
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
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Как определить версию Windows?
Возможности использовать Windows SDK в luajit ffi нет.
С учётом этого выходит что VerifyVersionInfoW самый правильный вариант. Но очень уж громоздкий.
Да, вот так работает:
Code: Select all
local ffi = require"ffi"
ffi.cdef[[unsigned long GetCurrentProcessorNumber(void);]]
return pcall(function() return ffi.C.GetCurrentProcessorNumber end)
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Как определить версию Windows?
Есть и другие способы (менее надёжные, зато простые):
Получить версию из реестра:
Или можно посмотреть переменные окружения.
Например в XP по умолчанию не задана %LOCALAPPDATA% похоже это у меня личное.
Получить версию из реестра:
Code: Select all
win.GetRegKey("HKLM",[[SOFTWARE\Microsoft\Windows NT\CurrentVersion]],"CurrentVersion")
Например в XP по умолчанию не задана %LOCALAPPDATA% похоже это у меня личное.