精华内容
下载资源
问答
  • 一个朋友接了个case,但是却临时有事要出差,所以就把部分的功能叫来做。以前一直注重于web编程,对于串口编程...这里主要是讲用serailPort来实现modem的来电显示。来电显示要依赖于具体的modem,不同的modem,...

    一个朋友接了个case,但是却临时有事要出差,所以就把部分的功能叫我来做。以前一直注重于web编程,对于串口编程还是比较陌生的,还好网上的文章不少。当然比较好的文章,有直接帮助的文章还是要数cnblogs里面的文章。把这写到博客里便于以后自己查阅,希望也能够帮到需要帮助的人。
    这里主要是讲用serailPort来实现modem的来电显示。
    来电显示要依赖于具体的modem,不同的modem,可能AT指令不一样,所以需要定义一个接口,将应用程序与硬件的耦合进行解耦。

    ContractedBlock.gifExpandedBlockStart.gifCode
    public interface IModem
        {
            
    void Open();
            
    void Close();
            
    bool SupportAT
            {
                
    get;
            }
            
    bool SupportCID
            {
                
    get;
            }
            
    event EventHandler<RingEventArgs> Ring;
        }

    这个接口定义了open,close方法,还有是否支持AT指令,是否支持来电显示,还有一个响铃事件。RingEventArgs里面包含了来电的电话号码。
    在写这个IModem的实现类时,使用的是笔记本的modem,也不知道是什么型号的,就直接用modem来命名。
    ContractedBlock.gifExpandedBlockStart.gifCode
    public class Modem : IModem
        {
            
    public event EventHandler<RingEventArgs> Ring;
            System.IO.Ports.SerialPort port 
    = null;

            
    public Modem()
            {
                port 
    = new System.IO.Ports.SerialPort();
                port.PortName 
    = Settings.Instance.GetValue("PortName""COM3");
                port.BaudRate 
    = Settings.Instance.GetValue("BaudRate"460800);
                port.DataBits 
    = 8;
                port.Parity 
    = Parity.None;
                port.StopBits 
    = StopBits.One;
                port.ReadTimeout 
    =
                    port.WriteTimeout 
    = 1000;//1S

                port.ReadBufferSize 
    =
                    port.WriteBufferSize 
    = 1024;//1K

                port.Handshake 
    = Handshake.None;
                port.ReceivedBytesThreshold 
    = 10;
                port.RtsEnable 
    = true;
                port.DtrEnable 
    = true;
                port.NewLine 
    = "\r";

                
    this.port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
            }

    上面就是端口的配置,不同的modem可能配置不同,需要根据实际的modem进行设置。
    ContractedBlock.gifExpandedBlockStart.gifCode
    public void Open()
            {
                
    if (!this.port.IsOpen)
                    
    this.port.Open();
                
    if (!SupportAT)
                    
    throw new Exception("设备不支持AT指令");
                
    if (!SupportCID)
                    
    throw new Exception("设备不支持来显");
            }
            
    public void Close()
            {
                
    if (this.port.IsOpen)
                    
    this.port.Close();
            }
            
    public bool SupportAT
            {
                
    get
                {
                    
    this.port.WriteLine("AT");
                    System.Threading.Thread.Sleep(
    500);
                    
    string result = this.port.ReadExisting();
                    
    return result.ToUpper().Contains("OK");
                }
            }
            
    public bool SupportCID
            {
                
    get
                {
                    
    string[] commandList = Settings.Instance.SectionValues("CID");
                    
    string result = string.Empty;
                    
    foreach (string command in commandList)
                    {
                        
    this.port.WriteLine(command);
                        System.Threading.Thread.Sleep(
    500);
                        result 
    = this.port.ReadExisting();
                        
    if (result.ToUpper().Contains("OK"))
                        {
                            
    return true;
                        }
                    }
                    
    return false;
                }
            }

    这是一些方法和属性的实现。需要注意的是在发出指令后,最好能将线程堵塞一段时间,以保证有硬件足够的时间来响应,保证能够接收到完整的回复信息。这里的System.Threading.Thread.Sleep(500);就是这个目的。
    ContractedBlock.gifExpandedBlockStart.gifCode
    void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                
    string phoneNumber = this.port.ReadExisting();
                Regex r 
    = new Regex(@"NMBR\s*=\s*[0-9]*");
                Match m 
    = r.Match(phoneNumber);

                
    string result = string.Empty;
                
    if (m != null && m.Success)
                {
                    result 
    = m.Value;
                    result 
    = result.Substring(result.IndexOf("="+ 1).Trim();
                }
                
    if (string.IsNullOrEmpty(result))
                    
    return;
                
    if (Ring != null)
                {
                    RingEventArgs eventArgs 
    = new RingEventArgs();
                    eventArgs.PhoneNumber 
    = result;
                    
    foreach (EventHandler<RingEventArgs> handler in Ring.GetInvocationList())
                    {
                        handler.Invoke(
    this, eventArgs);
                        
    if (eventArgs.Handled)
                            
    break;
                    }
                }
            }

    Ring响铃事件实际上是根据DataReceived接收到的数据进行处理,比如判断是否是来电,截取来电的号码,然后事件冒泡,触发Ring事件。不同的modem返回回来的值肯能是不一样的。上面的正则表达是可能需要再次更改。(网上查到的是 = 号的左右有空格,可是我调试的那个modem却没有)

    SerialPort 是.net 2.0才出现的。如果是.net 1.1的话可能需要使用MSCOMM

    转载于:https://www.cnblogs.com/Linjianyu/archive/2009/01/11/1373851.html

    展开全文
  • E63用柳丁来电显示

    2010-07-22 11:36:18
    非常好一款来电显示秀,一直再用,效果非常理想啊。
  • SerialPort实现modem的来电显示 一个朋友接了个case,但是却临时有事要出差,所以就把部分的功能叫来做。以 前一直注重于web编程,对于串口编程还是比较陌生的,还好网上的文章不少。当然比较好的文章,有直接...

    SerialPort实现modem的来电显示

    一个朋友接了个case,但是却临时有事要出差,所以就把部分的功能叫我来做。以 前一直注重于web编程,对于串口编程还是比较陌生的,还好网上的文章不少。当然比较好的文章,有直接帮助的文章还是要数cnblogs里面的文章。把这 写到博客里便于以后自己查阅,希望也能够帮到需要帮助的人。
    这里主要是讲用serailPort来实现modem的来电显示。
    来电显示要依赖于具体的modem,不同的modem,可能AT指令不一样,所以需要定义一个接口,将应用程序与硬件的耦合进行解耦。


    public interface IModem
        {
            
    void Open();
            
    void Close();
            
    bool SupportAT
            {
                
    get;
            }
            
    bool SupportCID
            {
                
    get;
            }
            
    event EventHandler<RingEventArgs> Ring;
        }

    这个接口定义了open,close方法,还有是否支持AT指令,是否支持来电显示,还有一个响铃事件。RingEventArgs里面包含了来电的电话号码。
    在写这个IModem的实现类时,使用的是笔记本的modem,也不知道是什么型号的,就直接用modem来命名。

    public class Modem : IModem
        {
            
    public event EventHandler<RingEventArgs> Ring;
            System.IO.Ports.SerialPort port 
    = null;

            
    public Modem()
            {
                port 
    = new System.IO.Ports.SerialPort();
                port.PortName 
    = Settings.Instance.GetValue("PortName""COM3");
                port.BaudRate 
    = Settings.Instance.GetValue("BaudRate"460800);
                port.DataBits 
    = 8;
                port.Parity 
    = Parity.None;
                port.StopBits 
    = StopBits.One;
                port.ReadTimeout 
    =
                    port.WriteTimeout 
    = 1000;//1S

                port.ReadBufferSize 
    =
                    port.WriteBufferSize 
    = 1024;//1K

                port.Handshake 
    = Handshake.None;
                port.ReceivedBytesThreshold 
    = 10;
                port.RtsEnable 
    = true;
                port.DtrEnable 
    = true;
                port.NewLine 
    = "\r";

                
    this.port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
            }

    上面就是端口的配置,不同的modem可能配置不同,需要根据实际的modem进行设置。


    public void Open()
            {
                
    if (!this.port.IsOpen)
                    
    this.port.Open();
                
    if (!SupportAT)
                    
    throw new Exception("设备不支持AT指令");
                
    if (!SupportCID)
                    
    throw new Exception("设备不支持来显");
            }
            
    public void Close()
            {
                
    if (this.port.IsOpen)
                    
    this.port.Close();
            }
            
    public bool SupportAT
            {
                
    get
                {
                    
    this.port.WriteLine("AT");
                    System.Threading.Thread.Sleep(
    500);
                    
    string result = this.port.ReadExisting();
                    
    return result.ToUpper().Contains("OK");
                }
            }
            
    public bool SupportCID
            {
                
    get
                {
                    
    string[] commandList = Settings.Instance.SectionValues("CID");
                    
    string result = string.Empty;
                    
    foreach (string command in commandList)
                    {
                        
    this.port.WriteLine(command);
                        System.Threading.Thread.Sleep(
    500);
                        result 
    = this.port.ReadExisting();
                        
    if (result.ToUpper().Contains("OK"))
                        {
                            
    return true;
                        }
                    }
                    
    return false;
                }
            }

    这是一些方法和属性的实现。需要注意的是在发出指令后,最好能将线程堵塞一段时间,以保证有硬件足够的时间来响应,保证能够接收到完整的回复信息。这里的System.Threading.Thread.Sleep(500);就是这个目的。
    复制代码


    void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                
    string phoneNumber = this.port.ReadExisting();
                Regex r 
    = new Regex(@"NMBR\s*=\s*[0-9]*");
                Match m 
    = r.Match(phoneNumber);

                
    string result = string.Empty;
                
    if (m != null && m.Success)
                {
                    result 
    = m.Value;
                    result 
    = result.Substring(result.IndexOf("="+ 1).Trim();
                }
                
    if (string.IsNullOrEmpty(result))
                    
    return;
                
    if (Ring != null)
                {
                    RingEventArgs eventArgs 
    = new RingEventArgs();
                    eventArgs.PhoneNumber 
    = result;
                    
    foreach (EventHandler<RingEventArgs> handler in Ring.GetInvocationList())
                    {
                        handler.Invoke(
    this, eventArgs);
                        
    if (eventArgs.Handled)
                            
    break;
                    }
                }
            }

    Ring 响铃事件实际上是根据DataReceived接收到的数据进行处理,比如判断是否是来电,截取来电的号码,然后事件冒泡,触发Ring事件。不同的 modem返回回来的值肯能是不一样的。上面的正则表达是可能需要再次更改。(网上查到的是 = 号的左右有空格,可是我调试的那个modem却没有)

    SerialPort 是.net 2.0才出现的。如果是.net 1.1的话可能需要使用MSCOMM

    转载于:https://www.cnblogs.com/zeroone/archive/2012/10/03/2710950.html

    展开全文
  • 简单的来电显示范例

    2006-02-23 09:05:59
    根据松景资料作了一个来电显示的实验程序。可以提取日期时间电话号码,其他功能自己可以尝试哦。需要mscomm控件支持,只是在2000上测试过
  • 一份关于单片机实现来电显示的不错概论!好想做设计!
  • modem的来电显示功能

    千次阅读 2007-09-25 19:45:00
    朋友想买个modem,来问,说是要带来电显示功能的,一下被问的不知所以然,modem的来电显示是怎么回事呢?……后来在google上搜索了一下才知道,原来moden不单单只有上网功能,还可以语音答录,来电显示等等,...

    朋友想买个modem,来问我,说是要带来电显示功能的,我一下被问的不知所以然,modem的来电显示是怎么回事呢?……
    后来在google上搜索了一下才知道,原来moden不单单只有上网功能,还可以语音答录,来电显示等等,但是现在有些厂商为了节约成本把这些功能的电路都拿掉了。
    怎么判断一块modern是否具有来电显示功能呢?下面借鉴了网上的一段介绍,我也是看了介绍才判断出朋友买的moden确实是支持来电显示的,我已经试验成功,来电果然显示在电脑上了,文章内容如下:

    实现来电显示的系统最小需求
    1.你的固定电话已经向电信运营商申请开通了来电显示功能,若没有申请,即使MODEM支持也是白搭。
    2.安装了MODEM的驱动软件。
    3.MODEM支持来电显示。关于确定MODEM是否支持来电显示的方法,下面将有介绍。
    怎么判断MODEM是不是支持来电显示?
    1. 打开超级终端,随便输入一个连接名称,比如TEST。
    2. 按确定后,下个窗口中,看到你的MODEM,不要输入电话号码。再下一步。
    3. 在这个窗口中按取消。
    4. 这样一个可以输入的空白窗口就有了。
    输入:AT回车
    如果出现OK,说明MODEM支持AT指令,不然,其他也不用试了。
    然后输入下面的命令(每条前面加上AT),只要一条反应有OK,就说明MODEM本身芯片支持来电显示。
    #CID=1
    %CCID=1
    +VCID=1
    #CC1
    *ID1
    5.如果有一条有OK,接下来,你打入电话,(事先接好电话线到MODEM)。
    如果你的MODEM真的支持来电显示,则会出现如下类似的内容:
    RING
    DATE = 0309
    TIME = 1800
    NMBR = **********(你拨入的主叫号码)
    RING
    如果你的MODEM不支持来电显示,则此时可能会显示:
    RING
    RING
    RING
    还有的MODEM,什么也不显示,那就更不可能支持来电显示了。

    展开全文
  • 电话来电显示

    2004-07-17 00:00:00
    关于电话来电显示的源码,想好东西一定要共同分享! 1)必须先安装MSComm32,Install.bat内容如下: c:windowssystem egsvr32 mscomm32.ocx regedit mscomm32.reg 2)必须到电信局申请来电显示功能,许多...
  • 取消来电显示

    2010-03-02 23:51:54
    [size=medium] 本来以为平常没有什么人给自己打电话,为了节约关闭了手机的来电显示。然而并不是很多人都认同这样做。 弟弟打电话给连问了两次你是谁,结果被说小气鬼。 吃饭的时候,跟同学说起这件事,...
    [size=medium]   本来以为平常没有什么人给自己打电话,为了节约我关闭了手机的来电显示。然而并不是很多人都认同这样做。
    弟弟打电话给我,我连问了两次你是谁,结果被说小气鬼。
    吃饭的时候,跟同学说起这件事,他们都说来电显示很重要,如果关闭会错失很多重要的电话。而我的理由是如果很重要的话,那么对方对再打过来,通常情况下,不会一直都错过,更何况很少陌生人给我电话,如果是自己熟悉的,接电话之后就能分辨是谁。至于自己取消来电显示,我是觉得一个月6块钱在我这里十足的被浪费了。所以在取消之后,我日子正常,只是偶尔会被友人说小气、吝啬。
    一直都觉得这样没什么,有天晚上我突然觉得自己这么久都没有错过谁的重要电话,难道我被这个世界忽略了?也许每个人都会有这么一段时间,在这段时间里,你就是一个小小的你,很少人会在注意你,很少人会打电话你,即使是问候下。我也曾考虑过,是否自己的交际圈子小了的缘故?还是自己某天开始就变得内向?不得而知。[/size]
    展开全文
  • 未接来电显示也是第一次听说这样,垃圾,以后再也不用M手机
  • 自定义了一个系统来电界面,当接受到来电的时候用WindowManager显示出我们的界面,当系统来电的时候,我们的来电界面会优先显示,系统的再显示,目前的问题就是,当系统界面弹出来的时候会把状态栏显示出来,该...
  • 电话来电显示源码

    2006-01-13 09:51:35
    关于电话来电显示的源码,想好东西一定要共同分享!1)必须先安装MSComm32,Install.bat内容如下: c:windowssystem egsvr32 mscomm32.ocx regedit mscomm32.reg2)必须到电信局申请来电显示功能,许多Modem不支持...
  • 电话的来电显示功能为大家辨别呼叫者是谁提供的极大的方便。固话的来电显示功能很好,但不能像手机那样直接显示出者的姓名。要是把固话的来电显示功能搬到电脑里去,那就可以帮到我们迅速了解来者的信息,对我们的...
  • 该软件采用TAPI接口开发,软件拨号功能完全正常。来电显示功能在采用外置 USB Modem大部分正常,在笔记本内部Modem基本不能得到来电号码。 测试用得USB Modem是从淘宝买的。 我的QQ:170261216
  • <p><strong>开发工具 myeclipse 7.0 JDK6.0 JRE6.0 USB来电显示盒一个 电话机一台(未开通来电显示) <br>操作系统:wimdows xp <br>想知道来电显示可以通过自己截取MODEL信号来实现吗? <br>如果能...
  • 硬件接口开发之Modem来电显示

    千次阅读 2016-06-17 13:48:22
    Modem的来电显示是在最早的送水管理软件中实现的,大概是05年完成的,由于Modem的成本比较低(普通的在100元之内),而来电显示功能在送水管理软件中比较需要,因此是一项性价比比较好的功能。  随着时间的推移...
  • 因为工作关系,我有2个号码是呼叫转移到现在的手机上的,如果有呼叫转移的来电的话,在通话界面里面没有提示该来电是呼叫转移来的。之前用的诺基亚的,可以看到呼叫转移的来电,在号码的左边有个拐弯的箭头,...
  •  通过一种手机变频软件,能够在拨号时候使对方手机上显示特定号码,以达到混淆目的。 唉,手机变频,一切皆有可能。。 转载于:https://www.cnblogs.com/jimney/archive/2009/07/25/1531078.html...
  • 我的项目是使用maven作为构建工具。左右maven如何整合jenkins请参阅: http://blog.csdn.net/yaominhua/article/details/40684355 本文仅仅介绍怎样在jenkins里面集成cobertura: 1. 首先确保你得jenkins已经...
  • 因为公司现在需要开发一套CallCenter系统,需要客户来电的时候能够自动从数据库中检索出相关资料,所以打算用C#+MSCOMM来开发,但是由于是第一次开发所以有些不知道怎么下手。比如:在Form_Load里面是这么写...
  • 项目中有个电话会议功能 发起电话会议时 需要显示一个会议操作界面 可以加人减人 结束会议的 但是发起会议的时候 系统的...没办法 我也只能把我的会议操作界面显示在window的最顶层了 直接上代码 这代码也是我从
  •  第一个版本考虑到数据量大,全部在第一次使用时初始化进数据库速度太慢太慢(18w条数据,10个线程也得要50分钟在模拟器上),所以当时是把数据放到了自己web服务器上,软件通过http去服务器上取相应数据回来...
  • 最近老是被骚扰电话骚扰,就想既然实名制了,但为何垃圾短信每天都一大堆发过来。奇怪一个qq签名想出去锻炼忽然又引起一个健身教练打过来问要不要报名?于是这种电话听还是不听好?至少证明自己信息已经卖了...
  • 除了上篇《硬件接口开发之Modem来电显》介绍的Modem来电显示,还可以采用...我的送水软件可以支持两路及以上多路的来电显示和电话录音功能,当用户有新的来电,系统会检测数据库是否存在该电话的用户,如果有那么调...
  • CustomIncomingCallScreen ... 它演示了在默认android来电屏幕顶部显示自定义视图(弹出窗口)功能。 是Android开发新手,因此此代码可能包含一些问题-如果您看到它们-请提出问题或请求请求。

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 232
精华内容 92
关键字:

我的来电显示