|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.12.2014, 18:51 | #1 |
Заблокирован
Регистрация: 24.11.2014
Сообщений: 721
|
Получение списка COM портов через wmi.
Получаю список портов стандартным способом.
Код:
|
02.01.2015, 12:29 | #2 |
Заблокирован
Регистрация: 24.11.2014
Сообщений: 721
|
Немного почитав гугл пришёл к выводу, что это проблема wmi. Решил попробовать получать список через SetupAPI. В интернете есть пример получения всех устройств. Мне же нужно получить только com устройства. Как отфильтровать поиск, не знаю. Вдруг кто подскажет?
Код:
|
19.01.2015, 12:32 | #3 |
Пользователь
Регистрация: 23.12.2009
Сообщений: 56
|
Доброго времени суток! помогите, пожалуйста, разобраться. У меня данный код FillDeviceList в Delphi 7 работает нормально, а в Delphi XE7 в DeviceName пишется какая-то абракадабра. XE7 Появился у меня относительно недавно (потребовалось работать с большими объемами данных), так что не везде его пока понимаю.
UPD: ответ для ТС в Delphi 7: Код:
Nostra Sunt
Последний раз редактировалось Daemvil; 20.01.2015 в 11:02. |
19.01.2015, 13:10 | #4 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
Попробуй
Код:
|
19.01.2015, 13:18 | #5 |
Пользователь
Регистрация: 23.12.2009
Сообщений: 56
|
Пробовал, не помогает. DeviceHelper - в нем возможно проблема, т.к. сравнивал значения переменных, а на нем Дельфи ХЕ7 пишет в Watches, что идентификатора нет, хотя он на самом деле описан в TDeviceHelper. В Дельфи 7 пишет значение не ругаясь.
Причем на этой строке ClassGUID := DeviceHelper.ClassGUID; вылезает ошибка "неверный гуид". при замене на ClassGUID := DeviceInfoData.ClassGUID; в DeviceClassName и следующем DeviceName пишется служебная инфа какая-то с кусками путей на диске %)
Nostra Sunt
Последний раз редактировалось Daemvil; 19.01.2015 в 13:21. |
19.01.2015, 13:28 | #6 |
Пользователь
Регистрация: 23.12.2009
Сообщений: 56
|
Выяснил, что "DeviceHelper" зарезервирован. Но замена на DH: TDeviceHelper; не помогла...
Nostra Sunt
|
19.01.2015, 16:09 | #7 |
Пользователь
Регистрация: 23.12.2009
Сообщений: 56
|
Поборол. По-хорошему надо весь модуль перелопатить, но мне достаточно оказалось в FillDeviceList написать "DeviceName, DeviceClassName: AnsiString;", в DeviceHelper.pas поменять везде String на AnsiString, и в функции GetString изменить строчку на REG_SZ: Result := PAnsiChar(Result);
Собственно из-за несовместимого GetString и вылезала ошибка EConvertError.
Nostra Sunt
|
20.01.2015, 09:30 | #8 |
Пользователь
Регистрация: 23.12.2009
Сообщений: 56
|
Мне подсказали, что проблема решается еще проще:
заменой двух функций: SetupDiGetClassDescriptionA -> SetupDiGetClassDescriptionW SetupDiGetDeviceRegistryPropertyA -> SetupDiGetDeviceRegistryPropertyW либо проверкой юникодности {$IFDEF UNICODE} и последующей подставкой TSetupDiGetClassDescription = TSetupDiGetClassDescriptionA; либо TSetupDiGetClassDescription = TSetupDiGetClassDescriptionW; для универсальности
Nostra Sunt
Последний раз редактировалось Daemvil; 20.01.2015 в 09:51. |
20.01.2015, 09:56 | #9 |
Заблокирован
Регистрация: 24.11.2014
Сообщений: 721
|
Daemvil Будем знать, а то я пошёл стандартным путём, и переписал SetupAPI.pas под Ansi. Кстати проблема решена. Без проблем получаю список COM
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Настройка сетевухи через WMI | ds.Dante | Общие вопросы .NET | 5 | 11.04.2012 00:30 |
Серийный номер hdd через wmi | xil | C# (си шарп) | 3 | 08.09.2011 12:04 |
Получение списка процеcсов | legendary | Win Api | 12 | 02.09.2010 18:06 |
Получение списка файлов | Костян Пират | Общие вопросы Delphi | 11 | 16.02.2009 09:58 |
получение 1 списка из 2-х | Neznau | Помощь студентам | 0 | 10.12.2008 22:16 |