![]() |
![]() |
#1 (permalink) |
高级会员
|
![]()
如今手机已成为大众的交流工具。有关手机的程序开发越来越广泛,本节通过几个典型案例介绍怎么利用短信猫发送、接收短信、远程控制计算机、业务员销售数据采集与短信息娱乐互动平台。
案例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, string sn); //获取短信猫新的标识号码 [DllImport("dllforvc.dll", EntryPoint = "GSMModemGetSnInfoNew", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern string GSMModemGetSnInfoNew(string device, string baudrate); //获取当前通讯端口 [DllImport("dllforvc.dll", EntryPoint = "GSMModemGetDevice", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern string GSMModemGetDevice(); //获取当前通讯波特率 [DllImport("dllforvc.dll", EntryPoint = "GSMModemGetBaudrate", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern string GSMModemGetBaudrate(); //断开连接并释放内存空间 [DllImport("dllforvc.dll", EntryPoint = "GSMModemRelease", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern void GSMModemRelease(); //取得错误信息 [DllImport("dllforvc.dll", EntryPoint = "GSMModemGetErrorMsg", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern string GSMModemGetErrorMsg(); //发送短信息 [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); //接收短信息返回字符串格式为:手机号码|短信内容||手机号码|短信内容|| //RD_opt为1接收短信息后不做任何处理,0为接收后删除信息 [DllImport("dllforvc.dll", EntryPoint = "GSMModemSMSReadAll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern string GSMModemSMSReadAll(int RD_opt); } 在装载Form1窗体时,获取设备信息。代码如下: private void Form1_Load(object sender, EventArgs e) { //机器号码,当参数为空时,函数自动获取设备信息 txtJQHM.Text = GMS.GSMModemGetSnInfoNew(txtCOM.Text, txtBTL.Text); txtCOM.Text = GMS.GSMModemGetDevice(); //COM1 txtBTL.Text= GMS.GSMModemGetBaudrate(); //波特率 } 发送短信息。代码如下: private void btnSend_Click(object sender, EventArgs e) { if(txtSJHM.Text == "") { MessageBox.Show("手机号码无法为空!","提示", MessageBoxButtons.OK); txtSJHM.Focus(); return; } if(txtContent.Text=="") { MessageBox.Show("短信内容无法为空!", "提示", MessageBoxButtons.OK); txtContent.Focus(); return; } //连接设备 if(GMS.GSMModemInitNew(txtCOM.Text, txtBTL.Text, null, null, false, txtPower.Text)==false) { MessageBox.Show("设备连接失败!" + GMS.GSMModemGetErrorMsg(),"提示", MessageBoxButtons.OK); return; } // 发送短信 if (GMS.GSMModemSMSsend(null, 8, txtContent.Text, Encoding.Default.GetByteCount(txtContent.Text),txtSJHM.Text, false) == true) MessageBox.Show("短信发送成功!", "提示", MessageBoxButtons.OK); else MessageBox.Show("短信发送失败!" + GMS.GSMModemGetErrorMsg(), "提示", MessageBoxButtons.OK); } 接收短信息。代码如下: private void btnResvice_Click(object sender, EventArgs e) { //1)连接设备 if (GMS.GSMModemInitNew(txtCOM.Text, txtBTL.Text, null, null, false, txtPower.Text) == false) { MessageBox.Show("连接失败!" + GMS.GSMModemGetErrorMsg(), "提示", MessageBoxButtons.OK); return; } //2)接收短信 txtContent.Text = GMS.GSMModemSMSReadAll(1); txtSJHM.Text = txtContent.Text.Substring(0, 13); txtContent.Text = txtContent.Text.Substring(13, txtContent.Text.Length-13); }
__________________
[SIGPIC][/SIGPIC] |
![]() |
![]() |