SerialGate.dll :: Определение доступных COM портов. Файлы к статье (размер: 89.3 КБ)
Продолжаем программирование COM порта с помощью библиотеки SerialGate.dll В этой статье я расскажу Вам о том, как с помощью SerialGate.dll можно узнать номера всех COM портов установленных в Вашей системе (причем как реальных так и виртуальных) и также определить, какие из них в данный момент времени доступны для работы с ними.
Такая задача очень часто встречается, особенно при работе с виртуальными COM портами, образующимися в в стеме после установки каких-либо USB<->COM переходников, BlueTooth модулей и т.д. Им обычно присваиваются странные номера, например COM25. Бывает нужно узнать а сколько их уже понакстанавливалось и что не мало важно - а доступен ли он для работы.
Еще чаще бывает нужно в Windows приложении сформировать пользователю список доступных COM портов, где бы он мог выбрать нужный ему порт. А как это сделать? Давайте посмотрим. Для примера рассмотрим небольшую консольную программку (консольную - тк.к не хочется сильно для начала громоздить лишний код.)
Готовый проект можно найти в файлах для этой статьи.
#include
#include
#include
#include "SerialGate.h" void main()
{
printf("Detect all COM ports in system:\n");
SerialGate sg;
PortInfo pi;
sg.GetPortsInfo(π);
printf("Total COM ports: %d\n\n", pi.koll);
for(int i = 0; i < pi.koll; i++)
{
if(pi.p[i].Availbl == true)
printf("COM%d - free\n", pi.p[i].Id);
else
printf("COM%d - inaccessible\n", pi.p[i].Id);
}
getch();
}
Код довольно прост. Что в нем происходит? Создаем экземпляр класса SerialGate, и экземпляр специальной структуры PortInfo. Вызвав функцию класса GetPortsInfo() и передав в нее в качестве аргумента адрес на эту структуру SerialGate.dll проверит все порты системы и заполнит переданную ей структуру информацией. В составе структуры содержится поле koll, куда будет помещено общее число всех COM портов, установленных на Вашей машине. Это количество будет содержать как реальные порты (которые из материнской платы торчат наружу) так и виртуальные (существующие только в виде драйвера).
Далее в цикле выводим информацию по всем найденным портам. Помимо номера COM порта выводится также и информация о том, доступен ли данный порт сейчас для работы или нет. Например, запустив данную программу на моем компьютере я увидел следующее:
Отлично видны три реальных COM порта, которые свободны. И еще бросается в глаза целая куча каких-то "левых" портов, которые сейчас не доступны. Наличию этих портов я обязан моему BlueTooth модулю, который использует их для организации каналов связи с другими BlueTooth устройствами. Поскольку на момент запуска программы модуль был отключен, то и все порты, завязанные на драйвер этого модуля также стали не доступными. Еще хотел сказать, что если Вы, например, в другой программе откроете порт COM1 а затем запустите эту программу, то этот порт будет показан в списке как не доступный.
© Иванов Д. В.
9 июня 2007 года
www.pcports.ru