C#检测座机来电号码实现来电弹屏的实现方法

在我们的程序开发中,有些行业用到座机的来电弹屏,而C#作为微软的一个重要开发工具,应用广泛,本代码实现了C#调用DLL实现来电弹屏(以中盛座机来电显示盒为例,该盒子稳定可靠,编程简单)。

using ServiceDesk;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinF
{
    public partial class Form1 : Form
    {      //最关键的是下面4行调用DLL的声明
        [DllImport("ZSCIDUDP.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, EntryPoint = "ZSCIDInit")]
        public static extern int ZSCIDInit(string AUDPS_IP, int AUDPS_Port, bool AIsSendState); 

        [DllImport("ZSCIDUDP.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, EntryPoint = "ZSCIDFree")]
        public static extern void ZSCIDFree(int ARef);

        public int laidianCount { get; set; }
        public int FRef { get; set; }

        public void zsinit()
        {
            FRef = ZSCIDInit("127.0.0.1", 9013, false);//第一个参数是来电后要发到UDP监听的IP,第二个参数是UDP监听的端口号
        }

        public void zsfree()
        {
            if (FRef > 0)
            {
                ZSCIDFree(FRef);
                FRef = 0;
            }
        }

        public Form1()
        {
            InitializeComponent();

            UdpLisenter(); //这里实现UDP监听
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            zsinit();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            free();
        }

        private void btn_init_Click(object sender, EventArgs e)
        {
            init();
        }

        private void btn_free_Click(object sender, EventArgs e)
        {
            free();
        }

        void init()
        {
            try
            {
                zsinit();

                btn_free.Enabled = true;
                btn_init.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ZSCIDInit异常");
            }
            finally
            {
                txt_FRef.AppendText("初始化【FRef=" + FRef + "】" + Environment.NewLine);
            }
        }

        void free()
        {
            try
            {
                txt_FRef.AppendText("释放前【FRef=" + FRef + "】" + Environment.NewLine);
                zsfree();

                btn_free.Enabled = false;
                btn_init.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ZSCIDFree异常");
            }
            finally
            {
                txt_FRef.AppendText("释放后【FRef=" + FRef + "】" + Environment.NewLine);
            }
        }

        void StateHandler(string data)
        {
            txt_state.AppendText(data.ToString() + Environment.NewLine);
        }

        private void UdpLisenter()
        {
            Task.Factory.StartNew(() =>
            {
                int updPort = 9013;

                UdpClient listener = new UdpClient(updPort);
                listener.DontFragment = true;
                listener.EnableBroadcast = true;
                IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Loopback, updPort);

                while (true)
                {
                    try
                    {
                        byte[] bytes = listener.Receive(ref RemoteIpEndPoint);
                        string data = System.Text.Encoding.Default.GetString(bytes);

                        string PhoneNumber = getnum(data);
                        writelog(PhoneNumber);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }

            }, TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness);
        }

        string getnum(string data)
        {
            string PhoneNumber = "";
            if (!string.IsNullOrWhiteSpace(data))
            {
                string[] strs = data.Split(new string[] { "\r\n" }, StringSplitOptions.None);

                foreach (string k in strs)
                {
                    string[] tttmp = k.Split(‘=‘);
                    if (tttmp.Length > 1 && tttmp[0] == "NUM")
                        PhoneNumber = tttmp[1];
                }
            }

            return PhoneNumber;
        }
        void writelog(string number)
        {
            if (!string.IsNullOrWhiteSpace(number))
            {
                txt_udprecieve.AppendText("[" + laidianCount++ + "]: " + number + " " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + Environment.NewLine);

                LaidianWriter wer = new LaidianWriter();
                wer.Push(number);
            }
        }
    }

}
时间: 2024-11-05 16:46:12

C#检测座机来电号码实现来电弹屏的实现方法的相关文章

elastix2.5&vtigercrm5.2.1来电弹屏和点击呼叫的配置

一.为vTiger访问Elastix PBX的AMI交互设置用户名口令权限 PBX>Tools>Asterisk File Editor 编辑 manager_custom.conf: (这个文件缺省不存在) [vtiger]secret=vtiger permit=0.0.0.0/255.255.255.0,,当然设置127.0.0.1也可以read = system,call,log,verbose,command,agent,user,dialplanwrite = system,cal

如何在进销存软件中实现来电弹屏

日常生活中我们在使用进销存之类的管理软件时,越来越多的用户希望能在使用软件的同时如果有客户来电,可以在电脑上显示出来电客户的信息资料,这样可以更加方便对客户的业务管理.那么如何实现这一功能呢?本文就来讲述一下在进销存中实现来电弹屏的功能. 来电通来电弹屏软件支持对接第三方管理软件,比如对接了进销存管理软件,当某个客户来电时,不仅会显示该客户的来电信息,还会显示到该客户最近的业务记录,从而更方便的了解客户信息,提高业务效率. 由于各个公司发展规模的扩大,相应的业务流量也越来越多,作为公司职员每天要

来电通来电弹屏软件几大功能特点

来电通来电弹屏软件(以下简称"来电通")顾名思义即当客户来电时,能在电脑上快速弹出客户的详细信息(如客户姓名.电话.地址)及业务记录等相关预设信息.如果来电号码是陌生号码,接听者可以在接电话的同时询问并添加客户信息,简单来说就是一款客户来电的管理软件,客户来电时电脑端就会弹出客户的详细息,了解客户才能抓住客户,这样我们才能够充分的把握客户需求,利于业务洽谈与对接,也方便了对客户的后期维护,所以来电通是一款可以帮助使用者能够更好的管理销售和服务的每个环节,为客户提供优质服务的电话管理软件

来电通来电弹屏软件的功能介绍

由于各个公司发展规模的扩大,相应的业务流量也越来越多,作为公司职员每天要接到很多不同客户的来电,也常常会出现这样一种情况:第一次联系的时候交谈甚好,客户对你的服务也是非常满意,可等客户再次打来电话咨询时,你却忘记了客户姓甚名谁:当客户二次买入的时候,却忘记了上一次的售价是多少:这样也在无形中遭到客户的反感,也从不同程度上造成客户流失.如何化解类似的尴尬呢?来电通来电弹屏软件就可以解决上述问题,下面就来介绍一下来电通来电弹屏软件的相关功能. 来电弹屏,顾名思义就是在有客户来电的时候,会将来电信息自

使用C#开发纽曼USB来电通来电弹屏客户端小结

基于CRM客户和咨询者的普遍需求,老板决定在CRM系统上加入来电弹屏功能,所谓来电弹屏,就是当一个电话打入时,电脑会弹出该电话号码对应的客户.联系人或者供应商详细信息,如果是新号码,则添加一个新的客户.     要达到这样的效果,首先需要硬件的支持,最后老板决定使用纽曼USB来电通作为电话与电脑的连接媒介,它提供二次开发接口,可以实现电脑中获取电话来电号码并弹屏.其次需要在CRM系统中预留一个接口支持根据电话号码弹出信息.由于CRM以前和某知名呼叫中心集成,所以留有这样的借口.     于是就只

来电通来电弹屏软件常见问题之标题设置及软件设置

随着来电通来电弹屏软件的广泛应用,由于不同用户对软件的操作熟练度不一,遇到的问题也是各式各样,今天就以来电通来电弹屏软件的标题设置及软件设置问题来给出详细解答: (一)很多来电通来电弹屏软件的新用户经常会遇到这样的问题,明明硬件已经安装完成,软件也是一切ok,为什么打电话的时候还是不能弹屏显示,或者客户端突然就查看不了服务端的通话情况了,究竟是什么原因呢?这就是软件设置的问题了,要检查一下软件设置中是不是没有设置侦听线路号或者侦听线路号设置错了.正常情况下,侦听线路号内要输入所要侦听的线路号(注

Android 开发总结之获取来电号码

创建一个广播事件接收者,并在清单文件中注册此文件,过滤意图为android.intent.action.PHONE_STATE在intellij中因为未提示还以为没有这个,其实是有的,增加权限android.permission.READ_PHONE_STATE <receiver android:name=".receiver.CallReceiver"> <intent-filter> <action android:name="androi

检测Linux VPS是Xen、OpenVZ还是KVM真假方法

如果大家对自己购买和使用的VPS需要检测是否为真的Xen,我们可以用如下方法进行测试.比较专业的就是用virt-what脚本进行检测.检测Linux VPS是Xen.OpenVZ还是KVM真假方法方法如下:wge thttp://people.redhat.com/~rjones/virt-what/files/virt-what-1.12.tar.gztar zxvf virt-what-1.12.tar.gzcd virt-what-1.12/./configuremake && ma

js 弹出对话框的方法总结

原文:http://www.cnblogs.com/xiaofengfeng/archive/2012/10/20/2732784.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.o