Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как прочитать из модема?

01.01.2007

После предварительной настройки переменных, COM порт открывается как обычный файл. Так же пример показывает, как очищать буфер COM порта и читать из него.

Var 
PortSpec : array[0..255] of char;
PortNo   : Word;
success
: Boolean;
error
:integer;
begin
FillChar(PortSpec,Sizeof(PortSpec),#0);
StrPCopy(PortSpec,'Com1:19200,n,8,1');
PortSpec[3]:=Char(Ord(PortSpec[3])+Ord(PortNo));
 
if not BuildCommDCB(PortSpec,Mode) Then
 
Begin
//какая-то ошибка...
 
Exit;
 
End;
 
PortSpec[5]:=#0;    { 'Com1:' }
 
Mode.Flags:=EV_RXCHAR +   EV_EVENT2;  { $1001 }
 
 
Com := CreateFile(PortSpec,GENERIC_READ or GENERIC_WRITE,
                   
0,    //* comm устройство открывается с эксклюзивным доступом*/
                   
Nil, //* нет security битов */
                    OPEN_EXISTING
, //* comm устройства должны использовать OPEN_EXISTING*/
                   
0,    //* not overlapped I/O */
                   
0  //* hTemplate должен быть NULL для comm устройств */
                     
);
 
if Com = INVALID_HANDLE_VALUE then Error := GetLastError;
 
Success := GetCommState(Com,Mode);
 
 
if not Success then  // Обработчик ошибки.
 
begin
 
 
end;
 
 
Mode.BaudRate := 19200;
 
Mode.ByteSize := 8;
 
Mode.Parity := NOPARITY;
 
Mode.StopBits := ONESTOPBIT;//нужен был для перезаписи в NT
 
 
Success := SetCommState(Com, Mode);
 
 
if not Success then  // Обработчик ошибки.
 
begin
 
 
end;
end;

Переменная "com" типа dword.

Вы так же можете очистить буфер COM порта PurgeComm(Com,PURGE_RXCLEAR or PURGE_TXCLEAR); И прочитать из него

Function ReadCh(Var Ch:Byte):dword; 
var
n
: dword;
Begin
 
Readfile(Com,ch,1,result,nil);
End;

Взято из https://forum.sources.ru