查看: 21255|回复: 2
打印 上一主题 下一主题

C#通过短信设备类库GSMMODEM.dll实现简单的短信发送测试软件

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-12 13:52:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
上一篇完成了一个简单了短信收发设备的C#类库《短信设备通过C#来实现API函数接口 》,提供了发送和接收短信的API函数调用。这篇提供这个API函数的使用方式,并且实现了一个简单的短信猫软件,这个小软件已经能够完成短信猫的基本功能,本文只是一个基本实现事例,如需要更多功能需要你们自己进行开发了。

上篇的项目工程文件可以生成GSMMODEM.dll文件,这个程序就是调用此文件中的方发等实现的。运行界面:



程序实现功能:自动扫描电脑串口,显示在combox控件中,供用户选择;提供两个波特率选项9600,115200(不够可以通过属性再添加);可以发送70字以内短信;按索引号读取短信;新消息到来提示;读取新消息。读信息只支持USC2编码,收到7bit编码的短信内容部分显示乱码,可以通过添加7bit编码的解码解决这一问题。

好了,开始说怎样实现它。

新建项目,添加引用 浏览选项卡,选择到GSMMODEM.dll打开,然后添加命名空间using GSMMODEM;之后就可以正常使用上一篇我们实现的类了

有关此C#类库详细信息参考:短信收发设备通过C#来实现API函数接口
  1.   private GSMModem gm = new GSMModem();    //实例化设备类
复制代码

扫描电脑串口并加入comboBox1控件:
  1.    
  2.   foreach (string s in SerialPort.GetPortNames())
  3.   {
  4.       comboBox1.Items.Add(s);
  5.   }
复制代码


  • 发送短信:

    1.    发送短信关键代码
    2. try
    复制代码

  • 读取短信:
    1.    读取短信关键代码
    2.    try
    3.     {
    4.        gm.ReadMsgByIndex(Convert.ToInt32(textBox3.Text), out msgCenter, out phone, out msg, out time);   //调用设备对象的方法 按序号读取短信
    5.        textBox4.Text = "短信中心:" + msgCenter + "\r\n" + "手机号码:" + phone + "\r\n" +
    6.                "短信内容:" + msg + "\r\n" + "发送时间:" + time.Substring(0, 4) + "-" +
    7.               time.Substring(4, 2) + "-" + time.Substring(6, 2) + " " + time.Substring(8, 2) +
    8.                ":" + time.Substring(10, 2) + ":" + time.Substring(12, 2);
    9.        label9.Text = "读取成功";
    10.      label9.ForeColor = Color.Green;
    11.   }
    12.   catch
    13.    {
    14.       label9.Text = "读取失败";
    15.       label9.ForeColor = Color.Red;
    16.       return;
    17. }
    复制代码

  • 删除短信:
    1.    删除短信关键代码
    2.    try
    3.     {
    4.        gm.DeleteMsgByIndex(Convert.ToInt32(textBox3.Text));   调用设备方法 删除
    5.    }
    6.    catch
    7.     {
    8.        label9.Text = "删除失败";
    9.        label9.ForeColor = Color.Red;
    10.       return;
    11.   }
    复制代码

  • 新短信提示:
    这一部分比较麻烦,使用委托,回调函数 还有事件 有关详细信息参考MSDN。
    1.    
    2.    //委托 收到短信的回调函数委托
    3.     delegate void UpdataDelegate();         //可以有参数,本处不需要
    4.     UpdataDelegate UpdateHandle = null;
    5.    
    6.    private void Form1_Load(object sender, EventArgs e)
    7.    {......
    8.        gm.OnRecieved += new GSMModem.OnRecievedHandler(gm_OnRecieved);
    9.    
    10.       UpdateHandle = new UpdataDelegate(UpdateLabel8);        //实例化委托
    11.    
    12.    }
    13.    
    复制代码

    gm.OnRecieved += new GSMModem.OnRecievedHandler(gm_OnRecieved);句添加事件绑定,收到短信后将自动运行gm_OnRecieved函数
    1.   void gm_OnRecieved(object sender, EventArgs e)
    2.   {
    3.       Invoke(UpdateHandle, null);
    4.   }
    复制代码

    函数内只有一句话:调用回调函数句柄UpdateHandle指向的函数
    UpdateHandle = new UpdataDelegate(UpdateLabel8); //实例化委托
    表明要调用的函数名为UpdateLabel8
    1.   void UpdateLabel8()
    2.   {
    3.       label8.Text = "有新消息";
    4.       label8.ForeColor = Color.Green;
    5.   }
    复制代码
    函数体内更改控件Text属性,提示用户有新消息到来,此处亦可直接读取短信内容
  • 读新消息:
    1.   gm.ReadMsgByIndex(gm.NewMsgIndex, out msgCenter, out phone, out msg, out time);
    复制代码

    调用序号读取短信方法:只不过序号由属性NewMsgIndex提供


参考工程附件: 简单实现软件.rar (206.92 KB, 下载次数: 5675)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
沙发
发表于 2014-10-15 16:03:46 | 只看该作者
劳驾问下,我发短信是可以的,为何收短信报错!!!
板凳
 楼主| 发表于 2014-10-17 09:24:40 | 只看该作者
kanwairen2005 发表于 2014-10-15 08:03
劳驾问下,我发短信是可以的,为何收短信报错!!!

这个我也不清楚呢,不是我写的是别人写的网上找来的,这个只能参考下,你原代码哪里出错吧。这个类库有时可以有时不行的,只能作参考使用,实际使用你需要适当的修改代码了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|未来时代科技 ( 粤ICP备12044031号-1

GMT+8, 2024-4-27 10:17 , Processed in 0.075036 second(s), 31 queries .

Powered by WLSD X3.1

© 2013-2014 WLSD Inc.

快速回复 返回顶部 返回列表
 
【电话】(15118131494)
【QQ】 未来时代科技01 售前咨询
【QQ】 未来时代科技02 售后技术
【旺旺】 请问有什么可以帮到您?不在线可留言.
【邮箱】
inextera@sina.com
【地址】 (深圳市龙岗坂田扬马小区)