我正在开发一个.NET核心应用程序,我需要在其中检索有关系统的尽可能多的信息。我已经设法检索了很多东西,但是,我正在努力找出GPU是否已打开Vsync。我尝试了NVIDIA GPU的NVAPI包装器,但由于尝试初始化它时会引发异常(无法加载NVAPI64.dll),因此无法使其工作。原始的NVAPI用C编写,并为此特定的东西制作包装器似乎太多了。我想必须有一种更简单的方法来获取此信息。
我还尝试使用ManagementObjectSearcher
来获取该值,如下所示,但无论VSYNC是否处于活动状态,它都不会返回:
var managementObjectSearcher = new ManagementObjectSearcher("select * from Win32_VideoController");
foreach (ManagementObject obj in managementObjectSearcher.Get())
{
foreach(var prop in obj.Properties)
{
Console.WriteLine($"Name: {prop.Name} Value: {prop.Value}");
}
}
我可以使用开源库OPENTK获得您需要的信息,该库为OpenGl提供了托管包装器,有关更多信息,请参见此处。
首先,添加与.NET核心兼容的Nuget软件包:
Install-Package OpenTK.NetStandard -Version 1.0.4
然后,您可以使用GameWindow
实例创建一个虚拟类,您将可以访问所需的信息(以及其他):
public sealed class DummyInfoGameWindow : GameWindow
{
private DummyInfoGameWindow() {}
public static DummyInfoGameWindow InitAndGetInfo()
{
return new DummyInfoGameWindow();
}
}
然后只从您的代码中调用静态方法:
static void Main(string[] args)
{
var info = DummyInfoGameWindow.InitAndGetInfo();
Console.WriteLine($"VSync enabled {info.VSync}");
Console.Read();
}
输出为:
VSync enabled On