Где взять системные ключи на определенные необходимые группы устройств?

Рейтинг: 2Ответов: 0Опубликовано: 28.03.2023

Я делаю программу наподобие диспетчера устройств из Windows 10, и в процессе разработки возникла такая проблема, что не на все пункты оттуда я смог найти найти системные ключи, посмотрев информацию о них через Aida64 я сделал вывод что необходимые мне системные ключи это конкретные драйвера или группы драйверов, объединенные каким-то параметром, и вот я хотел бы узнать что с этим можно сделать. Форма у меня представляет собой listview, куда выводятся данные, и toolStripComboBox для выбора раздела, информацию о котором мы хотим получить. Что касаемо кода то в нем реализован метод для получения информации по ключу:

private void GetHardWareInfo(string key, ListView list)
    {
        list.Items.Clear();
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM " + key);
        try
        {
            foreach (ManagementObject obj in searcher.Get())
            {
                ListViewGroup listViewGroup = new ListViewGroup();
                try
                {
                    listViewGroup = list.Groups.Add(obj["Name"].ToString(), obj["Name"].ToString());
                }
                catch (Exception ex)
                {
                    listViewGroup = list.Groups.Add(obj.ToString(), obj.ToString());
                }
            
                if (obj.Properties.Count == 0)
                {
                    MessageBox.Show("Информация не была получена!");
                    return;
                }

                foreach (PropertyData data in obj.Properties)
                {
                    ListViewItem item = new ListViewItem(listViewGroup);
                    if (list.Items.Count %2 != 0)
                    {
                        item.BackColor = Color.White;
                    }
                    else
                    {
                        item.BackColor = Color.WhiteSmoke;
                    }
                    item.Text = data.Name;
                    if (data.Value != null && !string.IsNullOrEmpty(data.Value.ToString()))
                    {
                        switch (data.Value.GetType().ToString())
                        {
                            case "System.String[]":
                                string[] stringData = data.Value as string[];
                                string resStr1 = string.Empty;
                                foreach (string s in stringData)
                                {
                                    resStr1 += $"{s} ";
                                }
                                item.SubItems.Add(resStr1);
                                break;
                            case "System.UInt16[]":
                                ushort[] ushortData = data.Value as ushort[];
                                string resStr2 = string.Empty;
                                foreach (ushort u in ushortData)
                                {
                                    resStr2 += $"{Convert.ToString(u)}";
                                }
                                item.SubItems.Add(resStr2);
                                break;
                            default:
                                item.SubItems.Add(data.Value.ToString());
                                break;
                        }
                        list.Items.Add(item);
                    }
                }
            
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Информация не была получена!");
        }
    }

Также выбор ключа в зависимости от категории, которая была выбрана через интерфейс:

private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string key = string.Empty;
        switch (toolStripComboBox1.SelectedItem.ToString())
        {
            case "Батарея":
                key = "Win32_Battery";
                break;
            case "Видеоадаптеры":
                key = "Win32_VideoController";
                break;
        }
        GetHardWareInfo(key, listView1);

Вот категории, к которым ключи мне отыскать не удалось: Аудиовходы и аудиовыходы, Встроенное ПО, Камеры, Компоненты ПО, Контроллеры запоминающих устройств, Программные устройства, Системные устройства, Устройства HID (Human Interface Devices), Устройства безопасности.

Подскажите пожалуйста где к данным группам можно поискать ключи, в противном случае альтернативу решения моей проблемы. Заранее спасибо!

Ответы

Ответов пока нет.