mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-03-15 07:43:20 +08:00
WindowsGraphicsCapture only support Windows 10 version 1903 or later #394
This commit is contained in:
@@ -49,6 +49,7 @@
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="7.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.RichTextBox.Wpf" Version="1.1.0" />
|
||||
<PackageReference Include="Vanara.PInvoke.NtDll" Version="4.0.1" />
|
||||
<PackageReference Include="Vanara.PInvoke.SHCore" Version="3.4.17" />
|
||||
<PackageReference Include="Vanara.PInvoke.User32" Version="3.4.17" />
|
||||
<PackageReference Include="WPF-UI" Version="3.0.0-preview.7" />
|
||||
|
||||
91
BetterGenshinImpact/Helpers/OsVersionHelper.cs
Normal file
91
BetterGenshinImpact/Helpers/OsVersionHelper.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
// ReSharper disable InconsistentNaming
|
||||
using System;
|
||||
using Vanara.PInvoke;
|
||||
|
||||
namespace BetterGenshinImpact.Helpers;
|
||||
|
||||
public static class OsVersionHelper
|
||||
{
|
||||
private static Version? versionCache;
|
||||
private static readonly Version _osVersion = GetOSVersion();
|
||||
|
||||
public static bool IsWindowsNT { get; } = Environment.OSVersion.Platform == PlatformID.Win32NT;
|
||||
public static bool IsWindowsXP { get; } = IsWindowsNT && _osVersion == new Version(5, 0);
|
||||
public static bool IsWindowsXP_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(5, 0);
|
||||
public static bool IsWindowsVista { get; } = IsWindowsNT && _osVersion == new Version(6, 0);
|
||||
public static bool IsWindowsVista_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(6, 0);
|
||||
public static bool IsWindows7 { get; } = IsWindowsNT && _osVersion == new Version(6, 1);
|
||||
public static bool IsWindows7_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(6, 1);
|
||||
public static bool IsWindows8 { get; } = IsWindowsNT && _osVersion == new Version(6, 2);
|
||||
public static bool IsWindows8_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(6, 2);
|
||||
public static bool IsWindows81 { get; } = IsWindowsNT && _osVersion == new Version(6, 3);
|
||||
public static bool IsWindows81_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(6, 3);
|
||||
public static bool IsWindows10 { get; } = IsWindowsNT && _osVersion == new Version(10, 0);
|
||||
public static bool IsWindows10_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0);
|
||||
public static bool IsWindows10_1507 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 10240);
|
||||
public static bool IsWindows10_1507_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 10240);
|
||||
public static bool IsWindows10_1511 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 10586);
|
||||
public static bool IsWindows10_1511_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 10586);
|
||||
public static bool IsWindows10_1607 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 14393);
|
||||
public static bool IsWindows10_1607_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 14393);
|
||||
public static bool IsWindows10_1703 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 15063);
|
||||
public static bool IsWindows10_1703_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 15063);
|
||||
public static bool IsWindows10_1709 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 16299);
|
||||
public static bool IsWindows10_1709_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 16299);
|
||||
public static bool IsWindows10_1803 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 17134);
|
||||
public static bool IsWindows10_1803_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 17134);
|
||||
public static bool IsWindows10_1809 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 17763);
|
||||
public static bool IsWindows10_1809_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 17763);
|
||||
public static bool IsWindows10_1903 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 18362);
|
||||
public static bool IsWindows10_1903_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 18362);
|
||||
public static bool IsWindows10_1909 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 18363);
|
||||
public static bool IsWindows10_1909_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 18363);
|
||||
public static bool IsWindows10_2004 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 19041);
|
||||
public static bool IsWindows10_2004_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 19041);
|
||||
public static bool IsWindows10_2009 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 19042);
|
||||
public static bool IsWindows10_2009_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 19042);
|
||||
public static bool IsWindows10_21H1 { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 19043);
|
||||
public static bool IsWindows10_21H1_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 19043);
|
||||
public static bool IsWindows11 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 22000);
|
||||
public static bool IsWindows11_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 22000);
|
||||
public static bool IsWindows11_22523 { get; } = IsWindowsNT && _osVersion == new Version(10, 0, 22523);
|
||||
public static bool IsWindows11_22523_OrGreater { get; } = IsWindowsNT && _osVersion >= new Version(10, 0, 22523);
|
||||
|
||||
public static Version GetOSVersion()
|
||||
{
|
||||
if (versionCache is null)
|
||||
{
|
||||
if (NtDll.RtlGetVersion(out var osv) != 0)
|
||||
{
|
||||
throw new PlatformNotSupportedException("Setup can only run on Windows.");
|
||||
}
|
||||
|
||||
versionCache = new Version((int)osv.dwMajorVersion, (int)osv.dwMinorVersion, (int)osv.dwBuildNumber, (int)osv.dwPlatformId);
|
||||
}
|
||||
return versionCache;
|
||||
}
|
||||
|
||||
public static void ThrowIfNotVista()
|
||||
{
|
||||
if (!IsWindowsVista_OrGreater)
|
||||
{
|
||||
throw new PlatformNotSupportedException("Only supported on Windows Vista or newer.");
|
||||
}
|
||||
}
|
||||
|
||||
public static void ThrowIfNotWin7()
|
||||
{
|
||||
if (!IsWindows7_OrGreater)
|
||||
{
|
||||
throw new PlatformNotSupportedException("Only supported on Windows 7 or newer.");
|
||||
}
|
||||
}
|
||||
|
||||
public static void ThrowIfNotXP()
|
||||
{
|
||||
if (!IsWindowsXP_OrGreater)
|
||||
{
|
||||
throw new PlatformNotSupportedException("Only supported on Windows XP or newer.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ using Fischless.GameCapture;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Interop;
|
||||
using Windows.System;
|
||||
@@ -52,6 +53,14 @@ public partial class HomePageViewModel : ObservableObject, INavigationAware, IVi
|
||||
_taskDispatcher = taskTriggerDispatcher;
|
||||
Config = configService.Get();
|
||||
ReadGameInstallPath();
|
||||
|
||||
// WindowsGraphicsCapture 只支持 Win10 18362 及以上的版本 (Windows 10 version 1903 or later)
|
||||
// https://github.com/babalae/better-genshin-impact/issues/394
|
||||
if (OsVersionHelper.IsWindows10_1903_OrGreater)
|
||||
{
|
||||
_modeNames = _modeNames.Where(x => x != CaptureModes.WindowsGraphicsCapture.ToString()).ToArray();
|
||||
}
|
||||
|
||||
WeakReferenceMessenger.Default.Register<PropertyChangedMessage<object>>(this, (sender, msg) =>
|
||||
{
|
||||
if (msg.PropertyName == "Close")
|
||||
|
||||
Reference in New Issue
Block a user