如何在c#.net

时间:2015-10-07 05:41:00

标签: c# .net vb.net winforms tapi


我知道这是一个已回答的问题,但我想了解所需的硬件以及如何设置。

我正在尝试构建一个外卖的传送系统,用户呼叫并在WINFORM上捕获他们的电话号码。

我用谷歌搜索,它说我需要使用TAPI API。这很好,但是我需要将任何东西连接到PC还是只使用TAPI工作?

This Link在VB.net中解释。我在c#.net中寻找它。 我还浏览了here提供的链接。

但它没有解释设置。所以请帮忙。

2 个答案:

答案 0 :(得分:3)

第一件事

  • 查看您的硬件是否支持来电显示
  • 添加串口控件,将其设置为调制解调器所在的任何通讯端口,并注意CALLER ID号,然后做出反应

要查看您的调制解调器是否支持来电显示打开串口终端(我喜欢putty)并将其设置为调制解调器的com端口,然后拨打附加到该调制解调器的电话号码,您应该会看到类似RING 5555555555的内容(其中5555555555是给您打电话的人的电话号码。

您可能必须为该调制解调器打开来电显示(如果是)

1)打开"电话和调制解调器选项"控制小组

2)点击"调制解调器"标签

3)在列表中选择您的调制解调器(如果尚未选择)

4)点击"属性"按钮

5)点击"高级"标签

6)输入"#CID = 1"进入"额外初始化命令"编辑框 注意:替换"#CID = 1"使用命令在调制解调器上启用来电显示 不要包括" AT"命令的一部分 不要包括引号 7)单击“确定”

8)单击“确定”

9)重启电脑

以下是一些与c#中的串口进行交互的代码(如果您需要)

public SerialPort sp;
string dataReceived = string.Empty;
private delegate void SetTextDeleg(string text);

private void FormLoad()
{
 sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
 this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
 sp.Open();
}

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
 try
 {
      Thread.Sleep(500);
       string x = sp.ReadLine(); // will read to the first carriage return
       this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { x });
  }
  catch
  { }
}  

private void si_DataReceived(string data)
{
  dataReceived = data.Trim();

  // Do whatever with the data that is coming in.
}

此外,我只是在亚马逊上搜索了#34;来电显示调制解调器"似乎有很多10到20美元(美国)支持这种确切用途。我推荐Trendnet TFM-561U

答案 1 :(得分:3)

如果您使用的是电话和传真调制解调器,只需将电话线插入调制解调器即可。

接下来,在您的Windows窗体上拖放SerialPort控件并初始化它。

    this.serialPort1.PortName = "COM3"; 
    this.serialPort1.BaudRate = 9600;
    this.serialPort1.DataBits = 8;
    this.serialPort1.RtsEnable = true;
    this.serialPort1.DataReceived += serialPort1_DataReceived;
    this.serialPort1.Open();      

将以下命令传递给调制解调器以激活来电显示

    this.serialPort1.WriteLine("AT#cid=1" + System.Environment.NewLine);

处理其DataReceived事件并显示收到的数据

     void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
     {
          richTextBox1.Text += this.serialPort1.ReadLine();          
     }

<强>输出:

RING               //On 1st Ring
DATE = xxxxx       //On 2nd Ring
TIME = xxxx
NMBR = xxxxxxxxx

RING               //On 3rd Ring    
RING               //On 4th Ring

P.S。如果电话线发送DTMF音作为来电显示,那么您需要DTMF到FSK转换器来检测号码,否则您将收到响铃而不是号码。