![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Протокол модема в текстовый файл
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]Нужен виртуальный порт модема, закажи разработку. Или с помощью двух компьютеров, перехватывая поток байт. Тут требуется кабель и небольшая программа записи в файл всех захваченных байт.