Вход

Регистрация
Главная
 

 

Пиротехнические пульты, пиротехническое оборудование
и пиротехника
Pyro Alex RF 48
Open Pyro SFX 8 D
Open Pyro SFX 10/120
Pyro Man 200 M
Spets 150
Приём заказов на изготовление пиротехнических пультов
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Пиропульты - Электроника Форум » Электроника » Интеграция с ПК » SerialGate.dll :: Определение доступных COM портов. (Программирование COM порта на С)
SerialGate.dll :: Определение доступных COM портов.
alexval2007Дата: Суббота, 12.12.2009, 16:48 | Сообщение # 1
Электро воспламенитель
Группа: Администраторы
Сообщений: 662
Награды: 7
Репутация: 7
Статус: Offline
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

 
Пиропульты - Электроника Форум » Электроника » Интеграция с ПК » SerialGate.dll :: Определение доступных COM портов. (Программирование COM порта на С)
Страница 1 из 11
Поиск:


Rambler's Top100 Пиротехника, салюты, фейерверки. Яндекс цитирования
www.alexval2007.ucoz.ru © 2008