Asunto: Marcar número de teléfono con Delphi en un PC con un modem
¿existe alguna forma de realizar una marcación de un número de teléfono en un PC? me gustaría poder hacerlo sin utilizar componentes externos.
Tengo un módem conectado al PC mediante tarjeta PCI, este modem está conectado a la línea telefónica normal. Tengo una aplicación realizada en Delphi que tiene una ventana de "Contactos", me gustaría poner un botón de "marcar" que cuando se pulse marque el teléfono del contacto en el módem, de esta forma realizaría la llamada automáticamente y sería suficiente con descolgar el teléfono más cercano para continuar la llamada ¿no? ¿hay alguna forma de hacerlo?
Publicado:
Jue Mar 29, 2007 8:14 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Marcar número de teléfono con Delphi en un PC con un mod
Anuncios
varios escribió:
¿existe alguna forma de realizar una marcación de un número de teléfono en un PC? me gustaría poder hacerlo sin utilizar componentes externos.
Tengo un módem conectado al PC mediante tarjeta PCI, este modem está conectado a la línea telefónica normal. Tengo una aplicación realizada en Delphi que tiene una ventana de "Contactos", me gustaría poner un botón de "marcar" que cuando se pulse marque el teléfono del contacto en el módem, de esta forma realizaría la llamada automáticamente y sería suficiente con descolgar el teléfono más cercano para continuar la llamada ¿no? ¿hay alguna forma de hacerlo?
Sí hay funciones para ello, te indicamos una de ellas, te ponemos todo el código fuente de una aplicación de ejemplo que hemos realizado:
function existeTelefono (telefonoComp : string) : Boolean;
var
telefonos : string;
listaTelf : TStringList;
posicion : integer;
begin
telefonos := ExtractFilePath (Application.ExeName) + 'telefonos.txt';
listaTelf := TStringList.Create;
listaTelf.LoadFromFile(telefonos);
listaTelf.Sort;
Result := listaTelf.Find(telefonoComp, posicion);
end;
procedure TformMenuPrincipal.bColgarClick(Sender: TObject);
begin
try
CloseHandle(hCommFile);
except
end;
end;
procedure TformMenuPrincipal.FormCreate(Sender: TObject);
var
telefonos : string;
begin
telefonos := ExtractFilePath (Application.ExeName) + 'telefonos.txt';
if FileExists(telefonos) then
txtNumeroTelefono.Items.LoadFromFile(telefonos);
txtPuerto.Text := 'COM3';
if ParamStr(1) <> '' then
txtNumeroTelefono.Text := ParamStr(1);
if ParamStr(2) <> '' then
txtPuerto.Text := UpperCase (ParamStr(2));
if txtNumeroTelefono.Text <> '' then
bMarcarClick(Self);
end;
procedure TformMenuPrincipal.txtNumeroTelefonoKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then
bMarcarClick(Self);
end;
procedure TformMenuPrincipal.bMarcarClick(Sender: TObject);
var
numeroTelefono : string;
puerto : string;
numeroBytesEscritos : cardinal;
telefonos : string;
listaTelefonos : TStringList;
begin
if not existeTelefono(txtNumeroTelefono.Text) then
begin
telefonos := ExtractFilePath (Application.ExeName) + 'telefonos.txt';
listaTelefonos := TStringList.Create;
if FileExists(telefonos) then
listaTelefonos.LoadFromFile(telefonos);
listaTelefonos.Add (txtNumeroTelefono.Text);
listaTelefonos.SaveToFile(telefonos);
end;
if txtNumeroTelefono.Text = '' then
MessageDlg('Debe indicar el número de teléfono fijo o móvil a marcar.',
mtWarning, [mbok], 0)
else
begin
be.Panels[0].Text := 'Marcando ' + txtNumeroTelefono.Text + '...';
numeroTelefono := 'ATDT ' + txtNumeroTelefono.text + #13 + #10;
puerto := txtPuerto.Text;
hCommFile := CreateFile(PChar(puerto), GENERIC_WRITE, 0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if hCommFile = INVALID_HANDLE_VALUE then
begin
be.Panels[0].Text := 'Error en la conexión con ' + txtPuerto.Text;
MessageDlg ('Ha habido un error al intentar abrir el puerto: ' + puerto +
'. Compruebe que no está siendo utilizado por otra aplicación ' +
'y que es el puerto correcto.', mtWarning, [mbok], 0);
end
else
begin
numeroBytesEscritos := 0;
if WriteFile (hCommFile, PChar(numeroTelefono)^, Length(numeroTelefono),
numeroBytesEscritos, nil) = false then
begin
be.Panels[0].Text := 'Error en la conexión con ' + txtPuerto.Text;
MessageDlg ('Ha habido un error al intentar abrir el puerto: ' + puerto +
'. Compruebe que no está siendo utilizado por otra aplicación ' +
'y que es el puerto correcto.', mtWarning, [mbok], 0);
end
else
be.Panels[0].Text := 'Marcación realizada con éxito';
end;
end;
end;
procedure TformMenuPrincipal.bSalirClick(Sender: TObject);
begin
close;
end;
Asunto: Re: Marcar número de teléfono con Delphi en un PC con un mod
Anuncios
Siguiendo con nuestra filosofía de software libre, una vez más, hemos colocado la aplicación completa con el código fuente source code en Delphi 6. Esta aplicación llamada "AjpdSoft Marcación Telefónica", si quieres descargarla pulsa en el enlace de abajo:
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A