c# - C#如何正确读取/显示所有监视器
问题描述
我阅读了 PC 上的所有显示器,并且可以正常工作。问题是,结果是这样的:
戴尔 P2419HDELL P2418D
我想要这样的结果:
戴尔 P2419H、戴尔 P2418D
这是我当前的代码:
var searcher = new ManagementObjectSearcher(@"root\wmi", "SELECT * FROM WmiMonitorID");
foreach (ManagementObject ufn in searcher.Get())
{
if (ufn["UserFriendlyName"] == null)
{
monitorModel = "No description";
}
else
{
ushort[] ufnArray = (ushort[])ufn["UserFriendlyName"];
foreach (ushort ufnValue in ufnArray)
{
var ufnASCIIBytes = new byte[] { (byte)ufnValue };
monitorModel += Encoding.ASCII.GetString(ufnASCIIBytes);
}
}
}
如果我这样写代码:
monitorModel += Encoding.ASCII.GetString(ufnASCIIBytes) + ", ";
结果是
D, E, L, L, , P, 2, 4, [等等]
解决方案
这是一种将所有监视器枚举为单独名称的方法,让调用者根据需要进行字符串连接操作......我还注意到字符串末尾有一些空字符,Encoding.ASCII.GetString()
这也删除了这些字符。
void Main()
{
Console.WriteLine(string.Join(", ", EnumerateMonitors()));
}
public IEnumerable<string> EnumerateMonitors() =>
new ManagementObjectSearcher(@"root\wmi", "SELECT * FROM WmiMonitorID").Get()
.OfType<ManagementBaseObject>()
.Select(mo => string.Join(
string.Empty,
((ushort[])(mo["UserFriendlyName"] ?? "No description"))
.Select(x => Encoding.ASCII.GetString(new[] { (byte)x }).Replace("\0", string.Empty))));
推荐阅读
- facebook-messenger - Facebook Messenger 在 Rasa Core 机器人中没有给出响应
- python - 这里的ret是什么意思以及值是如何设置的
- php - 在 PHP 中修改日期的循环
- excel - VBA将word文档从excel保存为pdf
- android - 清除 ram 后使用 parcelable pass 数据得到 java.lang.ClassCastException
- android - 我如何从 Sqlite 数据库中获取选定的微调器值 ID
- windows - 未在 RDP 上调用自定义凭据提供程序 - 受限管理模式
- neo4j-browser - 在 Neo4J 浏览器中显示全名
- java - 编译器告诉我为 java 创建新文件
- powerbi - 如何消除/删除power bi中层次切片器上的空白