Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Marcar número de teléfono con Delphi en un PC con un modem
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Marcar número de teléfono con Delphi en un PC con un modem

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Marcar número de teléfono con Delphi en un PC con un modem Responder citando

¿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?
MensajePublicado:
Jue Mar 29, 2007 8:14 pm
Top of PageVer perfil de usuario
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 Responder citando



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:

Código:

unit UnidadMenuPrincipal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Buttons, shellapi;

type
  TformMenuPrincipal = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    txtPuerto: TComboBox;
    Label2: TLabel;
    be: TStatusBar;
    bMarcar: TBitBtn;
    bColgar: TBitBtn;
    bSalir: TBitBtn;
    LWEB: TLabel;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    txtNumeroTelefono: TComboBox;
    procedure bColgarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure txtNumeroTelefonoKeyPress(Sender: TObject; var Key: Char);
    procedure bMarcarClick(Sender: TObject);
    procedure bSalirClick(Sender: TObject);
    procedure LWEBClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  formMenuPrincipal: TformMenuPrincipal;

implementation

{$R *.dfm}

var
  hCommFile : THandle;

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;

procedure TformMenuPrincipal.LWEBClick(Sender: TObject);
begin
  ShellExecute(Handle, Nil, PChar(LWEB.CAPTION),
      Nil, Nil, SW_SHOWNORMAL);
end;

end.
MensajePublicado:
Jue Mar 29, 2007 8:21 pm
Top of PageVer perfil de usuario
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 Responder citando



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:

http://www.ajpdsoft.com/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=173
MensajePublicado:
Jue Mar 29, 2007 8:32 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  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