
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.233.221.90] |
![]() |
|
Сообщ.
#1
,
|
|
|
Не подскажет ли кто как работать с модемом на Delphi? Конкретно: как заставить дозвониться/ответить, переслать/принять данные... (хотя-бы байт
![]() Подскажите протоколы, которые использует модем? Это сообщение было перенесено сюда или объединено из темы "Как работать с модемом в Delphi..." |
Сообщ.
#2
,
|
|
|
Если хочешь использовать модем на низком уровне грамотнее было бы использовать TAPI (читай Microsoft Windows Telephony API Programmer's reference).
-- Но можно и руками ;-) Открыть СОМ порт (есть компоненты для работы с СОМ портами)и давать модему AT команды (найди где ни будь описание АТ команд). Например, что бы дозвонится по номеру 1234567 напишешь: Port.Send('ATDP1234567') Это сообщение было перенесено сюда или объединено из темы "Как работать с модемом в Delphi..." |
Сообщ.
#3
,
|
|
|
Ну например есть такой пример, позволяющий проверить состояние модема (состояние его регистров)под Win32.
procedure TForm1.Button1Click(Sender: TObject); var CommPort : string; hCommFile : THandle; ModemStat : DWord; begin CommPort := 'COM2'; {Открываем COM порт} hCommFile := CreateFile(PChar(CommPort), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hCommFile = INVALID_HANDLE_VALUE then begin ShowMessage('Unable to open '+ CommPort); exit; end; {Get the Modem Status} if GetCommModemStatus(hCommFile, ModemStat) <> false then begin if 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 <> 0then ShowMessage('The ring indicator is on.'); if ModemStat and MS_RLSD_ON <> 0 then ShowMessage('The RLSD (receive-line-signal-detect) is on.'); end; {закрываем COM порт} CloseHandle(hCommFile); end; |
![]() |
Сообщ.
#4
,
|
|
А вот, например, как устанавливать настройки ком порта под Виндами:
procedure TForm1.Button1Click(Sender: TObject); var CommPort : string; hCommFile : THandle; Buffer : PCommConfig; size : DWORD; begin CommPort := 'COM1'; {Open the comm port} hCommFile := CreateFile(PChar(CommPort), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hCommFile=INVALID_HANDLE_VALUE then begin ShowMessage('Unable to open '+ CommPort); exit; end; {Allocate a temporary buffer} GetMem(Buffer, sizeof(TCommConfig)); {Get the size of the CommConfig structure} {as it may be different than documented} size := 0; GetCommConfig(hCommFile, Buffer^, size); {Free the temporary buffer} FreeMem(Buffer, sizeof(TCommConfig)); {Allocate the CommConfig structure} GetMem(Buffer, size); GetCommConfig(hCommFile, Buffer^, size); {Change the baud rate} Buffer^.dcb.BaudRate := 1200; {Set the comm port to the new configuration} SetCommConfig(hCommFile, Buffer^, size); {Free the buffer} FreeMem(Buffer, size); {Close the comm port} CloseHandle(hCommFile); end; А модему, наверное, надо отправлять простые команды (его, модемные) через COM порт. |
Сообщ.
#5
,
|
|
|
Спасибо всем, кто откликнулся. Теперь я умею дозваниваться и передавать строку текста по модему методом WriteFile(). Сложность возникла при чтении с модема - не могу :-( Как мне получить данные? Подскажите еще протоколы работы (или ССЫЛКИ, где можно покопать.) ПЛИЗ!!!
Это сообщение было перенесено сюда или объединено из темы "RE: Как работать с модемом в Delphi..." |
Сообщ.
#6
,
|
|
|
Если тебе нравиться программировать ручками смотри:
http://msdn.microsoft.com/library/techart/msdn_serial.htm Лучше всего найди компонент для работы с СОМ портом. У меня есть пару, самые мелкие кину счас тебе мылом... Это сообщение было перенесено сюда или объединено из темы "RE: Как работать с модемом в Delphi..." |