Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Протокол модема в текстовый файл


Veles ©   (2005-03-03 13:51:00) 

Подскажите пожалуйста как сохранить ответы модема в текстовый файл (в ходе выполнения программы)
Даю команду модему: АТххх и ответ выводить в допустим Memo...


WondeRu   (2005-03-03 15:50:00) [1]

Cosinus ©   (03.03.05 15:43) [10]
так... но если порт никем не открыт... сам открывай его) из своей проги!)


Cosinus   (2005-03-03 15:43:00) [2]


> WondeRu ©   (03.03.05 15:28) [9]
Насколько я понимаю, перехват ReadFile будет работать, только если этот самый ReadFile, кто-нибудь инициирует. То есть если не запущено ни одно приложение, работающее с портом, а на него (порт) данные сыпятся, то перехват ничего не даст. Или не так?


WondeRu   (2005-03-03 15:28:00) [3]

Cosinus ©   (03.03.05 15:24) [8]
банальным перехватом каким-нибудь?

перехват API функции ReadFile, думаю самый простой способ...


Cosinus   (2005-03-03 15:24:00) [4]

Сорри за OFFTOP

> WondeRu ©   (03.03.05 15:19) [5]

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


WondeRu   (2005-03-03 15:22:00) [5]

Veles   (03.03.05 13:51)

может вот это поможет... эт я ерундой страдал, когда в модем в СониЭриксоне T230 разгонял)

function SendToModem(AMessage: String): String;
var
 NumberWritten, NumberReaded: cardinal;
 a: array[0..511] of Byte;
 PhoneCommand: string;
begin
 Result := '';

 PhoneCommand := AMessage +  #13 + #10;

 NumberWritten := 0;
 if WriteFile(hCommFile,
   PChar(PhoneCommand)^,
   Length(PhoneCommand),
   NumberWritten,
   nil) = false then
 begin
   ShowMessage('Unable to write to CommPort');
 end;

 ReadFile(hCommFile, a, 512, NumberReaded, nil);

 if NumberReaded > 0 then
   begin
     SetLength(Result, NumberReaded);
     CopyMemory(@Result[1], @a, NumberReaded);
   end;
end;

procedure SetSpeed(ASpeed: Cardinal);
var
 FDCB: TDCB;
begin
 GetCommState(hCommFile, FDCB);
 FDCB.BaudRate := ASpeed;
 SetCommState(hCommFile, FDCB);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 CommPort: string;
begin
 CommPort := 'COM3';

 //-------------------Открыть порт как файл}

 hCommFile := CreateFile(PChar(CommPort),
   GENERIC_WRITE or GENERIC_READ ,
   0,
   nil,
   OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL,
   0);
 if hCommFile = INVALID_HANDLE_VALUE then
 begin
   ShowMessage('Unable to open ' + CommPort);
   exit;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 memo1.Lines.Add(SendToModem('at'));
 memo1.Lines.Add(SendToModem('at+ipr=19200'));
 SetSpeed(CBR_19200);

 memo1.Lines.Add(SendToModem('at'));
 memo1.Lines.Add(SendToModem('at&w'));
 memo1.Lines.Add(SendToModem('at+ipr=38400'));
 SetSpeed(CBR_38400);

 memo1.Lines.Add(SendToModem('at'));
 memo1.Lines.Add(SendToModem('at&w'));
 memo1.Lines.Add(SendToModem('at+ipr=57600'));
 SetSpeed(CBR_57600);

 memo1.Lines.Add(SendToModem('at'));
 memo1.Lines.Add(SendToModem('at&w'));
 memo1.Lines.Add(SendToModem('at+ipr=115200'));
 SetSpeed(CBR_115200);
end;


Cosinus   (2005-03-03 15:20:00) [6]


> Veles   (03.03.05 13:51)  
Прошу прощения за глупый ответ, но я просто вопроса не понял.
К > Anatoly Podgoretsky ©   (03.03.05 15:03) [4]
Существуют также шпионы для ком-портов
LGComSpy, PortMon и тд


WondeRu   (2005-03-03 15:19:00) [7]

Anatoly Podgoretsky ©   (03.03.05 15:03) [4]
Существуют также шпионы для ком-портов.

ага... например я пользую
Portmon http://www.sysinternals.com


Anatoly Podgoretsky   (2005-03-03 15:03:00) [8]

WondeRu ©   (03.03.05 15:01) [3]
Нет один порт нужен для связи с первым компьютером, а ко второму подключается модем. Вот на первом компьютере достаточно одного порта.
Существуют также шпионы для ком-портов.


WondeRu   (2005-03-03 15:01:00) [9]

Anatoly Podgoretsky ©   (03.03.05 13:57) [1]
Нужен виртуальный порт модема


а одного компа не хватит??? с двумя COM-портами

Anatoly Podgoretsky ©   (03.03.05 13:57) [1]
закажи разработку


например, мне ;)


Cosinus   (2005-03-03 13:58:00) [10]

Memo1.lines.append(MomedAnswer);


Anatoly Podgoretsky   (2005-03-03 13:57:00) [11]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо