如今手机已成为大众的交流工具。有关手机的程序开发越来越广泛,本节通过几个典型实例介绍如何利用短信猫发送、接收短信、远程控制计算机、业务员销售数据采集和短信息娱乐互动平台。
实例431 利用短信猫收发短信息
实例说明
短信猫是利用SIM卡发送短信的硬件设备,通过串口或USB接口(根据设备型号而定)与计算机相连。在程序中可以利用短信猫发送或接收短信。本例实现了利用短信猫收发短信息的功能。实例运行结果如图13.15所示。
技术要点
本例使用的是北京人大金仓信息技术有限公司的串口短信猫。在购买短信猫时会附带包括SDK的开发包,其中提供了操作短信猫的函数(封装在dllforvc.dll动态库中)。下面介绍操作短信猫的主要函数。
(1)GSMModemGetSnInfoNew函数
该函数获取短信猫注册需要的信息,代码如下:
[DllImport("dllforvc.dll",
EntryPoint = "GSMModemGetSnInfoNew",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern string GSMModemGetSnInfoNew(string device, string baudrate);
参数说明如下。
l device:通信端口,为null时系统会自动检测。
l baudrate:通讯波特率,为null时系统会自动检测。
(2)GSMModemGetDevice函数
该函数获取当前的通讯端口,代码如下:
[DllImport("dllforvc.dll",
EntryPoint = "GSMModemGetDevice",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern string GSMModemGetDevice();
(3)GSMModemGetBaudrate函数
该函数获取当前的通讯波特率,代码如下:
[DllImport("dllforvc.dll",
EntryPoint = "GSMModemGetBaudrate",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern string GSMModemGetBaudrate();
(4)GSMModemInitNew函数
该函数用于初始化短信猫。语法如下:
[DllImport("dllforvc.dll",
EntryPoint = "GSMModemInitNew",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern bool GSMModemInitNew(
string device,
string baudrate,
string initstring,
string charset,
bool swHandshake,
string sn);
参数说明如下。
l device:标识通信端口,如果为NULL,系统会自动检测。
l baudrate:标识通讯波特率,如果为NULL,系统会自动检测。
l initstring:标识初始化命令,为NULL即可。
l charset:标识通讯字符集,为NULL即可。
l swHandshake:标识是否进行软件握手,为False即可。
l sn:标识短信猫的授权号,需要根据实际情况填写。
(5)GSMModemSMSsend函数
该函数用于发送手机短信。语法如下:
[DllImport("dllforvc.dll",
EntryPoint = "GSMModemSMSsend",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern bool GSMModemSMSsend(
string serviceCenterAddress,
int encodeval,
string text,
int textlen,
string phonenumber,
bool requestStatusReport);
参数说明如下。
l serviceCenterAddress:标识短信中心号码,为NULL即可。
l encodeval:标识短信息编码格式,如果为8,表示中文短信编码。
l text:标识短信内容。
l textlen:标识短信内容的长度。
l phonenumber:标识接收短信的电话号码。
l requestStatusReport:标识状态报告。
(6)GSMModemSMSReadAll函数
该函数取得所有短信息,包括SIM卡和手机中的短信息。返回的短信内容格式为电话号码1|短信内容1||电话号码2|短信内容2||:
//接收短信息返回字符串格式为:手机号码|短信内容||手机号码|短信内容||
//RD_opt为1表示接收短信息后不做任何处理,为0表示接收后删除信息
[DllImport("dllforvc.dll",
EntryPoint = "GSMModemSMSReadAll",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern string GSMModemSMSReadAll(int RD_opt);
参数说明如下。
l RD_opt:对读取后的短信息进行处理,0表示删除,1表示不做处理。
实现过程
(1)新建一个项目,命名为Ex13_14,默认窗体为Form1。
(2)在Form1窗体中,主要添加TextBox控件和Label控件,控件的数量及用途如图13.15所示,添加两个Button控件,分别用于发送短信息和接收短信息。
(3)主要程序代码。
将所使用的函数封装在GMS类中。代码如下:
class GMS
{
//初始化gsm modem,并连接gsm modem
[DllImport("dllforvc.dll",
EntryPoint = "GSMModemInitNew",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern bool GSMModemInitNew(
string device,
string baudrate,
string initstring,
string charset,
bool swHandshake,