mirror of
https://github.com/Mahdi-zarei/nekoray.git
synced 2025-12-19 05:30:06 +08:00
fix: improve windows version detection
This commit is contained in:
parent
f8acb23ebb
commit
b3cb901479
@ -1,5 +1,5 @@
|
|||||||
set(PLATFORM_SOURCES 3rdparty/WinCommander.cpp src/sys/windows/guihelper.cpp src/sys/windows/MiniDump.cpp src/sys/windows/eventHandler.cpp)
|
set(PLATFORM_SOURCES 3rdparty/WinCommander.cpp src/sys/windows/guihelper.cpp src/sys/windows/MiniDump.cpp src/sys/windows/eventHandler.cpp src/sys/windows/WinVersion.cpp)
|
||||||
set(PLATFORM_LIBRARIES wininet wsock32 ws2_32 user32 rasapi32 iphlpapi)
|
set(PLATFORM_LIBRARIES wininet wsock32 ws2_32 user32 rasapi32 iphlpapi ntdll)
|
||||||
|
|
||||||
include(cmake/windows/generate_product_version.cmake)
|
include(cmake/windows/generate_product_version.cmake)
|
||||||
generate_product_version(
|
generate_product_version(
|
||||||
|
|||||||
55
include/sys/windows/WinVersion.h
Normal file
55
include/sys/windows/WinVersion.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// The MIT License (MIT)
|
||||||
|
// Windows Version Detection 1.2.0
|
||||||
|
// Copyright (C) 2022 - 2023 by Shao Voon Wong (shaovoon@yahoo.com)
|
||||||
|
//
|
||||||
|
// http://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
// History
|
||||||
|
// 1.0.0: First Releease
|
||||||
|
// 1.1.0: Added IsBuildNumGreaterOrEqual()
|
||||||
|
// 1.2.0: Removed the Windows 11 build number check to set major version to 11.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct VersionInfo
|
||||||
|
{
|
||||||
|
VersionInfo() : Major(0), Minor(0), BuildNum(0) {}
|
||||||
|
unsigned int Major;
|
||||||
|
unsigned int Minor;
|
||||||
|
unsigned int BuildNum;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BuildNumber
|
||||||
|
{
|
||||||
|
enum BN : unsigned int
|
||||||
|
{
|
||||||
|
Windows_Vista = 6002,
|
||||||
|
Windows_7 = 7601,
|
||||||
|
Windows_8 = 9200,
|
||||||
|
Windows_8_1 = 9600,
|
||||||
|
Windows_10_1507 = 10240,
|
||||||
|
Windows_10_1511 = 10586,
|
||||||
|
Windows_10_1607 = 14393,
|
||||||
|
Windows_10_1703 = 15063,
|
||||||
|
Windows_10_1709 = 16299,
|
||||||
|
Windows_10_1803 = 17134,
|
||||||
|
Windows_10_1809 = 17763,
|
||||||
|
Windows_10_1903 = 18362,
|
||||||
|
Windows_10_1909 = 18363,
|
||||||
|
Windows_10_2004 = 19041,
|
||||||
|
Windows_10_20H2 = 19042,
|
||||||
|
Windows_10_21H1 = 19043,
|
||||||
|
Windows_10_21H2 = 19044,
|
||||||
|
Windows_10_22H2 = 19045,
|
||||||
|
Windows_11_21H2 = 22000,
|
||||||
|
Windows_11_22H2 = 22621,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class WinVersion
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static bool GetVersion(VersionInfo& info);
|
||||||
|
static bool IsBuildNumGreaterOrEqual(unsigned int buildNumber);
|
||||||
|
};
|
||||||
|
|
||||||
40
src/sys/windows/WinVersion.cpp
Normal file
40
src/sys/windows/WinVersion.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// The MIT License (MIT)
|
||||||
|
// Windows Version Detection 1.2.0
|
||||||
|
// Copyright (C) 2022 - 2023 by Shao Voon Wong (shaovoon@yahoo.com)
|
||||||
|
//
|
||||||
|
// http://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
// History
|
||||||
|
// 1.0.0: First Releease
|
||||||
|
// 1.1.0: Added IsBuildNumGreaterOrEqual()
|
||||||
|
// 1.2.0: Removed the Windows 11 build number check to set major version to 11.
|
||||||
|
|
||||||
|
#include "include/sys/windows/WinVersion.h"
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
extern "C" NTSTATUS __stdcall RtlGetVersion(OSVERSIONINFOEXW * lpVersionInformation);
|
||||||
|
|
||||||
|
bool WinVersion::GetVersion(VersionInfo& info)
|
||||||
|
{
|
||||||
|
OSVERSIONINFOEXW osv;
|
||||||
|
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
|
||||||
|
if (RtlGetVersion(&osv) == 0)
|
||||||
|
{
|
||||||
|
info.Major = osv.dwMajorVersion;
|
||||||
|
info.Minor = osv.dwMinorVersion;
|
||||||
|
info.BuildNum = osv.dwBuildNumber;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WinVersion::IsBuildNumGreaterOrEqual(unsigned int buildNumber)
|
||||||
|
{
|
||||||
|
VersionInfo info;
|
||||||
|
if (GetVersion(info))
|
||||||
|
{
|
||||||
|
return (info.BuildNum >= buildNumber);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
@ -22,10 +22,7 @@
|
|||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#include "3rdparty/WinCommander.hpp"
|
#include "3rdparty/WinCommander.hpp"
|
||||||
#include <sdkddkver.h>
|
#include "include/sys/windows/WinVersion.h"
|
||||||
#include <minwindef.h>
|
|
||||||
#include <winbase.h>
|
|
||||||
#include <VersionHelpers.h>
|
|
||||||
#else
|
#else
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
#include "include/sys/linux/LinuxCap.h"
|
#include "include/sys/linux/LinuxCap.h"
|
||||||
@ -2286,7 +2283,7 @@ void MainWindow::CheckUpdate() {
|
|||||||
QString search;
|
QString search;
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
# ifdef Q_OS_WIN64
|
# ifdef Q_OS_WIN64
|
||||||
if (IsWindows10OrGreater())
|
if (WinVersion::IsBuildNumGreaterOrEqual(BuildNumber::Windows_10_1809))
|
||||||
search = "windows64";
|
search = "windows64";
|
||||||
else
|
else
|
||||||
search = "windowslegacy64";
|
search = "windowslegacy64";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user