Вы, кажется, перезаписываете свой ключ monitorname
в своей словарной записи каждый раз, когда вы выполняете итерацию. Это установит для каждого элемента одинаковое имя монитора. Попробуйте что-то вроде этого:
List<object> items = new List<object>();
DeviceSettings deviceSettings = new DeviceSettings();
List<object> deviceNames = deviceSettings.GetMonitorFriendlyName();
using (ManagementObjectCollection moc = searcher.Get())
{
var managementObjects = moc.Cast<ManagementObject>().ToArray();
ConnectedMonitor_Number = managementObjects.Length;
for (int i = 0; i < managementObjects.Length; i++)
{
object device = deviceNames[i];
ManagementObject mo = managementObjects[i];
Dictionary<string, object> item = new Dictionary<string, object>
{
{ "DefaultMonitorLength", DefaultMonitor_Width },
{ "DefaultMonitorHeight", DefaultMonitor_Height },
{ "ConnectedMonitor_Numb", Convert.ToString(ConnectedMonitor_Number) },
{ "Caption", Convert.ToString(mo["Caption"]) },
{ "Name", Convert.ToString(mo["Name"]) },
{ "Description", Convert.ToString(mo["Description"]) },
{ "DeviceID", Convert.ToString(mo["DeviceID"]) },
{ "Manufacturer", Convert.ToString(mo["Manufacturer"]) },
{ "HardwareID", string.Join(";", (string[])mo["HardwareID"]) },
{ "Status", Convert.ToString(mo["Status"]) },
{ "monitorname", Convert.ToString(device["monitorname"])}
};
items.Add(item);
}
}
Обратите внимание, что это не компилируется, потому что вы объявляете deviceNames как List<object>
, но, похоже, воспринимаете его как Dictionary<string,string>
. Есть ли актеры, которых мы не видим? Также этот ответ основан на предположении, что вы ищете только подключенные мониторы.
Обновление:
Видя, куда вы скопировали исходный код из , вам нужно вернуть свой код обратно к тому, что делал первоначальный автор. Если вам действительно нужен словарь, вам нужно выбрать ключ, который вы можете привязать к результатам поиска WMI сверху.