private static bool IsWindows10OrGreater(int build = -1)
{
return WindowsVersion() >= 10 && WindowsBuildNumber() >= build;
}
public static int WindowsVersion()
{
//for .Net4.8 and Minor
#if NETFRAMEWORK
int result = 10;
var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
string[] productName = reg.GetValue("ProductName").ToString().Split((char)32);
int.TryParse(productName[1], out result);
return result;
#else
//fixed in .Net6
return System.Environment.OSVersion.Version.Major;
#endif
}
public static int WindowsBuildNumber()
{
//for .Net4.8 and Minor
#if NETFRAMEWORK
int result = 22000;
var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
string buildNumber = reg.GetValue("CurrentBuildNumber").ToString();
int.TryParse(buildNumber, out result);
return result;
#endif
#if NET
//fixed in .Net6
return System.Environment.OSVersion.Version.Build;
#endif
}
3条答案
按热度按时间lmvvr0a81#
因此,经过长时间的搜索,我终于找到了这个问题的答案。诀窍是使用
dwmapi.dll
的DwmSetWindowAttribute
,并将未记录的常量DWMWA_USE_IMMERSIVE_DARK_MODE
传递到函数中。在C#中,用于此操作的代码看起来有点像这样(既适用于WinForms,也适用于WPF):xoefb8l82#
最快的道:
xxb16uws3#
对于Jonas Kohl提供的解决方案,请记住,对于.net fw 4.8.1和更早版本,返回的版本不正确,已在.Net6中修复,此处是一个片段(.Net 5不受管):