`
zrj_software
  • 浏览: 201514 次
  • 性别: 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.         }

     

 

分享到:
评论

相关推荐

    microsoft的mscomm控件

    MSComm控件是由Microsoft公司开发的一种用于串行通信的组件,它在Visual Basic、VB.NET以及早期的Visual Studio版本中广泛使用。这个控件为开发者提供了一种简单的方式,使得应用程序能够通过串行端口(COM口)与...

    MSComm串口控件

    不过,随着技术的发展,现代编程语言和框架提供了更强大、更现代的串口通信解决方案,如.NET Framework的`System.IO.Ports.SerialPort`类,但在某些旧系统或特定场景下,MSComm控件仍然具有一定的实用价值。

    基于C#.NET的GSM MoDEM短信猫应用设计开发

    "基于C#.NET的GSM MoDEM短信猫应用设计开发" 本文主要介绍了基于C#.NET的GSM MoDEM短信猫...在Visual Studio 2005编译器开发环境下,把微软通用串口通信控件MSCOMM32作为组件装入编译器,实现串口通信的实际过程如下。

    短信猫(modem gsm)二次开发包

    - **VB6**:Visual Basic 6使用MSComm控件来处理串口通信,开发者需要理解如何配置控件属性并发送AT命令。 4. **开发流程**: - 连接短信猫:在代码中创建串口对象,配置端口号、波特率、校验位等参数,并打开...

    at 指令开发的电话来电显示,很有用,大家可以参考一下

    在提供的文件中,"Interop.MSCommLib.dll"是一个.NET Framework的互操作库,它允许.NET应用程序与COM组件(如MSComm控件)进行交互。MSComm控件是Microsoft提供的一款通用串行通信控件,可以用来处理串口通信,包括...

    C#手机短信开发源码

    总结来说,C#手机短信开发源码涉及了C#语言基础、ASP.NET Web开发、WinForms桌面应用、串行通信技术以及第三方控件的使用。通过理解并掌握这些知识点,开发者能够构建出高效、稳定的短信服务系统,满足各种业务需求...

    短信猫开发包,C C# Java vb的都有

    Visual Basic(VB)支持`MSComm`控件,它是专为串口通信设计的。通过设置`MSComm1.PortOpen`、`MSComm1.CommPort`、`MSComm1.Settings`等属性,以及`OnComm`事件处理,可以方便地实现短信猫的控制。 7. **开发包的...

    PhoneMsg.rar_alasunsmscon.ocx_alasunsmscon.ocx cs_sms_vb alasun

    "PhoneMsg.cs"很可能是C#编写的源代码文件,它可能包含了如何使用alasunsmscon.ocx和MSCOMM32.OCX控件发送短信的具体实现。开发者在代码中会实例化这两个控件,然后调用相应的函数来实现短信发送功能。而...

    短信提醒案例

    对于VB(Visual Basic)编程语言来说,可以使用`MSComm`控件或者`SerialPort`类来实现串口通信。`MSComm`是VB6中的一个控件,允许程序与串行端口进行交互;而在VB.NET中,则可以利用`System.IO.Ports.SerialPort`类...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 源码光盘

    3.2 使用MSComm控件的几个疑难问题 56 3.2.1 使用VARIANT 和SAFEARRAY 数据类型从串口读写数据 56 3.2.2 MSComm控件能离开对话框独立存在吗 59 3.2.3 如何发送接收ASCII值为0和大于128的字符 60 3.2.4 在同一程序...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 第二版 电子版

    3.2 使用MSComm控件的几个疑难问题 56 3.2.1 使用VARIANT 和SAFEARRAY 数据类型从串口读写数据 56 3.2.2 MSComm控件能离开对话框独立存在吗 59 3.2.3 如何发送接收ASCII值为0和大于128的字符 60 3.2.4 在同一程序...

    C#开发终端式短信的原理和方法(2)

    2. **使用.NET提供的串口控件** - 基于.NET P/Invoke调用方法实现,更方便获取资料。 3. **第三方控件** - 通常需要付费,不适合本讨论范围。 4. **使用API编写串口通信** - 难度较高,但灵活性强,可以根据需求定制...

    用NOKIA手机发短消息的VB源程序-NOKIA sms.zip

    在这个项目中,开发者可能使用了VB的MSComm控件或者AT命令集来与NOKIA手机进行通信。MSComm控件是一个串行通信控件,允许应用程序通过串口与外部设备进行交互,如手机的红外、蓝牙或USB接口。 AT命令是通用的串行...

    vb.zip_VB发短信_sim300 vb

    `MSComm`控件是早期VB版本中的一个标准控件,用于处理串行端口通信,而`System.IO.Ports.SerialPort`是.NET Framework中的类,提供了更现代且功能丰富的串口通信支持。开发者需要设置串口的波特率、数据位、停止位、...

    用COM或USB接口连接gsm_gprs手机进行短信收发的程序

    - **MSCOMM32.OCX** 是Microsoft Communications Control,它是一个ActiveX控件,允许开发者在Windows应用程序中使用串行通信功能。 3. **USB接口**: - USB(Universal Serial Bus)接口是一种通用接口,可以...

    VB串口通信UART程序实例源码合集学习资料(200个).zip

    VB利用Mscomm控件编写的通讯终端,可做串口通讯编程参考示例.rar VB和西门子S7-300 PLC串口通讯程序能实现读写功能.rar VB实现串口调试LED信息显示屏设备主要代码.rar VB实现串口调试工具的完整源码.rar vb实现串口...

    VB串口通信源码210个

    069、VB利用Mscomm控件编写的通讯终端,可做串口通讯编程参考示例 070、VB平台单片机与PC机串口通信的PC端程序。小巧易用,功能丰富 071、VB嵌入式串口通讯波形分析显示软件 072、VB实现串口调试LED信息显示屏设备...

Global site tag (gtag.js) - Google Analytics