mirror of
https://github.com/Mahdi-zarei/nekoray.git
synced 2025-12-18 20:50:09 +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_LIBRARIES wininet wsock32 ws2_32 user32 rasapi32 iphlpapi)
|
||||
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 ntdll)
|
||||
|
||||
include(cmake/windows/generate_product_version.cmake)
|
||||
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
|
||||
#include "3rdparty/WinCommander.hpp"
|
||||
#include <sdkddkver.h>
|
||||
#include <minwindef.h>
|
||||
#include <winbase.h>
|
||||
#include <VersionHelpers.h>
|
||||
#include "include/sys/windows/WinVersion.h"
|
||||
#else
|
||||
#ifdef Q_OS_LINUX
|
||||
#include "include/sys/linux/LinuxCap.h"
|
||||
@ -2286,7 +2283,7 @@ void MainWindow::CheckUpdate() {
|
||||
QString search;
|
||||
#ifdef Q_OS_WIN32
|
||||
# ifdef Q_OS_WIN64
|
||||
if (IsWindows10OrGreater())
|
||||
if (WinVersion::IsBuildNumGreaterOrEqual(BuildNumber::Windows_10_1809))
|
||||
search = "windows64";
|
||||
else
|
||||
search = "windowslegacy64";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user