บทที่ 6 โปรแกรมส่งข้อความผ่าน SMS
SMS (Short Message Service) เป็นบริการที่อาศัยการจัดส่งข้อความผ่านทางมือถือ ไปสู่มือถืออีกเครื่อง ซึ่งในปัจจุบันนี้ ได้ถูกจัดว่าเป็นการสื่อสารที่รับความนิยมกันเป็นอย่างสูงประเภทนึง และได้มีการประยุกต์ใช้ในด้านต่างๆ เช่น การส่ง SMS ผ่านทางเว็บไซต์ และการแสดงความคิดเห็นผ่าน SMS ไปสู่หน้าจอรายการโทรศัพท์
และสำหรับการพัฒนาโปรแกรมสำหรับอุปกรณ์ Pocket PC รุ่น 2002 หรือรุ่นอื่นๆ ที่สามารถใช้เป็นโทรศัพท์ได้ด้วยนั้น คุณสามารถพัฒนาโปรแกรม ให้ Pocket PC ของคุณสามารถส่ง SMS ตามที่คุณต้องการได้ โดยตัวอย่างโปรแกรมนี้ จะเป็นการสร้างหน้าต่างที่ประกอบด้วยช่องสำหรับการใส่หมายเลขโทรศัพย์มือถือปลายทาง ที่ต้องการส่งข้อความ SMS ไปถึง โดยจะมีรูปแบบของหมายเลขโทรศัพท์ต่างประเทศจะเป็นในลักษณะ
+<รหัสประเทศ><หมายเลขเครือข่าย><หมายเลขโทรศัพท์>
ซึ่งสำหรับประเทศไทยนั้นจะมี รหัสประเทศ เป็นหมายเลข 66 และจะมีหลายเลขเครือข่ายตั้งแต่ 01 ถึง 09 โดยคุณจะต้องทำการตัดหมายเลข 0 ทิ้งออกไป ตัวอย่างเช่น คุณต้องการจะส่ง SMS ไปสู่หมายเลข 01-3042109 ดังนั้นคุณจะต้องป้อนหมายเลขโทรศัพท์มือถือที่ต้องการส่งคือ +6613042109 วิธีการที่ได้กล่าวมาข้างต้นจะใช้สำหรับการส่ง SMS ไปยังหมายเลขของต่างประเทศได้ หากคุณระบุรหัสประเทศและเลขหมายได้ถูกต้อง นอกจากวิธีการระบุหมายเลขโทรศัพท์ดังกล่าวแล้ว คุณสามารถป้อนหลายเลขสั้นๆโดยไม่จำเป็นต้องระบุรหัสประเทศ เช่น 013042109 เพื่อให้ส่ง SMS ภายในประเทศ
องค์ประกอบของโปรแกรมอีกส่วนคือ ต้องมีช่อง สำหรับการใส่ข้อความ ซึ่งตามข้อกำหนดของการส่ง SMS จะสามารถส่งได้สูงสุดที่ 160 ตัวอักษร ทำให้คุณต้องเขียนโปรแกรมเพื่อตรวจสอบ จำนวนของข้อความ ก่อนการส่งข้อความผ่าน SMS ที่รองรับข้อความได้ไม่เกิน 160 ตัวอักษรเท่านั้น ซึ่งในตัวอย่างจะไม่ได้กล่าวไว้
สำหรับในตัวอย่างนี้ โปรแกรมจะไม่สามารถแสดงผลการทำงานผ่านทาง Emulator ได้ เหตุผลก็เนื่องมาจาก Emulator ไม่มีชุดคำสั่งในส่ง SMS มาด้วย ดังนั้นคุณจะต้องทำการพัฒนาแล้วนำโปรแกรมสร้างเป็นตัวติดตั้ง (อ่าน การสร้างโปรแกรมติดตั้ง เพิ่มเติม) และนำไปทดสอบบนเครื่อง Pocket PC ที่มีระบบโทรศัพท์ในตัวเท่านั้น
ดาวน์โหลดโปรแกรม
ออกแบบหน้าตาโปรแกรม
- ทำการเปิดโปรแกรม eVB ผ่านทางเมนู Start->Programs->Microsoft eMbedded Tools->eMbedded Visual Basic 3.0
- คลิกเลือก File->New Project หรือกดปุ่ม Ctrl+N จะปรากฏหน้าต่าง ให้ทำการเลือก Windows CE for Pocket PC 2002 แล้วคลิกปุ่ม OK
รูปแสดง การเลือกสร้าง Project ใหม่
- ทำการวาง คอนโทรลต่างๆไว้ บนฟอร์ม ซึ่งประกอบด้วย Textbox 2 อัน และ CommandButton 1 อัน ดังรูป
รูปแสดง การวางคอนโทรลต่างๆไว้บนฟอร์ม
- คลิกเลือกที่คอนโทรลแต่ละตัว และทำการเปลี่ยนค่า Property ตามตารางด้านล่าง
Control |
Property |
Value |
CommandButton |
Name |
cmdSend |
|
Caption |
Send SMS |
TextBox1 |
Name |
txtNumber |
|
Text |
013042109 |
TextBox2 |
Name |
txtMessage |
|
Text |
|
|
MultiLine |
True |
- จะได้ผลการกำหนด Property ดังรูป
รูปแสดง ผลที่ได้จากการกำหนด Property ให้กับปุ่ม
เพิ่มโมดูล (Module) และ API ของการส่ง SMS
สำหรับในขั้นตอนนี้จะทำการเพิ่ม โมดูล เข้ามาเพื่อจะใช้ในการประกาศตัวแปรที่เกี่ยวข้อง และฟังก์ชั่น API (Application Programming Interface) เพื่อเรียกใช้งาน สำหรับ API นั้น เป็นวิธีการประกาศ ฟังก์ชั่นเพื่อเรียกใช้คำสั่งของระบบ เช่นในตัวอย่างนี้ จะเป็นการเรียกใช้ API สำหรับการส่ง SMS ขั้นตอนในการสร้างโมดูลจะเริ่มจาก
- คลิกเลือกที่เมนู Project->Add Module จะปรากฏหน้าต่าง Add Module ให้คุณคลิกปุ่ม Open คุณจะได้หน้าต่าง สำหรับป้อนโค้ด ในส่วนของโมดูล ดังรูป
รูปแสดง หน้าต่างของโมดูล
รูปแสดง รายการโมดูล ที่เพิ่มเข้ามาสู่โปรเจค
- จะสังเกตุได้ว่าในส่วนของ Property เราสามารถเปลี่ยนชื่อของ โมดูลได้ตามต้องการ
- ให้ทำการป้อนโค้ด ตามตารางลงไปในส่วนของโมดูล
Option Explicit
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
Public Const SMS_MSGTYPE_TEXT = "Microsoft Text SMS Protocol"
Public Const SMS_MODE_SEND = 2 ' Open in send mode
Public Const SMSDE_GSM = 2 ' Use standard GSM encoding
Public Const SMSAT_INTERNATIONAL = 66 ' 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
'******************************************************************************
' Implements UDT value conversion functions
'******************************************************************************
' FileName: basUDTConv.bas
' Creator: Christian Forsberg
' Created: 2002-06-06
'******************************************************************************
' Version Date Who Comment
' 00.00.000 020606 CFO Created
'******************************************************************************
Function LongToBytes(ByVal Value As Long) As String
' Convert long value to string of bytes.
' IN: Value, long value
' OUT: LongToBytes, string with long value converted to bytes
' Known bugs:
' Version Date Who Comment
' 00.00.000 020606 CFO Created
'******************************************************************************
Dim lsHex As String, i As Integer
lsHex = Right("00000000" & Hex(Value), 8)
For i = 1 To 7 Step 2
LongToBytes = ChrB(CInt("&H" & Mid(lsHex, i, 2))) & LongToBytes
Next
End Function
Function BytesToLong(ByVal Value As String) As Long
' Convert string of bytes to long value.
' IN: Value, string
' OUT: BytesToLong, long value converted from string of bytes
' Known bugs:
' Version Date Who Comment
' 00.00.000 020606 CFO Created
'******************************************************************************
Dim lsHex As String, i As Integer
For i = 1 To 4
lsHex = Hex(AscB(MidB(Value, i, 1))) & lsHex
Next
BytesToLong = CLng("&H" & lsHex)
End Function
|
ในส่วนของโมดูลจะเริ่มต้นด้วย การประกาศค่าคงที่ และมีการประกาศฟังก์ชั่นเกี่ยวกับการส่ง SMS จำนวน 3 รายการคือ SmsOpen, SmsSendMessage และ SmsClose โดยคุณจะต้องเรียกใช้งานตามลำดับคือ สั่ง SmsOpen เพื่อเปิดการติดต่อกับกระบวนการส่ง SMS ของระบบ, สั่ง SmsSendMessage เพื่อจัดส่งข้อความไปยังหมายเลขที่ต้องการ และ สั่ง SmsClose เมื่อสิ้นสุดการทำงาน
นอกจากนั้นในส่วนของโมดูลยังมีฟังก์ชั่นที่ใช้ในการแปลงเลขหมายปลายทางของหมายเลขโทรศัพท์ธรรมดาให้กลายเป็นรูปแบบของหมายเลขพิเศษ ที่ฟังก์ชั่น SmsSendMessage ต้องการ โดยการทำงานจะอาศัยฟังชั่นที่ถูกพัฒนาโดย คุณ Christian Forsberg
เริ่มต้นใส่โค้ดการทำงาน
- ทำการดับเบิ้ลคลิกปุ่ม cmdSend ที่อยู่บนฟอร์ม จะปรากฏหน้าต่าง Code View
- ทำการป้อนโค้ดเพื่อเรียกใช้งานฟังก์ชั่น ที่เราได้สร้างไว้ใน โมดูล ตามตาราง
Private Sub cmdSend_Click() 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) & txtNumber.Text
' 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, txtMessage.Text, _
LenB(txtMessage.Text), 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
|
จากโค้ดจะเป็นกระบวนการทำงาน หลังจากที่คุณได้ทำการคลิกที่ปุ่ม cmdSend จะเริ่มต้นการทำงานโดยการประกาศตัวแปร ที่จำเป็นต้องใช้ในการทำงาน ต่อจากนั้นเป็นการเรียกใช้ ฟังก์ชั่น SmsOpen เพื่อเปิดการติดต่อกับระบบการส่ง SMS ซึ่งผลของการเรียกใช้นี้ จะถูกเก็บค่าไว้ในตัวแปร SMSHandle ต่อจากนั้นจะเป็นกระบวนการของการสร้างหมายเลขโทรศัพท์ปลายทางที่ต้องการติดต่อ โดยจะมีการระบุข้อกำหนดอื่นๆที่เกี่ยวข้องกับรูปแบบการส่งเข้าไปด้วย
ต่อจากนั้นจะทำการเรียกใช้ฟังก์ชั่น SmsSendMessage โดยมีการระบุข้อมูลที่ต้องการจัดส่ง, เลขหมายปลายทาง และข้อมูลอื่นๆ ซึ่งหากฟังก์ชั่นการส่ง SMS นี้ทำงานได้ถูกต้อง ก็จะคืนค่า 0 กลับมา แต่หากมีข้อผิดพลาดจะให้ค่าอื่น ซึ่งจะมีการตรวจสอบและแสดงผลการทำงาน ผ่านทางคำสั่ง MsgBox พร้อมกับข้อความประกอบ
- ทำการทดสอบโปรแกรมโดยทำการสร้างเป็นโปรแกรมติดตั้ง โดยอ่านวิธีการได้จากเรื่อง การสร้างโปรแกรมติดตั้ง
- นำโปรแกรมติดตั้งที่ได้ ไปทดสอบติดตั้งบนเครื่อง Pocket PC ที่มีระบบโทรศัพท์
- ทำการป้อนหมายเลขโทรศัพท์มือถือปลายทาง และข้อความที่ต้องการ
- คลิกเลือกปุ่ม "Send SMS"
- จะมีหน้าต่างแสดงผลการทำงานของโปรแกรมแสดงขึ้นมาให้ทราบ
|