Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 60. SerialGate.dll :: Определение доступных COM портов

Иванов Дмитрий, Июнь 2007
Статья обновлена 27 Мая 2014

Файлы к статье скачать

Продолжаем программирование COM порта с помощью библиотеки SerialGate.dll В этой статье я расскажу о том, как с помощью SerialGate.dll можно узнать номера всех COM портов установленных в Вашей системе (причем как реальных так и виртуальных) и также определить, какие из них в данный момент времени доступны для работы с ними.


Такая задача очень часто встречается, особенно при работе с виртуальными COM портами, образующимися в системе после установки каких-либо USB<->COM переходников, BlueTooth модулей и т.д. Им обычно присваиваются странные номера, например COM25. Бывает нужно узнать а сколько их уже поустанавливалось и что не мало важно - а доступен ли он для работы.

Еще чаще бывает нужно в Windows приложении сформировать пользователю список доступных COM портов, где бы он мог выбрать нужный ему порт. А как это сделать? Давайте посмотрим. Для примера рассмотрим небульшую консольную программку (консольную - т.к не хочется сильно для начала громоздить лишний код.)

Готовый проект можно найти в файлах для этой статьи.

#include <iostream>
#include <conio.h>
#include <windows.h>
#include "SerialGate.h"


void main()
{
	printf("Detect all COM ports in system:\n");


	SerialGate sg;
	PortInfo pi;
	sg.GetPortsInfo(&pi);

	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 а затем запустите эту программу, то этот порт будет показан в списке как не доступный.



© Иванов Дмитрий
Июнь 2007
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2017