Introduction To A lication Programming With SMS
编写SMS程序入门
Microsoft Corporation
October 2002
A lies to:
Pocket PC 2002 Phone Edition
Microsoft® eMbedded Visual Tools
版权声明:本文的著作权属英文原文作者,允许非商业性转载请注明原文出处、翻译者并保持该文的完整性。谢绝商业性转载,如有需要请自行和原文作者及翻译者联系。
Summary: Learn how to Send SMS me ages from your eMbedded Visual Basic a licatio . Take advantage of Pocket PC 2002 Phone Edition"s robust su ort for SMS (Short Me age Service) when you build your a licatio .
概要:学习如何使用你的eMbedded Visual Basic应用程序发送SMS消息。当你创建程序时,需要得到Pocket PC 2002 Phone Edition 对SMS(短消息服务)的充分支持。
Download the introa .exe from the MSDN Code Center.
Contents
SMS and Pocket PC Phone Edition
SMS-Enabled A licatio
Sending SMS Sample
Code Walkthrough
Conclusion
SMS and Pocket PC Phone Edition
SMS和Pocket PC Phone版本
Short Me age Service is a standard for sending short alpha-numeric me ages (max 160 characters) between mobile phones in Global System for Mobile Communicatio networks (GSM). It works much like paging, but with text, and most phones today have su ort for SMS.
Short Me age Service是通过Mobile Communicatio networks (GSM)的全球系统在移动电话间发送short alpha-numeric me ages(最多160字符)的标准。它像寻呼机一样工作,只是用于文本格式,现在的大多数电话都支持SMS。
A key a ect of SMS is that me ages are sent through the mobile network operator"s network i tantly, without the need to manually co ect to an Internet Service Provider—SMS me ages are i tantly delivered while e-mails need to be retrieved from a mail server by the receiver. Also, if the receiver is not online—if the phone is turned off—the SMS me age is stored at the operator and forwarded when the phone is turned back on.
SMS的一个关键特点是,通过无线网络服务器的网络立即发送,不需要手动连接到Internet Service Provider—SMS消息是立即发送,而e-mails需要通过接收器从邮件服务器上接收。同样,如果接收器没有在线—如果电话关闭—SMS消息被储存在服务器中,当电话打开时再转发。 < an cla ='Wnj136'>
On Pocket PC 2002 Phone Edition devices, you can manage SMS me ages much in the same way that you manage e-mail me ages. The SMS Me aging component is integrated with the standard I ox a lication, allowing you to send and receive me ages in the same way you send and receive e-mails. You can even forward and reply to e-mails as SMS me ages, and vice versa.
在Pocket PC 2002 的电话版设备上,你可以和管理e-mail消息一样来管理SMS消息。SMS消息组件是一个完整的标准收件箱应用程序,允许你像收发电子邮件一样,收发SMS消息。你也可以转发和回复SMS消息,像电子邮件一样。
SMS-Enabled A licatio
SMS-Enabled 应用程序
Many busine scenarios involve notificatio of some sort, and SMS is a great way to implement notificatio for a variety of busine events. It could be a salesman that notifies a service engineer of a customer in need of service, a service engineer notifying an executive of an important busine event at the customer, or an executive informing all staff related to the customer about new customer handling routines.
许多商业机构忙碌于对一些通知的选择,SMS是一条极好的实现适应变化多样的商业事件消息通知的途径。它可以让一个销售人员向售后服务工程师转达消费者的需求,一个服务工程师向经理发送一个重要的商务事件,或者一个经理向全体员工发送新的消费者操作办法。
Another interesting use of SMS is to enable mobile commerce (m-commerce), as SMS is often used for handling payment tra actio . To get you started, we will show you how to send SMS me ages from your Pocket PC 2002 Phone Edition device in the following example.
SMS另一个有趣的应用是能够进行移动商务(m-commerce),SMS经常被用来办理付款事物。我们将通过下面的例子,演示如何从你的Pocket PC 2002 Phone Edition设备中发送SMS消息。
Sending SMS Sample
发送SMS示例
A simple form using Microsoft® eMbedded Visual Basic®:
这个例子使用Microsoft® eMbedded Visual Basic® 编写:
Figure 1. SMS Sample a lication
In this form, you can enter an international mobile phone number and a text me age. When you hit the Send button, the me age is sent—as simple as that!
在这个窗体中,你可以输入一个世界范围内的移动电话号码和一条文本消息。当你点击发送按忸,这条消息就被发送出去了—就这么简单。
Code Walkthrough
代码示例
Let"s look at the core of the code for sending SMS me ages. First of all, you need to declare a number of Microsoft Window reg; APIs:
让我们来看发送SMS消息代码的核心部分。首先,你需要声明一系列的Microsoft Window reg; APIs:
· One for opening the SMS Me aging component
· One for sending SMS me ages
· And one for closing the SMS Me aging component:
· 一个函数是打开SMS消息组件
· 一个函数是发送SMS消息
· 另一个函数是关闭SMS消息组件
· Public Declare Function SmsOpen Lib "SMS" (ByVal ptsMe ageProtocol
· As String, ByVal dwMe ageModes As Long, ByRef mshHandle As
· Long, ByRef phMe ageAvailableEvent As Long) As Long
·
· Public Declare Function Sm endMe age Lib "SMS" (ByVal smshHandle
· As Long, ByVal msaSMSCAddre As Long, ByVal
· msaDestinationAddre As String, ByVal tValidityPeriod As
· Long, ByVal Data As String, ByVal dwDataSize As Long, ByVal
· rovider ecificData As String, ByVal dwProvider ecificDataSize
· As Long, ByVal smsdeDataEncoding As Long, ByVal dwOptio As Long,
· ByRef msmidMe ageID As Long) As Long
·
· Public Declare Function SmsClose Lib "SMS" (ByVal smshHandle As
· Long) As Long
You also need some API co tants declared for the different APIs:
你也需要为这些API声明一些API常量:
Public Co t SMS_MSGTYPE_TEXT = "Microsoft Text SMS Protocol"
Public Co t SMS_MODE_SEND = 2 " Open in send mode
Public Co t SMSDE_GSM = 1 " Use standard GSM
encoding
Public Co t SMSAT_INTERNATIONAL = 1 " International number
format
Public Co t _ME AGE_OPTION_NONE = 0 " No me age optio
Public Co t _ME AGE_CLA 0 = 0 " Send immediately
Public Co t RO_NONE = 0 " No replacements
Public Co t SMS_OPTION_DELIVERY_NONE = 0 " No delivery optio
The following is the complete code to send an SMS me age:
下面是发送一条SMS消息的完整代码:
Public Sub SendSMS(ByVal Number As String, ByVal Me age As String)
Dim SMSHandle As Long
Dim SMSEvent As Long
Dim SMSAddre As String
Dim SM rovider As String
" Open SMS Me aging Component
Call SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, SMSHandle, SMSEvent)
" Set Addre structure (UDT as string)
SMSAddre = LongToBytes(SMSAT_INTERNATIONAL) &am Number
" Set Provider structure (UDT as string)
SM rovider = LongToBytes( _ME AGE_OPTION_NONE) &am _
LongToBytes( _ME AGE_CLA 0) &am _
LongToBytes( RO_NONE)
" Send me age
If 0 = Sm endMe age(SMSHandle, 0, SMSAddre , 0, Me age, _
Le (Me age), SM rovider, 12, SMSDE_GSM, _
SMS_OPTION_DELIVERY_NONE, 0) Then
MsgBox "Me age sent!", vbInformation, A .Title
Else
MsgBox "Could not send me age!", vbCritical, A .Title
End If
" Close SMS Me aging Component
Call SmsClose(SMSHandle)
End Sub
First, the SMS Me aging component is opened (SmsOpen) and its handle is stored (SMSHandle). This handle is needed to call other SMS APIs.
首先,SMS消息组件要被打开(SmsOpen),并且它的句柄被储存(SMSHandle)。调用其他的SMS API需要使用这个句柄。
A number of structures or UDTs (User Defined Types) need to be prepared for thecall to Sm endMe age. Since eMbedded Visual Basic lacks su ort for UDTs, simple strings are used to emulate a structure.
Sm endMe age调用的结构的成员和UDTs(用户定义类型)需要被初始化,因为eMbedded Visual Basic不支持UDTs,简单的字符串被用来模仿一个结构。
The first is a structure containing the addre of the SMS me age. The addre structure contai an indicator of what kind of number is su lied (in this case an international number) and the number itself.
The next structure contai various optio regarding the service provider. The first part of the structure indicates that no ecial optio are selected, and the second part indicates that the me age should be sent immediately.
结构中包含的第一个是SMS消息的地址。结构的第一部分指出没有特定的选项被选择,第二部分指出消息将被立刻发送。
The last part states that no replacement should be made.
最后一部分指出没有复位(replacement)存在。
In the call to send the me age (Sm endMe age), the prepared structures are su lied, the me age text and a number of optio . Finally, the handle is closed (SmsClose).
在发送消息的调用中(Sm endMe age),准备好的结构,消息文本和号码的选项将被提供。最后,这个句柄被关闭(SmsClose)。
For a complete example, see this article"s sample code. Also, you can read more about this technique in Antonio Paneiro"s article, UDTs (User Defined Types) with VBCE.
完整的示例请看文章的示例代码。同样,你可以在Antonio Paneiro的文章中得到更多关于这项技术的知识,UDTs (User Defined Types) with VBCE.
Conclusion
结论
SMS is great for small and i tant text notificatio . And with the su ort in Pocket PC 2002 Phone Edition, you will be able to make your a licatio "SMS aware." With the sample code from this example, you have most of what you need to get going. If you accept that the mobile world, in terms of communication mechanisms and protocols, is more about "both/and" rather than "or/else," you pragmatically can use each option when suitable.SMS对于短小的直接的文本通知来说是非常好的。在Pocket PC 2002 Phone Edition的支持下,你可以创建你的应用程序"SMS aware"。通过和示例相同的代码,你可以得到更多你需要的。如果你接受移动世界,根据通讯机制和协议,"both/and"优于"or/else",你可以根据情况使用合适的选项。


