`
zrj_software
  • 浏览: 201949 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

.net里使用MSComm控件发生短信

    博客分类:
  • C#
 
阅读更多

一.MSComm32.ocx控件(以下简称MSComm控件)

 

  1. MSComm控件是windows系统下的一个控件,可以实现串口通讯。该文件存在于windows\system32目录下。使用这个控件还需要修改注册表,HKEY_CLASSES_ROOT\Licenses = Licensing: Copying the keys may be a violation of established copyrights

  2. 如果您的系统提示"找不到mscomm32.ocx""mscomm32.ocx缺失" 或者"mscomm32.ocx错误"等等,请把mscomm32.ocx下载到本机。

  3. 直接拷贝该文件到系统目录里:

 

  1. Windows 95/98/Me系统,将mscomm32.ocx复制到:/Windows/System目录下。

  2. Windows NT/2000系统,将mscomm32.ocx复制到C:/WINNT/System32目录下。

  3. Windows XP/WIN7系统,将mscomm32.ocx复制到C:/Windows/System32目录下。

  4. 然后打开"开始-运行-输入regsvr32 mscomm32.ocx",回车即可!

 

  1. 注册完mscomm32.ocx后,在.net上就可以直接添加引用Interop.MSCommLib.dll,添加完后即可对com口进行操作了。

二.MSComm控件控件的使用

  1. MSComm控件的常用属性

 

  1. CommPort 设置并返回通讯端口号。

    语法:object.CommPort[=value ] (value 一整型值,说明端口号。)

    说明:在设计时,value 可以设置成从 1 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。

    注意:必须在打开端口之前设置 CommPort 属性。

     

  2. Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

    语法: object.Settings[ = value]

    说明:当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。Value 由四个设置值组成,有如下的格式:"BBBB,P,D,S"

    BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:"9600,N,8,1"

  3. InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。语法 object.InputLen [ = value]

 

InputLen 属性语法包括下列部分:value 整型表达式,说明 Input 属性从接收缓冲区中读取的字符数。

 

说明:InputLen 属性的缺省值是 0。设置 InputLen 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ("")。在使用 Input 前,用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。

 

  1. PortOpen 设置并返回通讯端口的状态,也可以打开和关闭端口。

  2. Input 从接收缓冲区返回和删除字符。 (16进制数据)

  3. Output 向传输缓冲区写一个字符串。(16进制数据)

  4. RThreshold 属性:在 MSComm 控件设置 CommEvent 属性为 comEvReceive 产生 OnComm 之前,设置并返回的要接收的字符数。

    语法:object.Rthreshold [ = value ]value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )

    说明:当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。

  5. SThreshold 属性: MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。

    语法:object.SThreshold [ = value ],value 整形表达式,代表在 OnComm 事件产生之前在传输缓冲区中的最小字符数。

    说明:若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。如果在传输缓冲区中的字符数小于 valueCommEvent 属性设置为 comEvSend,并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。

  6. EOFEnable 属性:确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符,将停止输入并激活 OnComm 事件,此时 CommEvent 属性设置为 comEvEOF

    语法:object.EOFEnable [ = value ]

    EOFEnable 属性语法包括下列部分:

    value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如设置值中所描述。

    value 的设置值:

    True EOF 字符找到时 OnComm 事件被激活。

    False (缺省)当 EOF 字符找到时 OnComm 事件不被激活。

    说明:当 EOFEnable 属性设置为 FalseOnComm 控件将不在输入流中寻找 EOF 字符。

三.示例

 

初始化MSComm控件

 

private static MSCommLib.MSCommClass smsClass = null;

 

  1. private static void InitComm()

  2.         {

  3.             if (_sCommState == 1)//已初始化则不需再初始化返回

  4.                 return;

  5.             try

  6.             {

  7.                 smsClass = new MSCommClass();

  8.                 smsClass.CommPort = short.Parse(SmsSetting.SmsPort);

  9.                 smsClass.Settings = SmsSetting.Smsbit + ",N,8,1";

  10.                 smsClass.InputLen = 0;

  11.                 smsClass.RThreshold = 1;

  12.                 smsClass.OnComm += new DMSCommEvents_OnCommEventHandler(smsClass_OnComm);

  13.                 smsClass.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;

  14.  

  15.                 if (smsClass.PortOpen == false)

  16.                 {

  17.                     try

  18.                     {

  19.                         smsClass.PortOpen = true;

  20.                     }

  21.                     catch (Exception ex)

  22.                     {

  23.                     }

  24.                 }

  25.  

  26.                 _sCommState = 1;

  27.             }

  28.             catch(Exception ex)

  29.             {

  30.                 StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);

  31.                 sw.WriteLine("InitComm" + System.DateTime.Now.ToString());

  32.                 sw.WriteLine("error:" + ex.Message);

  33.                 sw.Close();

  34.             }

  35.         }

     

     

    发送短信

 

  1. ///<summary>

  2.         ///发送短信

  3.         ///</summary>

  4.         ///<param name="sPhone">手机号</param>

  5.         ///<param name="sContent">发送内容</param>

  6.         ///<param name="sMessage">返回信息</param>

  7.         ///<returns>发送成功返回1,失败返回0</returns>

  8.         public static int SendSmsMessage(string sPhone, string sContent, string sMailName, string sModule, out string sMessage)

  9.         {

  10.             sMessage = "";

  11.             try

  12.             {

  13.                 SmsSetting.InitComm();

  14.  

  15.                 try

  16.                 {

  17.                     Byte[] btPhone = Encoding.ASCII.GetBytes(sPhone);

  18.                     Byte[] btContent = Encoding.Unicode.GetBytes(sContent);

  19.                     int nCount = btPhone.Length + btContent.Length + 2;

  20.                     Byte[] btSend = new Byte[nCount];

  21.                     btSend[0] = 0xAA;

  22.                     btSend[1] = 0x01;

  23.  

  24.                     int i = 0;

  25.                     for (i = 0; i < btPhone.Length; i++)

  26.                     {

  27.                         btSend[i + 2] = btPhone[i];

  28.                     }

  29.  

  30.                     for (int j = 0; j < btContent.Length; j = j + 2)

  31.                     {

  32.                         btSend[i + 2 + j] = btContent[j + 1];

  33.                         btSend[i + 2 + j + 1] = btContent[j];

  34.                     }

  35.  

  36.                     smsClass.Output = btSend;

  37.                     

  38.                     StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);

  39.                     sw.WriteLine("sendtime:" + System.DateTime.Now.ToString());

  40.                     sw.WriteLine("sPhone" + sPhone);

  41.                     sw.WriteLine("sContent:" + sContent);

  42.                     sw.Close();

  43.                 }

  44.                 catch (Exception ex)

  45.                 {

  46.                     sMessage = ex.ToString();

  47.                     StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);

  48.                     sw.WriteLine("SendSmsMessage" + System.DateTime.Now.ToString());

  49.                     sw.WriteLine("error:" + sMessage);

  50.                     sw.Close();

  51.                     return 0;

  52.                 }

  53.                 return 1;

  54.             }

  55.             catch (Exception ex)

  56.             {

  57.                 sMessage = ex.ToString();

  58.                 return 0;

  59.             }

  60.         }

 

 

 

OnComm事件函数

 

  1. ///<summary>

  2.         /// OnComm回调函数

  3.         ///</summary>

  4.         private static void smsClass_OnComm()

  5.         {

  6.             //结束串口串号的数据,接收到数据

  7.             if (smsClass.CommEvent == (short)(MSCommLib.OnCommConstants.comEvReceive))

  8.             {

  9.                 Thread.Sleep(500);

  10.                 smsClass.InputLen = 0;

  11.                 byte[] byReceive = (byte[])smsClass.Input;

  12.  

  13.                 byte[] by2 = new byte[9] { 0xAA, 0x01, 0x53, 0x65, 0x6E, 0x64, 0x20, 0x4F, 0x4B };//成功返回标记

  14.  

  15.                 if (ByteEquals(byReceive, by2))

  16.                 {

  17.                     //发送成功,发送下一条信息

  18.                     SmsSetting.g_JSmsList.RemoveAt(0);

  19.                     SmsSetting.OnStartSms();

  20.                 }

  21.                 else

  22.                 {

  23.                     SmsSetting.OnStartSms();

  24.                 }

  25.             }

  26.         }

     

 

分享到:
评论

相关推荐

    基于springboot教育资源共享平台源码数据库文档.zip

    基于springboot教育资源共享平台源码数据库文档.zip

    视频笔记linux开发篇

    linux开发篇,配套视频:https://www.bilibili.com/list/474327672?sid=4493702&spm_id_from=333.999.0.0&desc=1

    readera-24-09-08plus2020.apk

    ReadEra 这个阅读应用能够打开下列任何格式的文档: EPUB, PDF, DOC, RTF, TXT, DJVU, FB2, MOBI, 和 CHM. 基本上来说,你可以用它阅读你的设备内存中的任何书籍或者文本文档。 这个应用与划分成章节的文档兼。,有一个书签功能,可以在你阅读的时候,自动保存你的进度。另外,它让你更改页面模式,从几种不同的主题中进行挑选(夜间,白天,棕黑色调,还有控制台)。

    STM32单片机控制舵机旋转

    软件环境:KEIL4 硬件环境:STM32单片机+舵机 控制原理:通过控制输出信号的占空比调节舵机旋转的角度

    基于springboot仓库管理系统源码数据库文档.zip

    基于springboot仓库管理系统源码数据库文档.zip

    酒店管理系统源码C++实现的毕业设计项目源码.zip

    酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 酒店管理系统源码C++实现的毕业设计项目源码.zip,酒店管理系统源码C++实现的毕业设计项目源码.zip个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕

    58商铺全新UI试客试用平台网站源码

    58商铺全新UI试客试用平台网站源码

    基于SpringBoot+Vue的轻量级定时任务管理系统.zip

    springboot vue3前后端分离 基于SpringBoot+Vue的轻量级定时任务管理系统.zip

    毕业设计&课设_微博情感分析,用 flask 构建 restful api,含相关算法及数据文件.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    4D毫米波雷达点云数据处理方法研究.caj

    4D毫米波雷达点云数据处理方法研究.caj

    S M 2 2 5 8 X T量产工具

    S M 2 2 5 8 X T 量产工具供大家下载使用

    基于springboot的文物管理系统源码数据库文档.zip

    基于springboot的文物管理系统源码数据库文档.zip

    基于springboot的电影院售票管理系统源码数据库文档.zip

    基于springboot的电影院售票管理系统源码数据库文档.zip

    Javaweb仓库管理系统项目源码.zip

    基于Java web 实现的仓库管理系统源码,适用于初学者了解Java web的开发过程以及仓库管理系统的实现。

    美容美发项目,使用django框架,前后端一体化项目

    美容美发项目,使用django框架,前后端一体化项目

    2023年中国在线票务行业市场规模约为24.99亿元,挖掘市场新机遇

    在线票务:2023年中国在线票务行业市场规模约为24.99亿元,挖掘市场蓝海新机遇 在数字浪潮的席卷下,传统的票务销售模式正经历着前所未有的变革。纸质门票逐渐淡出人们的视野,取而代之的是便捷、高效的数字和移动票务。这一转变不仅为消费者带来了前所未有的购票体验,更为在线票务平台开辟了广阔的发展空间和市场机遇。随着国民经济的持续增长和文体娱乐行业的蓬勃发展,中国在线票务行业正站在时代的风口浪尖,等待着每一位有志之士的加入。那么,这片蓝海市场究竟蕴藏着怎样的潜力?又该如何把握机遇,实现突破?让我们一同探索。 市场概况: 近年来,中国在线票务行业市场规模持续扩大,展现出强劲的增长势头。据QYResearch数据显示,2023年中国在线票务行业市场规模约为24.99亿元,尽管受到宏观经济的影响,市场规模增速放缓,但整体趋势依然向好。这一增长主要得益于国民人均收入的不断提高、电影及演出行业的快速发展以及政府政策的支持。例如,2023年财政部、国家电影局发布的《关于阶段性免征国家电影事业发展专项资金政策的公告》,为电影行业注入了强劲动力,进而推动了在线票务市场规模的扩大。 技术创新与趋势: 技术进步

    基于SpringBoot的养老院管理系统源码数据库文档.zip

    基于SpringBoot的养老院管理系统源码数据库文档.zip

    毕业设计&课设_含构建设置及相关操作,基于特定技术,具体功能未详细说明.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    Go语言入门指南:基础语法、并发编程详解

    内容概要:本文档是一份详细的Go语言教程,从基础概念介绍到高级主题均有覆盖。主要内容包括Go语言的基础语法、数据类型、控制结构、函数、结构体、接口和并发编程等方面。通过具体示例介绍了如何使用Go语言进行开发。 适合人群:初学者和有一定经验的程序员都可以从这篇教程中受益,特别是那些想要快速掌握Go语言并应用于实际项目的开发者。 使用场景及目标:适用于初学者系统学习Go语言的基础知识和常用功能;也可以作为已有开发经验者的参考资料,帮助他们解决具体的编程问题,提高开发效率。 其他说明:本教程不仅包含了Go语言的基本知识点,还重点讲解了其独特的并发编程模型。读者在学习过程中应该注重理论与实践相结合,通过实际编写代码来加深理解和记忆。

    基于springboot计算机基础网上考试系统源码数据库文档.zip

    基于springboot计算机基础网上考试系统源码数据库文档.zip

Global site tag (gtag.js) - Google Analytics