在Nvidia卡上调用NvAPI_GPU_SetEDID

时间:2016-06-06 13:57:54

标签: c# nvidia nvapi

如何在Nvidia GPU上调用此方法:

NVAPI_INTERFACE NvAPI_GPU_SetEDID (
    NvPhysicalGpuHandle hPhysicalGpu,
    NvU32   displayOutputId,
    NV_EDID *   pEDID 
)

Src:http://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__gpu.html#ga6a41b31dd9743120213435d985f8fbcf

我需要执行上面的命令来删除新Quadro图形卡上所有DisplayOutput上设置的所有EDID。基于API文档,我尝试搜索 NvPhysicalGpuHandle 并遇到了这个项目/库:

https://github.com/openhardwaremonitor/openhardwaremonitor/blob/master/Hardware/Nvidia/NVAPI.cs

这没有我需要的方法NvAPI_GPU_SetEDID

我不是硬件程序员,我只需要能够调用这一个命令。有任何想法吗?是否可以使用nvapi.dll/nvapi64.dll通过pinvoke或其他方式实现这一目标?

1 个答案:

答案 0 :(得分:1)

我个人没有对此进行测试,但您可以尝试使用该库,看看它是否可以毫无问题地设置EDID信息,如果失败,请打开一个问题。

https://github.com/falahati/NvAPIWrapper

这是你应该怎么做的,

  1. 首先,您需要找到要写入EDID信息的正确的DisplayDeviceGPUOutput。有多种方法可以做到这一点。
    • 使用PhysicalGPU静态方法获取系统中所有NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs()的列表,然后根据您的逻辑选择所需的PhysicalGPU。找到正确的PhysicalGPU后,使用NvAPIWrapper.GPU.PhysicalGPU.GetDisplayDevices()方法获取该GPU的所有已连接DisplayDevice的列表,并将正确的一个存储在变量中。
    • 您也可以转到DisplayDevice,而不是搜索已连接的GPUOutput。与以前一样,您首先需要找到正确的PhysicalGPU,然后您可以使用GPUOutput属性获取所有NvAPIWrapper.GPU.PhysicalGPU.ActiveOutputs的列表,并将右GPUOutput存储在变量
    • 找到合适的DisplayDevice的另一种方法是查找所有Displays的列表。为此,您需要使用NvAPIWrapper.Display.Display.GetDisplays()静态方法。这将返回Display s的数组。然后使用NvAPIWrapper.Display.Display.DisplayDevice属性,您可以获得DisplayDevice的相应Display
  2. 找到正确的DisplayDeviceGPUOutput后,您应该使用NvAPIWrapper.GPU.PhysicalGPU.WriteEDIDData()方法。此方法允许您将存储在字节数组中的EDID数据写入之前选择的DisplayDeviceGPUOutput
  3. 注意:确保捕获NVIDIAApiException并检查NVIDIAApiException.Status属性,以防出现问题。