短信猫软件的实现(C#)<七>短信猫(简化测试版)实现

上一篇完成了一个简单了短信猫的C#类库,提供了发送和接收短信的API提供调用。这篇提供这个API的使用方式,并且实现了一个简单的短信猫软件,这个小软件已经能够完成短信猫的基本功能。

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

image

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

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

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

有关此C#类库详细信息参考:
短信猫软件的实现(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
 3:   {
 4:      gm.SendMsg(textBox1.Text, textBox2.Text);    //调用设备的方法 发送短信
 5:  }
 6:  catch
 7:   {
 8:      label6.Text = "发送失败";
 9:      label6.ForeColor = Color.Red;
10:      return;
11:  }
  • 读取短信:
     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提供

附件:工程项目文件

posted @ 2010-11-06 21:35  给我一杯酒  阅读(8998)  评论(19编辑  收藏  举报