本文将告诉大家如何在 C# dotnet 里面,调用 Windows 的 EnumDisplayDevices 函数获取显示设备信息
核心代码如下
DISPLAY_DEVICEW displayDevice = default;displayDevice.cb = (uint) Marshal.SizeOf(typeof(DISPLAY_DEVICEW));
for (uint id = 0; EnumDisplayDevices(null, id, ref displayDevice, 0); id++){ var deviceName = displayDevice.DeviceName.ToString(); var deviceString = displayDevice.DeviceString.ToString(); var deviceKey = displayDevice.DeviceKey.ToString(); var deviceId = displayDevice.DeviceID.ToString();
Console.WriteLine($"EnumDisplayDevices"); Console.WriteLine($"DeviceName={deviceName}"); Console.WriteLine($"DeviceString={deviceString}"); Console.WriteLine($"DeviceKey={deviceKey}"); Console.WriteLine($"DeviceID={deviceId}"); Console.WriteLine();}
以上代码缺少的 Win32 方法定义和结构体定义是通过 CsWin32 库自动生成的,详细请看 dotnet 使用 CsWin32 库简化 Win32 函数调用逻辑
运行以上代码的控制台输出信息如下
EnumDisplayDevicesDeviceName=\\.\DISPLAY1DeviceString=Intel(R) UHD GraphicsDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{5F41D0AE-D6C9-11EF-98F4-E0364B98FD61}\0000DeviceID=PCI\VEN_8086&DEV_A780&SUBSYS_88821043&REV_04
EnumDisplayDevicesDeviceName=\\.\DISPLAY2DeviceString=Intel(R) UHD GraphicsDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{5F41D0AE-D6C9-11EF-98F4-E0364B98FD61}\0001DeviceID=PCI\VEN_8086&DEV_A780&SUBSYS_88821043&REV_04
EnumDisplayDevicesDeviceName=\\.\DISPLAY3DeviceString=Intel(R) UHD GraphicsDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{5F41D0AE-D6C9-11EF-98F4-E0364B98FD61}\0002DeviceID=PCI\VEN_8086&DEV_A780&SUBSYS_88821043&REV_04
EnumDisplayDevicesDeviceName=\\.\DISPLAY4DeviceString=Intel(R) UHD GraphicsDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{5F41D0AE-D6C9-11EF-98F4-E0364B98FD61}\0003DeviceID=PCI\VEN_8086&DEV_A780&SUBSYS_88821043&REV_04
EnumDisplayDevicesDeviceName=\\.\DISPLAY5DeviceString=OrayIddDriver DeviceDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{0FEA508F-0EAA-11F0-98F8-005056C00008}\0000DeviceID=Root\OrayIddDriver
EnumDisplayDevicesDeviceName=\\.\DISPLAY6DeviceString=OrayIddDriver DeviceDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{0FEA508F-0EAA-11F0-98F8-005056C00008}\0001DeviceID=Root\OrayIddDriver
EnumDisplayDevicesDeviceName=\\.\DISPLAY7DeviceString=OrayIddDriver DeviceDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{0FEA508F-0EAA-11F0-98F8-005056C00008}\0002DeviceID=Root\OrayIddDriver
EnumDisplayDevicesDeviceName=\\.\DISPLAY8DeviceString=OrayIddDriver DeviceDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{0FEA508F-0EAA-11F0-98F8-005056C00008}\0003DeviceID=Root\OrayIddDriver
EnumDisplayDevicesDeviceName=\\.\DISPLAY9DeviceString=OrayIddDriver DeviceDeviceKey=\Registry\Machine\System\CurrentControlSet\Control\Video\{0FEA508F-0EAA-11F0-98F8-005056C00008}\0004DeviceID=Root\OrayIddDriver
我装了向日葵了,于是显示设备会看起来更多了
本文代码放在 github 和 gitee 上,可以使用如下命令行拉取代码。我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快
先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git initgit remote add origin https://gitee.com/lindexi/lindexi_gd.gitgit pull origin d1a7014b263d956cc15edd78b8a428d264338c4f
以上使用的是国内的 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码。如果依然拉取不到代码,可以发邮件向我要代码
git remote remove origingit remote add origin https://github.com/lindexi/lindexi_gd.gitgit pull origin d1a7014b263d956cc15edd78b8a428d264338c4f
获取代码之后,进入 Workbench/CelgajayweWhilalelheyar 文件夹,即可获取到源代码
更多技术博客,请参阅 博客导航

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。