Hola Amiguitos delphineros.
Bueno hoy estoy con un problemita con un modem.
Tengo que hacer una llamada a un telefono, Utilizando el modem del PC
el tema es el siguiente.. eh descartado la Utilizacion de la TAPI (telephone API) ya que esta por defecto envia unos mensajes que el usuario no quere ver.
Entonces lo que hice fue.. Abrir el puerto, y enviar los datos de manera manual. (nada del otro mundo)
pero tengo un problema. no puedo OBTENER EL ESTADO DEL MODEM. si esta llamando mas precisamente.
Bueno aca les dejo el Codigo (esto, solo llama a un numero y deja la informacion en un MEMO)..
Los nombes son por defecto (memo1. edit1,2 button..) para que no halla que hacer demasiados cambios.
Si quieren informacion sobre los Comandos del modem. aca dejo un linck
http://www.usr.com/support/3cxm756/3...-ug/atcoms.htm
Código Delphi
[-]
var
Form1: TForm1;
N:string;
ComFile: THandle;
implementation
{$R *.DFM}
function OpenCOMPort: Boolean;
var
DeviceName: array[0..80] of Char;
begin
StrPCopy(DeviceName, 'COM'+n+':');
ComFile := CreateFile(@DeviceName,
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if ComFile = INVALID_HANDLE_VALUE then
Result := False
else
Result := True;
end;
function SetupCOMPort: Boolean;
const
RxBufferSize = 256;
TxBufferSize = 256;
var
DCB: TDCB;
Config: string;
CommTimeouts: TCommTimeouts;
begin
Result := True;
if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
Result := False;
if not GetCommState(ComFile, DCB) then
Result := False;
Config := '115200,n,8,1';
if not BuildCommDCB(@Config[1], DCB) then
Result := False;
if not SetCommState(ComFile, DCB) then
Result := False;
with CommTimeouts do
begin
ReadIntervalTimeout := 0;
ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 5000;
WriteTotalTimeoutMultiplier := 0;
WriteTotalTimeoutConstant := 5000;
end;
if not SetCommTimeouts(ComFile, CommTimeouts) then
Result := False;
end;
procedure SendText(s: string);
var
BytesWritten: DWORD;
r:boolean;
begin
s := s + #13;
r:=WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);
end;
Function ReadText: string;
var
d: array[1..80] of Char;
s: string;
BytesRead, i: DWORD;
begin
Result := '';
if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
begin
end;
s := '';
for i := 1 to BytesRead do
s := s + d[i];
Application.ProcessMessages;
Result := s;
end;
procedure CloseCOMPort;
begin
CloseHandle(ComFile);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=trim(edit1.text);
If OpenCOMPort then
Memo1.Lines.add('Open: TRUE')
else
Memo1.Lines.add('Open: false');
if SetupCOMPort then
Memo1.Lines.Add('setup: TRUE')
else
Memo1.Lines.Add('setup: FALSE');
Application.ProcessMessages;
SendText('ATZ');
Application.ProcessMessages;
Memo1.Lines.add('send ATZ');
memo1.lines.Add('Receivded: '+ReadText);
Application.ProcessMessages;
sendtext('+++');
Application.ProcessMessages;
Memo1.Lines.add('send +++');
Application.ProcessMessages;
memo1.lines.Add('Receivded: '+ReadText);
Application.ProcessMessages;
Memo1.Lines.add('send ATL0M1X3');
SendText('ATL0M1X3');
Application.ProcessMessages;
Application.ProcessMessages;
memo1.lines.Add('Receivded: '+ReadText);
SendText('ATDT'+Edit2.text);
Application.ProcessMessages;
Memo1.Lines.add('send ATDT '+Edit2.text);
Application.ProcessMessages;
memo1.lines.Add('Receivded: '+ReadText);
Application.ProcessMessages ;
memo1.lines.Add('Receivded: '+ReadText);
Application.ProcessMessages ;
Application.ProcessMessages;
memo1.lines.Add('Receivded: '+ReadText);
Application.ProcessMessages;
Application.ProcessMessages;
memo1.lines.Add('Receivded: '+ReadText);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SendText('ATH');
CloseCOMPort;
end;
end.
Saludos!!