На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> select * from Win32_???? , помогите найти WMI клас
    боюсь комп этого не переживет:)
    и так на многи запросы комп зависает...

    думал может кто подскажет...
      таки нету вроде непосредственного WMI в свойствах которого будет метка на компорт...
      таки любоптно - как их вычисляет девайс манагер в красивом виде...
      чтото мне подсказывает что как ПнП девайс... но как оттуда вытащить имя порта...?


      цена вопроса 10 баксов :) (в пределах Украины могу выслать пополняшкой счета или еще как... спасайте :( )
        хм... похоже всетаки нарыл то чт мне нужно :)
        http://www.delphi3000.com/articles/article_4001.asp?SK=
        если кому интересно.. правда не на шарпе... мозгодробилка блин... думал будет проще
        Сообщение отредактировано: Fox -
          решил пойти другим путем :)

          перебираю поля USBControllerDevice (там в поле Dependent есть чтото весьма похожее на путь в реестр, откуда можно снять информацию о порте собственно)
          ExpandedWrap disabled
            public SomeScanFunc()
            {
                            ManagementClass c = new ManagementClass("Win32_USBControllerDevice");
                            foreach (ManagementObject o in c.GetInstances())
                            {
                                try
                                {
                                    string path = o["Dependent"].ToString();
                                    RegistryKey key = Registry.LocalMachine.OpenSubKey(path);
                                }
                                catch { }
                            }
            }

          только блин этот путь не совсем путь... структура поля следующая:
          ExpandedWrap disabled
            \\Имя компа\\root\\cimv2:Win32_PnPEntity.DeviceID=\"USB\\ROOT_HUB\\4&74BD3DD&0\"

          собственно часть "USB\\ROOT_HUB\\4&74BD3DD&0\" есть куском пути. :) если впереди дописать "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\" то получим полный путь в реестре для этого устройства, после чего оттуда можно выковырять инфу о присвоеном номере порта и т д

          уж больно мутно но пока так :(
          буду рад если кто поправит меня - как это сделать проще?


          и еще попутно для знатоков вопрос:
          поле Dependent класа Win32_USBControllerDevice есть ссылка на (обьект?) CIM_LogicalDevice ?
          ExpandedWrap disabled
            class Win32_USBControllerDevice : CIM_ControlledBy
            {
              uint16 AccessState;
              CIM_USBController ref Antecedent;// как получить отсюда обьект типа CIM_USBController?
              CIM_LogicalDevice ref Dependent;
              uint32 NegotiatedDataWidth;
              uint64 NegotiatedSpeed;
              uint32 NumberOfHardResets;
              uint32 NumberOfSoftResets;
            };
             
                    class CIM_LogicalDevice
                    {
                        UInt16 Availability;
                        string Caption;
                        UInt32 ConfigManagerErrorCode;
                        bool ConfigManagerUserConfig;
                        string CreationClassName;
                        string Description;
                        string DeviceID;
                        bool ErrorCleared;
                        string ErrorDescription;
                        DateTime InstallDate;
                        UInt32 LastErrorCode;
                        string Name;
                        string PNPDeviceID;
                        UInt16[] PowerManagementCapabilities;
                        bool PowerManagementSupported;
                        string Status;
                        UInt16 StatusInfo;
                        string SystemCreationClassName;
                        string SystemName;
                    }

          собственно вопрос - как получить из длинной некрасивой строки Dependent красивый обьект класса CIM_LogicalDevice?
          первое что пришло в голову - создал класс CIM_LogicalDevice и попробовал привести [Dependent] к (CIM_LogicalDevice) :) естественно ничего не получилось :) смутно понимаю что делается это ансейфным кодом через ссылки но не понимаю как именно :)
            Столкнулся с аналогичной же проблемой, помучался :)
            Объект в итоге получить очень просто: из той строки, что он тебе выдает очень легко сформулировать очередной WQL запрос. Например,
            из строки
            ExpandedWrap disabled
              \\ACER\root\cimv2:Win32_PnPEntity.DeviceID="USBSTOR\\DISK&VEN_T.SONIC&PROD_820&REV_\\10004020200001210064&0"

            очень нетрудно создать такой запрос:
            ExpandedWrap disabled
              ManagementObjectSearcher s2 = new ManagementObjectSearcher(@"\\ACER\root\cimv2",@"SELECT * FROM Win32_PnPEntity WHERE
               DeviceID='USBSTOR\\DISK&VEN_T.SONIC&PROD_820&REV_\\10004020200001210064&0'");

            А далее, уже методом Get() получаешь коллекцию, с которой смело можно работать

            (думаю, можно еще проще сделать запрос, но пока не понял как :) )
            Сообщение отредактировано: fdevelop -
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0299 ]   [ 16 queries used ]   [ Generated: 26.04.24, 20:58 GMT ]