我有一台带有 Nvidia 卡和 Intel 卡的 Windows 计算机。每个 GPU 连接一个屏幕。
然后我用下面的代码列出所有的显示设备:
DISPLAY_DEVICE lDevice;
lDevice.cb = sizeof(DISPLAY_DEVICE);
int i = 0;
while (EnumDisplayDevices(NULL, i, &lDevice, EDD_GET_DEVICE_INTERFACE_NAME) != 0) {
printf(
"i: %d\n"
"cb: %d\n"
"DeviceName: %s\n"
"DeviceString: %s\n"
"StateFlags: %d\n"
"DeviceID: %s\n"
"DeviceKey: %s\n",
i,
lDevice.cb,
lDevice.DeviceName,
lDevice.DeviceString,
lDevice.StateFlags,
lDevice.DeviceID,
lDevice.DeviceKey
);
i++;
}
这是输出:
i: 0
cb: 424
DeviceName: \\.\DISPLAY1
DeviceString: Intel(R) HD Graphics 4600
StateFlags: 134217729
DeviceID:
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{3C36D58A-5C95-11EB-ACEC-B083FE9A7909}\0000
i: 1
cb: 424
DeviceName: \\.\DISPLAY2
DeviceString: Intel(R) HD Graphics 4600
StateFlags: 0
DeviceID:
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{3C36D58A-5C95-11EB-ACEC-B083FE9A7909}\0001
i: 2
cb: 424
DeviceName: \\.\DISPLAY3
DeviceString: NVIDIA GeForce GTX 1060 3GB
StateFlags: 5
DeviceID:
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{46FC15D3-C98C-11E9-ACCA-D1E7BCEC4649}\0000
i: 3
cb: 424
DeviceName: \\.\DISPLAY4
DeviceString: NVIDIA GeForce GTX 1060 3GB
StateFlags: 0
DeviceID:
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{46FC15D3-C98C-11E9-ACCA-D1E7BCEC4649}\0001
i: 4
cb: 424
DeviceName: \\.\DISPLAY5
DeviceString: NVIDIA GeForce GTX 1060 3GB
StateFlags: 0
DeviceID:
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{46FC15D3-C98C-11E9-ACCA-D1E7BCEC4649}\0002
i: 5
cb: 424
DeviceName: \\.\DISPLAY6
DeviceString: NVIDIA GeForce GTX 1060 3GB
StateFlags: 0
DeviceID:
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Video\{46FC15D3-C98C-11E9-ACCA-D1E7BCEC4649}\0003
我不明白为什么有 6 个显示设备,2 个用于 Intel 卡,4 个用于 Nvidia 卡。我想我可能误解了显示设备的概念。
完整代码如下:https://gist.github.com/tuket/0cc2f9b77a4a6a82a72655941547e292