|
上一篇完成了一个简单了短信收发设备的C#类库《短信设备通过C#来实现API函数接口 》,提供了发送和接收短信的API函数调用。这篇提供这个API函数的使用方式,并且实现了一个简单的短信猫软件,这个小软件已经能够完成短信猫的基本功能,本文只是一个基本实现事例,如需要更多功能需要你们自己进行开发了。
上篇的项目工程文件可以生成GSMMODEM.dll文件,这个程序就是调用此文件中的方发等实现的。运行界面:
程序实现功能:自动扫描电脑串口,显示在combox控件中,供用户选择;提供两个波特率选项9600,115200(不够可以通过属性再添加);可以发送70字以内短信;按索引号读取短信;新消息到来提示;读取新消息。读信息只支持USC2编码,收到7bit编码的短信内容部分显示乱码,可以通过添加7bit编码的解码解决这一问题。
好了,开始说怎样实现它。
新建项目,添加引用 浏览选项卡,选择到GSMMODEM.dll打开,然后添加命名空间using GSMMODEM;之后就可以正常使用上一篇我们实现的类了
有关此C#类库详细信息参考:短信收发设备通过C#来实现API函数接口
- private GSMModem gm = new GSMModem(); //实例化设备类
复制代码
扫描电脑串口并加入comboBox1控件:
-
- foreach (string s in SerialPort.GetPortNames())
- {
- comboBox1.Items.Add(s);
- }
复制代码
- 发送短信:
- 读取短信:
- 读取短信关键代码
- try
- {
- gm.ReadMsgByIndex(Convert.ToInt32(textBox3.Text), out msgCenter, out phone, out msg, out time); //调用设备对象的方法 按序号读取短信
- textBox4.Text = "短信中心:" + msgCenter + "\r\n" + "手机号码:" + phone + "\r\n" +
- "短信内容:" + msg + "\r\n" + "发送时间:" + time.Substring(0, 4) + "-" +
- time.Substring(4, 2) + "-" + time.Substring(6, 2) + " " + time.Substring(8, 2) +
- ":" + time.Substring(10, 2) + ":" + time.Substring(12, 2);
- label9.Text = "读取成功";
- label9.ForeColor = Color.Green;
- }
- catch
- {
- label9.Text = "读取失败";
- label9.ForeColor = Color.Red;
- return;
- }
复制代码
- 删除短信:
- 删除短信关键代码
- try
- {
- gm.DeleteMsgByIndex(Convert.ToInt32(textBox3.Text)); 调用设备方法 删除
- }
- catch
- {
- label9.Text = "删除失败";
- label9.ForeColor = Color.Red;
- return;
- }
复制代码
- 新短信提示:
这一部分比较麻烦,使用委托,回调函数 还有事件 有关详细信息参考MSDN。
-
- //委托 收到短信的回调函数委托
- delegate void UpdataDelegate(); //可以有参数,本处不需要
- UpdataDelegate UpdateHandle = null;
-
- private void Form1_Load(object sender, EventArgs e)
- {......
- gm.OnRecieved += new GSMModem.OnRecievedHandler(gm_OnRecieved);
-
- UpdateHandle = new UpdataDelegate(UpdateLabel8); //实例化委托
-
- }
-
复制代码
gm.OnRecieved += new GSMModem.OnRecievedHandler(gm_OnRecieved);句添加事件绑定,收到短信后将自动运行gm_OnRecieved函数
- void gm_OnRecieved(object sender, EventArgs e)
- {
- Invoke(UpdateHandle, null);
- }
复制代码
函数内只有一句话:调用回调函数句柄UpdateHandle指向的函数
UpdateHandle = new UpdataDelegate(UpdateLabel8); //实例化委托
表明要调用的函数名为UpdateLabel8
- void UpdateLabel8()
- {
- label8.Text = "有新消息";
- label8.ForeColor = Color.Green;
- }
复制代码 函数体内更改控件Text属性,提示用户有新消息到来,此处亦可直接读取短信内容 - 读新消息:
- gm.ReadMsgByIndex(gm.NewMsgIndex, out msgCenter, out phone, out msg, out time);
复制代码
调用序号读取短信方法:只不过序号由属性NewMsgIndex提供
参考工程附件:
简单实现软件.rar
(206.92 KB, 下载次数: 5931)
|
|