{
This tip uses the API of Windows to determine
if a this available certain COM.
Port: COM1, COM2, COM3...
}function ComPortAvailable(Port: PChar): Boolean;
var
DeviceName: array[0..80] of Char;
ComFile: THandle;
begin
StrPCopy(DeviceName, Port);
ComFile := CreateFile(DeviceName, GENERIC_READ or GENERIC_WRITE, 0, nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
Result := ComFile <> INVALID_HANDLE_VALUE;
CloseHandle(ComFile);
end;
procedure TForm1.Button1Click(Sender: TObject);
beginif ComPortAvailable('COM1:') then
ShowMessage('Port available')
else
ShowMessage('Port not available');
end;
Программный код на Delphi, предназначенный для проверки доступности конкретного порта COM (в этом случае 'COM1:'). Код разбивается на функцию ComPortAvailable и процедуру TForm1.Button1Click.
Функция ComPortAvailable
Эта функция принимает строковый параметр Port, представляющий имя порта COM (например, 'COM1:', 'COM2:', и т.д.). Она возвращает булевое значение, указывающее доступен ли указанный порт COM.
Функция работает следующим образом:
Копирует входной параметр Port в массив DeviceName с помощью StrPCopy.
Создает файловый дескриптор для указанного порта COM с помощью CreateFile. Флаги GENERIC_READ и GENERIC_WRITE позволяют чтение и запись в порт соответственно.
Проверяет, является ли созданный файловый дескриптор валидным, сравнивая его с INVALID_HANDLE_VALUE. Если он не является недопустимым (т.е., валидным), функция возвращает True, указывая, что порт COM доступен.
Закрывает файловый дескриптор с помощью CloseHandle.
Процедура TForm1.Button1Click
Эта процедура вызывается при клике кнопки с надписью 'Button1'. Она вызывает функцию ComPortAvailable с параметром 'COM1:', представляющим порт COM для проверки.
Если возвращенное значение равно True, она отображает сообщение с текстом "Port available". В противном случае, она отображает сообщение с текстом "Port not available".
Альтернативное решение
Вместо использования функции CreateFile и проверки недопустимых значений дескриптора файлового handles, можно использовать Windows API-функцию GetLastError, чтобы проверить, возникло ли ошибку при создании файла. Это может быть более надежным и понятным подходом.
Обновленная реализация:
functionComPortAvailable(Port:PChar):Boolean;varDeviceName:array[0..80]ofChar;beginStrPCopy(DeviceName,Port);varHandle=CreateFile(DeviceName,GENERIC_READorGENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);ifGetLastError()<>0thenbeginResult:=False;// COM port is not availableendelsebeginCloseHandle(Handle);Result:=True;// COM port is availableend;end;procedureTForm1.Button1Click(Sender:TObject);beginifComPortAvailable('COM1:')thenShowMessage('Port available')elseShowMessage('Port not available');end;
Используя GetLastError для проверки ошибок, можно упростить код и сделать его более читаемым.
Определить доступность конкретного COM-порта на компьютере с помощью функции ComPortAvailable, разработанной на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.