Пришел Новый Русский в компьютерный магазин и спрашивает:
- Братан, кто у вас тут самый крутой? Процессор?
- Нет.
- А может это...
Материнская плата??
- Нет.
- Хммм... Блин... А кто же???
- Модем.
- Он наверно такой умный???
- Да нет.
- А чеее тогда?
- У него такие связи!
procedure TForm1.Button1Click(Sender: TObject);
var
CommPort : string;
hCommFile : THandle;
ModemStat : DWord;
begin
CommPort := 'COM2';
{Open the comm port}
hCommFile := CreateFile(PChar(CommPort), GENERIC_READ, 0, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hCommFile = INVALID_HANDLE_VALUE thenbegin
ShowMessage('Unable to open '+ CommPort);
exit;
end;
{Get the Modem Status}if GetCommModemStatus(hCommFile, ModemStat) <> false thenbeginif ModemStat and MS_CTS_ON <> 0 then
ShowMessage('The CTS (clear-to-send) is on.');
if ModemStat and MS_DSR_ON <> 0 then
ShowMessage('The DSR (data-set-ready) is on.');
if ModemStat and MS_RING_ON <> 0 then
ShowMessage('The ring indicator is on.');
if ModemStat and MS_RLSD_ON <> 0 then
ShowMessage('The RLSD (receive-line-signal-detect) is on.');
end;
{Close the comm port}
CloseHandle(hCommFile);
end;
Перевод контента на русский язык:
Определение состояния модема под Win32. Код использует функцию CreateFile для открытия коммуникационного порта (в этом случае, COM2) и затем функцию GetCommModemStatus для получения статуса модема.
Функция GetCommModemStatus принимает два параметра:.handle открытого коммуникационного порта (hCommFile) и переменную для хранения статуса модема (ModemStat). Функция возвращает булевое значение, указывающее, была ли операция успешной или нет.
Переменная ModemStat - это 32-разрядное неотрицательное целое число, содержащее информацию о состоянии модема. Код проверяет конкретные флаги в переменной ModemStat с помощью битовых операций для определения статуса различных сигналов модема, таких как:
Если какой-либо из этих флагов установлен, соответствующее сообщение отображается с помощью функции ShowMessage.
Альтернативное решение использует Windows API для получения информации о модеме:
Используйте функцию CreateFile для открытия коммуникационного порта (COM2).
Используйте функцию GetCommState для получения текущего состояния модема.
Проверьте член dwModemMode структуры DCB, возвращенной функцией GetCommState, для информации о состоянии модема.
Вот пример кода:
procedureTForm1.Button1Click(Sender:TObject);varhCommFile:THandle;dc:TDCB;beginCommPort:='COM2';{Откройте коммуникационный порт}hCommFile:=CreateFile(PChar(CommPort),GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);ifhCommFile=INVALID_HANDLE_VALUEthenbeginShowMessage('Unable to open '+CommPort);exit;end;{Получите состояние модема}GetCommState(hCommFile,dc);{Проверьте режим модема}if(dc.dwModemModeandMODEM_MODE_DTR)<>0thenShowMessage('DTR is on');if(dc.dwModemModeandMODEM_MODE_CTS)<>0thenShowMessage('CTS is on');if(dc.dwModemModeandMODEM_MODE_RLSD)<>0thenShowMessage('RLSD is on');{Закройте коммуникационный порт}CloseHandle(hCommFile);end;
Обратите внимание, что это код использует структуру TDCB из Windows API для получения информации о состоянии модема. Функция GetCommState возвращает указатель на эту структуру, которая содержит различные члены, описывающие конфигурацию и состояние модема.
В статье описывается способ определения состояния модема под операционной системой Win32 с помощью процедуры TForm1.Button1Click, которая открывает коммуникационный порт, получает информацию о состоянии модема и выводит сообщение об изменении статуса.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.