Introduction To application PRogramming With SMS
編寫SMS程序入門
Microsoft Corporation
October 2002
Applies to:
Pocket PC 2002 Phone Edition
Microsoft® eMbedded Visual Tools
版權聲明:本文的著作權屬英文原文作者,允許非商業性轉載請注明原文出處、翻譯者并保持該文的完整性。謝絕商業性轉載,如有需要請自行和原文作者及翻譯者聯系。
Summary: Learn how to Send SMS messages from your eMbedded Visual Basic applications. Take advantage of Pocket PC 2002 Phone Edition's robust support for SMS (Short Message Service) when you build your applications.
概要:學習如何使用你的eMbedded Visual Basic應用程序發送SMS消息。當你創建程序時,需要得到Pocket PC 2002 Phone Edition 對SMS(短消息服務)的充分支持。
Download the introapp.exe from the MSDN Code Center.
Contents
SMS and Pocket PC Phone Edition
SMS-Enabled Applications
Sending SMS Sample
Code Walkthrough
Conclusion
SMS and Pocket PC Phone Edition
SMS和Pocket PC Phone版本
Short Message Service is a standard for sending short alpha-numeric messages (max 160 characters) between mobile phones in Global System for Mobile Communications networks (GSM). It works much like paging, but with text, and most phones today have support for SMS.
Short Message Service是通過Mobile Communications networks (GSM)的全球系統在移動電話間發送short alpha-numeric messages(最多160字符)的標準。它像尋呼機一樣工作,只是用于文本格式,現在的大多數電話都支持SMS。
A key aspect of SMS is that messages are sent through the mobile network Operator's network instantly, without the need to manually connect to an Internet Service Provider—SMS messages are instantly 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 message is stored at the operator and forwarded when the phone is turned back on.
SMS的一個關鍵特點是,通過無線網絡服務器的網絡立即發送,不需要手動連接到Internet Service Provider—SMS消息是立即發送,而e-mails需要通過接收器從郵件服務器上接收。同樣,如果接收器沒有在線—如果電話關閉—SMS消息被儲存在服務器中,當電話打開時再轉發。
On Pocket PC 2002 Phone Edition devices, you can manage SMS messages much in the same way that you manage e-mail messages. The SMS Messaging component is integrated with the standard Inbox application, allowing you to send and receive messages in the same way you send and receive e-mails. You can even forward and reply to e-mails as SMS messages, and vice versa.
在Pocket PC 2002 的電話版設備上,你可以和管理e-mail消息一樣來管理SMS消息。SMS消息組件是一個完整的標準收件箱應用程序,允許你像收發電子郵件一樣,收發SMS消息。你也可以轉發和回復SMS消息,像電子郵件一樣。
SMS-Enabled Applications
SMS-Enabled 應用程序
Many business scenarios involve notifications of some sort, and SMS is a great way to implement notifications for a variety of business 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 business 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 transactions. To get you started, we will show you how to send SMS messages 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 application
In this form, you can enter an international mobile phone number and a text message. When you hit the Send button, the message is sent—as simple as that!
在這個窗體中,你可以輸入一個世界范圍內的移動電話號碼和一條文本消息。當你點擊發送按忸,這條消息就被發送出去了—就這么簡單。
Code Walkthrough
代碼示例
Let's look at the core of the code for sending SMS messages. First of all, you need to declare a number of Microsoft Windows® APIs:
讓我們來看發送SMS消息代碼的核心部分。首先,你需要聲明一系列的Microsoft Windows® APIs:
· One for opening the SMS Messaging component
· One for sending SMS messages
· And one for closing the SMS Messaging component:
· 一個函數是打開SMS消息組件
· 一個函數是發送SMS消息
· 另一個函數是關閉SMS消息組件
· Public Declare Function SmsOpen Lib "SMS" (ByVal ptsMessageProtocol
· As String, ByVal dwMessageModes As Long, ByRef psmshHandle As
· Long, ByRef phMessageAvailableEvent As Long) As Long
·
· Public Declare Function SmsSendMessage Lib "SMS" (ByVal smshHandle
· As Long, ByVal psmsaSMSCAddress As Long, ByVal
· psmsaDestinationAddress As String, ByVal pstValidityPeriod As
· Long, ByVal pbData As String, ByVal dwDataSize As Long, ByVal
· pbProviderSpecificData As String, ByVal dwProviderSpecificDataSize
· As Long, ByVal smsdeDataEncoding As Long, ByVal dwOptions As Long,
· ByRef psmsmidMessageID As Long) As Long
·
· Public Declare Function SmsClose Lib "SMS" (ByVal smshHandle As
· Long) As Long
You also need some API constants declared for the different APIs:
你也需要為這些API聲明一些API常量:
Public Const SMS_MSGTYPE_TEXT = "Microsoft Text SMS Protocol"
Public Const SMS_MODE_SEND = 2 ' Open in send mode
Public Const SMSDE_GSM = 1 ' Use standard GSM
encoding
Public Const SMSAT_INTERNATIONAL = 1 ' International number
format
Public Const PS_MESSAGE_OPTION_NONE = 0 ' No message options
Public Const PS_MESSAGE_CLASS0 = 0 ' Send immediately
Public Const PSRO_NONE = 0 ' No replacements
Public Const SMS_OPTION_DELIVERY_NONE = 0 ' No delivery options
The following is the complete code to send an SMS message:
下面是發送一條SMS消息的完整代碼:
Public Sub SendSMS(ByVal Number As String, ByVal Message As String)
Dim SMSHandle As Long
Dim SMSEvent As Long
Dim SMSAddress As String
Dim SMSProvider As String
' Open SMS Messaging Component
Call SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, SMSHandle, SMSEvent)
' Set Address structure (UDT as string)
SMSAddress = LongToBytes(SMSAT_INTERNATIONAL) & Number
' Set Provider structure (UDT as string)
SMSProvider = LongToBytes(PS_MESSAGE_OPTION_NONE) & _
LongToBytes(PS_MESSAGE_CLASS0) & _
LongToBytes(PSRO_NONE)
' Send message
If 0 = SmsSendMessage(SMSHandle, 0, SMSAddress, 0, Message, _
LenB(Message), SMSProvider, 12, SMSDE_GSM, _
SMS_OPTION_DELIVERY_NONE, 0) Then
MsgBox "Message sent!", vbInformation, App.Title
Else
MsgBox "Could not send message!", vbCritical, App.Title
End If
' Close SMS Messaging Component
Call SmsClose(SMSHandle)
End Sub
First, the SMS Messaging 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 SmsSendMessage. Since eMbedded Visual Basic lacks support for UDTs, simple strings are used to emulate a structure.
SmsSendMessage調用的結構的成員和UDTs(用戶定義類型)需要被初始化,因為eMbedded Visual Basic不支持UDTs,簡單的字符串被用來模仿一個結構。
The first is a structure containing the address of the SMS message. The address structure contains an indicator of what kind of number is supplied (in this case an international number) and the number itself.
The next structure contains various options regarding the service provider. The first part of the structure indicates that no special options are selected, and the second part indicates that the message should be sent immediately.
結構中包含的第一個是SMS消息的地址。結構的第一部分指出沒有特定的選項被選擇,第二部分指出消息將被立刻發送。
The last part states that no replacement should be made.
最后一部分指出沒有復位(replacement)存在。
In the call to send the message (SmsSendMessage), the prepared structures are supplied, the message text and a number of options. Finally, the handle is closed (SmsClose).
在發送消息的調用中(SmsSendMessage),準備好的結構,消息文本和號碼的選項將被提供。最后,這個句柄被關閉(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 instant text notifications. And with the support in Pocket PC 2002 Phone Edition, you will be able to make your applications "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",你可以根據情況使用合適的選項。
新聞熱點
疑難解答