1

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

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

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

我需要执行上述命令来删除我们新的 Quadro 显卡上所有 DisplayOutputs 上设置的所有 EDID。根据 API 文档,我尝试搜索NvPhysicalGpuHandle并遇到了这个项目/库:

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

这没有我需要的方法NvAPI_GPU_SetEDID

我不是硬件程序员,我只需要能够调用这个命令。有任何想法吗?这可以使用nvapi.dll/nvapi64.dllviapinvoke或其他东西来实现吗?

4

1 回答 1

2

这个我个人没有测试,但是你可以试试这个库,看看它是否可以设置EDID信息没有任何问题,如果失败,请打开一个问题。

https://github.com/falahati/NvAPIWrapper


这是你应该如何做的,

  1. 首先,您需要找到正确的DisplayDeviceGPUOutput您想要写入 EDID 信息的位置。有多种方法可以做到这一点。
    • 使用静态方法获取系统中所有PhysicalGPUs的列表,然后根据您的逻辑选择您想要的。找到正确的 后,使用该方法获取所有连接到该 GPU 的列表,并将正确的存储在变量中。NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs()PhysicalGPUPhysicalGPUNvAPIWrapper.GPU.PhysicalGPU.GetDisplayDevices()DisplayDevice
    • 除了搜索连接DisplayDevice的 s,您还可以搜索GPUOutputs。和以前一样,首先需要找到正确的PhysicalGPU,然后您可以使用该属性获取所有GPUOutputs的列表并将该权利存储在一个变量中。NvAPIWrapper.GPU.PhysicalGPU.ActiveOutputsGPUOutput
    • 找到正确DisplayDevice的另一种方法是列出所有Displays. 为此,您需要使用NvAPIWrapper.Display.Display.GetDisplays()静态方法。这将返回一个 s 数组Display。然后使用该NvAPIWrapper.Display.Display.DisplayDevice属性,可以得到对应DisplayDevice的 a Display
  2. 找到正确的DisplayDeviceor后GPUOutput,您应该使用该NvAPIWrapper.GPU.PhysicalGPU.WriteEDIDData()方法。此方法允许您将存储在字节数组中的 EDID 数据写入您之前选择的DisplayDeviceGPUOutput

注意:确保捕获NVIDIAApiException并检查NVIDIAApiException.Status财产,以防出现问题。

于 2017-04-16T20:07:16.077 回答