短信猫软件的实现(C#)<七>短信猫(简化测试版)实现
上一篇完成了一个简单了短信猫的C#类库,提供了发送和接收短信的API提供调用。这篇提供这个API的使用方式,并且实现了一个简单的短信猫软件,这个小软件已经能够完成短信猫的基本功能。
上篇的项目工程文件可以生成GSMMODEM.dll文件,这个程序就是调用此文件中的方发等实现的。运行界面:
程序实现功能:自动扫描电脑串口,显示在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: try3: {4: gm.SendMsg(textBox1.Text, textBox2.Text); //调用设备的方法 发送短信
5: }
6: catch7: {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); //实例化委托
表明要调用的函数名为UpdateLabel81: 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提供
附件:工程项目文件