一.MSComm32.ocx控件(以下简称MSComm控件)
-
MSComm控件是windows系统下的一个控件,可以实现串口通讯。该文件存在于windows\system32目录下。使用这个控件还需要修改注册表,HKEY_CLASSES_ROOT\Licenses = Licensing: Copying the keys may be a violation of established copyrights
-
如果您的系统提示"找不到mscomm32.ocx"或"mscomm32.ocx缺失" 或者"mscomm32.ocx错误"等等,请把mscomm32.ocx下载到本机。
-
直接拷贝该文件到系统目录里:
-
Windows 95/98/Me系统,将mscomm32.ocx复制到:/Windows/System目录下。
-
Windows NT/2000系统,将mscomm32.ocx复制到C:/WINNT/System32目录下。
-
Windows XP/WIN7系统,将mscomm32.ocx复制到C:/Windows/System32目录下。
-
然后打开"开始-运行-输入regsvr32 mscomm32.ocx",回车即可!
-
注册完mscomm32.ocx后,在.net上就可以直接添加引用Interop.MSCommLib.dll,添加完后即可对com口进行操作了。
二.MSComm控件控件的使用
-
MSComm控件的常用属性
-
CommPort 设置并返回通讯端口号。
语法:object.CommPort[=value ] (value 一整型值,说明端口号。)
说明:在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。
注意:必须在打开端口之前设置 CommPort 属性。
-
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
语法: object.Settings[ = value]
说明:当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。Value 由四个设置值组成,有如下的格式:"BBBB,P,D,S"
BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:"9600,N,8,1"
-
InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。语法 object.InputLen [ = value]
InputLen 属性语法包括下列部分:value 整型表达式,说明 Input 属性从接收缓冲区中读取的字符数。
说明:InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ("")。在使用 Input 前,用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。
-
PortOpen 设置并返回通讯端口的状态,也可以打开和关闭端口。
-
Input 从接收缓冲区返回和删除字符。 (16进制数据)
-
Output 向传输缓冲区写一个字符串。(16进制数据)
-
RThreshold 属性:在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。
语法:object.Rthreshold [ = value ](value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )
说明:当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
-
SThreshold 属性: MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
语法:object.SThreshold [ = value ],value 整形表达式,代表在 OnComm 事件产生之前在传输缓冲区中的最小字符数。
说明:若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。
-
EOFEnable 属性:确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符,将停止输入并激活 OnComm 事件,此时 CommEvent 属性设置为 comEvEOF,
语法:object.EOFEnable [ = value ]
EOFEnable 属性语法包括下列部分:
value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如“设置值”中所描述。
value 的设置值:
True 当 EOF 字符找到时 OnComm 事件被激活。
False (缺省)当 EOF 字符找到时 OnComm 事件不被激活。
说明:当 EOFEnable 属性设置为 False,OnComm 控件将不在输入流中寻找 EOF 字符。
三.示例
初始化MSComm控件
private static MSCommLib.MSCommClass smsClass = null;
-
private static void InitComm()
-
{
-
if (_sCommState == 1)//已初始化则不需再初始化返回
-
return;
-
try
-
{
-
smsClass = new MSCommClass();
-
smsClass.CommPort = short.Parse(SmsSetting.SmsPort);
-
smsClass.Settings = SmsSetting.Smsbit + ",N,8,1";
-
smsClass.InputLen = 0;
-
smsClass.RThreshold = 1;
-
smsClass.OnComm += new DMSCommEvents_OnCommEventHandler(smsClass_OnComm);
-
smsClass.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;
-
-
if (smsClass.PortOpen == false)
-
{
-
try
-
{
-
smsClass.PortOpen = true;
-
}
-
catch (Exception ex)
-
{
-
}
-
}
-
-
_sCommState = 1;
-
}
-
catch(Exception ex)
-
{
-
StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);
-
sw.WriteLine("InitComm" + System.DateTime.Now.ToString());
-
sw.WriteLine("error:" + ex.Message);
-
sw.Close();
-
}
-
}
发送短信
-
///<summary>
-
///发送短信
-
///</summary>
-
///<param name="sPhone">手机号</param>
-
///<param name="sContent">发送内容</param>
-
///<param name="sMessage">返回信息</param>
-
///<returns>发送成功返回1,失败返回0</returns>
-
public static int SendSmsMessage(string sPhone, string sContent, string sMailName, string sModule, out string sMessage)
-
{
-
sMessage = "";
-
try
-
{
-
SmsSetting.InitComm();
-
-
try
-
{
-
Byte[] btPhone = Encoding.ASCII.GetBytes(sPhone);
-
Byte[] btContent = Encoding.Unicode.GetBytes(sContent);
-
int nCount = btPhone.Length + btContent.Length + 2;
-
Byte[] btSend = new Byte[nCount];
-
btSend[0] = 0xAA;
-
btSend[1] = 0x01;
-
-
int i = 0;
-
for (i = 0; i < btPhone.Length; i++)
-
{
-
btSend[i + 2] = btPhone[i];
-
}
-
-
for (int j = 0; j < btContent.Length; j = j + 2)
-
{
-
btSend[i + 2 + j] = btContent[j + 1];
-
btSend[i + 2 + j + 1] = btContent[j];
-
}
-
-
smsClass.Output = btSend;
-
-
StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);
-
sw.WriteLine("sendtime:" + System.DateTime.Now.ToString());
-
sw.WriteLine("sPhone" + sPhone);
-
sw.WriteLine("sContent:" + sContent);
-
sw.Close();
-
}
-
catch (Exception ex)
-
{
-
sMessage = ex.ToString();
-
StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);
-
sw.WriteLine("SendSmsMessage" + System.DateTime.Now.ToString());
-
sw.WriteLine("error:" + sMessage);
-
sw.Close();
-
return 0;
-
}
-
return 1;
-
}
-
catch (Exception ex)
-
{
-
sMessage = ex.ToString();
-
return 0;
-
}
-
}
OnComm事件函数
-
///<summary>
-
/// OnComm回调函数
-
///</summary>
-
private static void smsClass_OnComm()
-
{
-
//结束串口串号的数据,接收到数据
-
if (smsClass.CommEvent == (short)(MSCommLib.OnCommConstants.comEvReceive))
-
{
-
Thread.Sleep(500);
-
smsClass.InputLen = 0;
-
byte[] byReceive = (byte[])smsClass.Input;
-
-
byte[] by2 = new byte[9] { 0xAA, 0x01, 0x53, 0x65, 0x6E, 0x64, 0x20, 0x4F, 0x4B };//成功返回标记
-
-
if (ByteEquals(byReceive, by2))
-
{
-
//发送成功,发送下一条信息
-
SmsSetting.g_JSmsList.RemoveAt(0);
-
SmsSetting.OnStartSms();
-
}
-
else
-
{
-
SmsSetting.OnStartSms();
-
}
-
}
-
}
相关推荐
MSComm控件是由Microsoft公司开发的一种用于串行通信的组件,它在Visual Basic、VB.NET以及早期的Visual Studio版本中广泛使用。这个控件为开发者提供了一种简单的方式,使得应用程序能够通过串行端口(COM口)与...
不过,随着技术的发展,现代编程语言和框架提供了更强大、更现代的串口通信解决方案,如.NET Framework的`System.IO.Ports.SerialPort`类,但在某些旧系统或特定场景下,MSComm控件仍然具有一定的实用价值。
"基于C#.NET的GSM MoDEM短信猫应用设计开发" 本文主要介绍了基于C#.NET的GSM MoDEM短信猫...在Visual Studio 2005编译器开发环境下,把微软通用串口通信控件MSCOMM32作为组件装入编译器,实现串口通信的实际过程如下。
- **VB6**:Visual Basic 6使用MSComm控件来处理串口通信,开发者需要理解如何配置控件属性并发送AT命令。 4. **开发流程**: - 连接短信猫:在代码中创建串口对象,配置端口号、波特率、校验位等参数,并打开...
在提供的文件中,"Interop.MSCommLib.dll"是一个.NET Framework的互操作库,它允许.NET应用程序与COM组件(如MSComm控件)进行交互。MSComm控件是Microsoft提供的一款通用串行通信控件,可以用来处理串口通信,包括...
总结来说,C#手机短信开发源码涉及了C#语言基础、ASP.NET Web开发、WinForms桌面应用、串行通信技术以及第三方控件的使用。通过理解并掌握这些知识点,开发者能够构建出高效、稳定的短信服务系统,满足各种业务需求...
Visual Basic(VB)支持`MSComm`控件,它是专为串口通信设计的。通过设置`MSComm1.PortOpen`、`MSComm1.CommPort`、`MSComm1.Settings`等属性,以及`OnComm`事件处理,可以方便地实现短信猫的控制。 7. **开发包的...
"PhoneMsg.cs"很可能是C#编写的源代码文件,它可能包含了如何使用alasunsmscon.ocx和MSCOMM32.OCX控件发送短信的具体实现。开发者在代码中会实例化这两个控件,然后调用相应的函数来实现短信发送功能。而...
对于VB(Visual Basic)编程语言来说,可以使用`MSComm`控件或者`SerialPort`类来实现串口通信。`MSComm`是VB6中的一个控件,允许程序与串行端口进行交互;而在VB.NET中,则可以利用`System.IO.Ports.SerialPort`类...
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 在同一程序...
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 在同一程序...
2. **使用.NET提供的串口控件** - 基于.NET P/Invoke调用方法实现,更方便获取资料。 3. **第三方控件** - 通常需要付费,不适合本讨论范围。 4. **使用API编写串口通信** - 难度较高,但灵活性强,可以根据需求定制...
在这个项目中,开发者可能使用了VB的MSComm控件或者AT命令集来与NOKIA手机进行通信。MSComm控件是一个串行通信控件,允许应用程序通过串口与外部设备进行交互,如手机的红外、蓝牙或USB接口。 AT命令是通用的串行...
`MSComm`控件是早期VB版本中的一个标准控件,用于处理串行端口通信,而`System.IO.Ports.SerialPort`是.NET Framework中的类,提供了更现代且功能丰富的串口通信支持。开发者需要设置串口的波特率、数据位、停止位、...
- **MSCOMM32.OCX** 是Microsoft Communications Control,它是一个ActiveX控件,允许开发者在Windows应用程序中使用串行通信功能。 3. **USB接口**: - USB(Universal Serial Bus)接口是一种通用接口,可以...
VB利用Mscomm控件编写的通讯终端,可做串口通讯编程参考示例.rar VB和西门子S7-300 PLC串口通讯程序能实现读写功能.rar VB实现串口调试LED信息显示屏设备主要代码.rar VB实现串口调试工具的完整源码.rar vb实现串口...
069、VB利用Mscomm控件编写的通讯终端,可做串口通讯编程参考示例 070、VB平台单片机与PC机串口通信的PC端程序。小巧易用,功能丰富 071、VB嵌入式串口通讯波形分析显示软件 072、VB实现串口调试LED信息显示屏设备...