From 0fe47b2925f765325910a5086495b00717f79e0d Mon Sep 17 00:00:00 2001 From: Mahdi Hosseini Date: Tue, 28 Jul 2020 22:06:45 +0430 Subject: [PATCH 1/2] Get SystemVersionInfo with Interop --- src/Shared/HandyControlDemo_Shared/App.xaml.cs | 1 - .../Controls/Window/BlurWindow.cs | 10 +++++++++- .../Data/HandyControlConfig.cs | 2 -- .../Tools/Helper/ConfigHelper.cs | 3 --- .../Tools/Interop/InteropMethods.cs | 4 ++++ .../Tools/Interop/InteropValues.cs | 15 ++++++++++++++- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/Shared/HandyControlDemo_Shared/App.xaml.cs b/src/Shared/HandyControlDemo_Shared/App.xaml.cs index 57004b4e..c571c2f9 100644 --- a/src/Shared/HandyControlDemo_Shared/App.xaml.cs +++ b/src/Shared/HandyControlDemo_Shared/App.xaml.cs @@ -73,7 +73,6 @@ namespace HandyControlDemo UpdateSkin(GlobalData.Config.Skin); } - ConfigHelper.Instance.SystemVersionInfo = CommonHelper.GetSystemVersionInfo(); ConfigHelper.Instance.SetWindowDefaultStyle(); ConfigHelper.Instance.SetNavigationWindowDefaultStyle(); diff --git a/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs b/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs index 7312d86e..451bf379 100644 --- a/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs +++ b/src/Shared/HandyControl_Shared/Controls/Window/BlurWindow.cs @@ -13,10 +13,18 @@ namespace HandyControl.Controls base.OnApplyTemplate(); EnableBlur(this); } + + private static SystemVersionInfo GetSystemVersionInfo() + { + var osv = new InteropValues.RTL_OSVERSIONINFOEX(); + osv.dwOSVersionInfoSize = (uint)Marshal.SizeOf(osv); + InteropMethods.Gdip.RtlGetVersion(out osv); + return new SystemVersionInfo((int)osv.dwMajorVersion, (int)osv.dwMinorVersion, (int)osv.dwBuildNumber); + } internal static void EnableBlur(Window window) { - var versionInfo = ConfigHelper.Instance.SystemVersionInfo; + var versionInfo = GetSystemVersionInfo(); if (versionInfo < SystemVersionInfo.Windows10 || versionInfo >= SystemVersionInfo.Windows10_1903) diff --git a/src/Shared/HandyControl_Shared/Data/HandyControlConfig.cs b/src/Shared/HandyControl_Shared/Data/HandyControlConfig.cs index 4e6d9a23..10556160 100644 --- a/src/Shared/HandyControl_Shared/Data/HandyControlConfig.cs +++ b/src/Shared/HandyControl_Shared/Data/HandyControlConfig.cs @@ -2,8 +2,6 @@ { public class HandyControlConfig { - public SystemVersionInfo SystemVersionInfo { get; set; } - public string Lang { get; set; } public int TimelineFrameRate { get; set; } = 60; diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs index 8f9bfc8a..2b3662e9 100644 --- a/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs +++ b/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs @@ -37,8 +37,6 @@ namespace HandyControl.Tools } } - public SystemVersionInfo SystemVersionInfo { get; set; } - public void SetLang(string lang) { LangProvider.Culture = new CultureInfo(lang); @@ -48,7 +46,6 @@ namespace HandyControl.Tools public void SetConfig(HandyControlConfig config) { - SystemVersionInfo = config.SystemVersionInfo; SetLang(config.Lang); SetTimelineFrameRate(config.TimelineFrameRate); } diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs index fde76808..72a22351 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs @@ -703,6 +703,10 @@ namespace HandyControl.Tools.Interop [DllImport(InteropValues.ExternDll.GdiPlus, SetLastError = true, ExactSpelling = true, CharSet = CharSet.Unicode)] [ResourceExposure(ResourceScope.None)] internal static extern int GdipSaveImageToStream(HandleRef image, InteropValues.IStream stream, ref Guid classId, HandleRef encoderParams); + + [DllImport(InteropValues.ExternDll.NTdll)] + internal static extern int RtlGetVersion(out InteropValues.RTL_OSVERSIONINFOEX lpVersionInformation); + } } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs b/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs index 955fc062..44d1618d 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs @@ -17,7 +17,8 @@ namespace HandyControl.Tools.Interop GdiPlus = "gdiplus.dll", Kernel32 = "kernel32.dll", Shell32 = "shell32.dll", - MsImg = "msimg32.dll"; + MsImg = "msimg32.dll", + NTdll = "ntdll.dll"; } internal delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam); @@ -956,5 +957,17 @@ namespace HandyControl.Tools.Interop public RECT rc; public int lParam; } + + [StructLayout(LayoutKind.Sequential)] + internal struct RTL_OSVERSIONINFOEX + { + internal uint dwOSVersionInfoSize; + internal uint dwMajorVersion; + internal uint dwMinorVersion; + internal uint dwBuildNumber; + internal uint dwPlatformId; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + internal string szCSDVersion; + } } } \ No newline at end of file From f1816b895b8f1a4863363147628f53f778afaa7e Mon Sep 17 00:00:00 2001 From: Mahdi Hosseini Date: Tue, 28 Jul 2020 22:10:46 +0430 Subject: [PATCH 2/2] remove System.Management Dependency --- .../HandyControlDemo_Net_40.csproj | 1 - .../HandyControlDemo_Net_GE45.csproj | 1 - .../HandyControlDemo_Shared.projitems | 1 - .../Tools/Helper/CommonHelper.cs | 25 ------------------- 4 files changed, 28 deletions(-) delete mode 100644 src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs diff --git a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj index de147646..404f56c4 100644 --- a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj +++ b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj @@ -9,7 +9,6 @@ - diff --git a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj index 30396196..7a7c711c 100644 --- a/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj +++ b/src/Net_GE45/HandyControlDemo_Net_GE45/HandyControlDemo_Net_GE45.csproj @@ -14,7 +14,6 @@ - diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems index 9e2f6ce1..59a21ff5 100644 --- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems +++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems @@ -38,7 +38,6 @@ - Avatar.xaml diff --git a/src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs b/src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs deleted file mode 100644 index 75ef4e9c..00000000 --- a/src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Linq; -using System.Management; -using HandyControl.Data; - -namespace HandyControlDemo.Tools -{ - public class CommonHelper - { - public static SystemVersionInfo GetSystemVersionInfo() - { - var managementClass = new ManagementClass("Win32_OperatingSystem"); - var instances = managementClass.GetInstances(); - foreach (var instance in instances) - { - if (instance["Version"] is string version) - { - var nums = version.Split('.').Select(int.Parse).ToList(); - var info = new SystemVersionInfo(nums[0], nums[1], nums[2]); - return info; - } - } - return default; - } - } -} \ No newline at end of file