membuat sms gateway dengan mscomm dan port detection
Post on 30-Jan-2016
50 Views
Preview:
DESCRIPTION
TRANSCRIPT
Membuat SMS GATEWAY dengan MSCOMM dan PORT DETECTION
12:54 PM agus canova 3 comments Email This BlogThis! Share to Twitter Share to Facebook
Sekilas tentang sms gatewayLayanan pesan singkat atau Surat masa singkat (bahasa Inggris: Short Message Service disingkat SMS) adalah sebuah layanan yang dilaksanakan dengan sebuah telepon genggam untuk mengirim atau menerima pesan-pesan pendek. Pada mulanya SMS dirancang sebagai bagian daripada GSM, tetapi sekarang sudah didapatkan pada jaringan bergerak lainnya termasuk jaringan UMTS.
Sebuah pesan SMS maksimal terdiri dari 140 bytes, dengan kata lain sebuah pesan bisa memuat 140 karakter 8-bit, 160 karakter 7-bit atau 70 karakter 16-bit untuk bahasa Jepang, bahasa Mandarin dan bahasa Korea yang memakai Hanzi (Aksara Kanji / Hanja). Selain 140 bytes ini ada data-data lain yang termasuk. Adapula beberapa metode untuk mengirim pesan yang lebih dari 140 bytes, tetapi seorang pengguna harus membayar lebih dari sekali.SMS bisa pula untuk mengirim gambar, suara dan film. SMS bentuk ini disebut MMS.Pesan-pesan SMS dikirim dari sebuah telepon genggam ke pusat pesan (SMSC dalam bahasa Inggris), di sini pesan disimpan dan mencoba mengirimnya selama beberapa kali. Setelah sebuah waktu yang telah ditentukan, biasanya 1 hari atau 2 hari, lalu pesan dihapus. Seorang pengguna bisa mendapatkan konfirmasi dari pusat pesan ini.
SMS Gateway merupakan pintu gerbang bagi penyebaran Informasi dengan menggunakan SMS. Anda dapat menyebarkan pesan ke ratusan nomor secara otomatis dan cepat yang langsung terhubung dengan database nomor-nomor ponsel saja tanpa harus mengetik ratusan nomor dan pesan di ponsel anda karena semua nomor akan diambil secara otomatis dari database tersebut. Selain itu, dengan adanya SMS Gateway anda dapat mengcustomisasi pesan-pesan yang ingin dikirim. Dengan menggunakan program tambahan yang dapat dibuat sendiri, pengirim pesan dapat lebih fleksibel dalam mengirim berita karena biasanya pesan yang ingin
dikirim berbeda-beda untuk masing-masing penerimanya.
SMS Gateway adalah jenis sms dua arah. Menariknya bahwa semua tarif yang diberlakukan adalah tarif sms normal sesuai dengan apa yang diberlakukan oleh operator. Karena sifatnya yang dua arah, maka jenis sms ini sangat cocok digunakan sebagai SMS Center sebuah organisasi atau perusahaan dalam rangka meningkatkan kualitas komunikasi antara anggota komunitas organisasi atau pegawai di dalam perusahaan.
Selain itu, dengan adanya SMS Gateway, Anda dapat mengatur pesan-pesan yang ingin dikirim. Dengan menggunakan program tambahan yang dapat dibuat sendiri, pengiriman pesan dapat lebih fleksibel dalam mengirim berita karena biasanya pesan yang ingin dikirim berbeda-beda untuk masing-masing penerimanya (kustomisasi pesan).
Kebutuhan HardwareUntuk kebutuhan SMS Gateway tidak terlalu belebihan dan juga fleksibel karena bisa dibuat dengan :1. PC maupun Notebook. Yang mutlak dibutuhkan adalah sebuah komputer tentunya ada USB atau port serial COM2. Sebuah ponsel atau modem yang mendukung AT Command3. Kabel data (Kabel berantarmuka serial yang dapat menghubungi ponsel dengan PC) atau dapat munggunakan InfraRed dan piranti lunak sebagai SMS Gateway.
Untuk menggunakan InfraRed anda membutuhkan sebuah ponsel yang juga memiliki fasilitas tsb, tapi tidak dianjurkan untuk kebutuhan SMS gateway karena komunikasi dengan InfraRed tidak terlalu baik (jika tergeser gampang putus).
Kebutuhan SoftwareDisini penulis menggunakan bahasa pemrograman Visual Basic 6.0 dan untuk pengertian perintah yang dipakai menggunakan AT Command. AT Command adalah perintah-perintah yang digunakan dalam komunikasi dengan serial port. Dengan AT Command kita dapat mengetahui vendor dari Handphone yang digunakan, kekuatan sinyal, membaca pesan yang ada pada SIM Card, megirim pesan, mendeteksi pesan SMS baru yang masuk secara otomatis, menghapus pesan pada SIM Card dan masih banyak lagi.
Dalam program SMS Gateway yang akan kita buat nanti, tidak semua perintah AT Command digunakan. Kita hanya menggunakan beberapa perintah AT yang ada hubungannya dengan sistem kerja dari program SMS Gateway. Adapun perintah yang akan digunakan adalah sebagai berikut :
AT Command - Keterangan
AT Mengecek apakah Handphone telah terhubungAT+CMGF Untuk menetapkan format mode dari terminalAT+CSCS Untuk menetapkan jenis encodingAT+CNMI Untuk mendeteksi pesan SMS baru masuk secara otomatisAT+CMGL Membuka daftar SMS yang ada pada SIM CardAT+CMGS Mengirim pesan SMSAT+CMGR Membaca pesan SMSAT+CMGD Menghapus pasan SMSATE1 Mengatur ECHOATV1 Mengatur input dan output berupa naskahAT+CGMI Mengecek Merek HPAT+CGMM Mengecek Seri HPAT+CGMR Mengecek Versi Keluaran HPAT+CBC Mengecek BateraiAT+CSQ Mengecek Kualitas SinyalAT+CCLK? Mengecek Jam (waktu) pada HPAT+CALM=< n > Mengecek Suara/dering HP saat di Telepon (ada Telepon Masuk)
‘n’ adalah adalah angka yang menunjukkan jenis dering0 = berdering1 dan 2 = Silent (Diam)
AT^SCID Mengecek ID SIM CARDAT+CGSN Mengecek Nomor IMEIAT+CLIP=1 Menampilkan nomor telepon pemanggilAT+CLCC Menampilkan nomor telepon yang sedang memanggilAT+COPN Menampilkan Nama Sumua Operator di duniaAT+COPS? Menampilkan nama operator dari SIM yang digunakanAT+CPBR=< n > Membaca nomor telepon yang disimpan pada buku telepon (SIM CARD)‘n’ adalah nomor urut penyimpananAT+CPMS=< md > Mengatur Memori dari HP‘md’ adalah memori yang digunakanME = Memori HPSM = Memori SIM CARD
Langkah-langkah pengcodingan:Nah sekarang buka Program Microsoft Visual Basic Anda dan ikuti langkah berikut ini:1. Buka aplikasi VB 6 anda dan pilih standard exe lalu open2. Tambahkan 1 modul dengan cara klik menu project - add module lalu tambahkan koding dibawah ini :
Option Explicit
Public Function RemoveInternationalDiallingCode _(ByVal tTelNumber As String) As StringRemoveInternationalDiallingCode = "0" & Mid(tTelNumber, 4)End Function
Public Function GetSMSNum(ByVal tSMSNotification As String) As StringDim lCRPos As Long
lCRPos = InStrRev(tSMSNotification, vbCr)If lCRPos > 0 Then GetSMSNum = Mid(tSMSNotification, lCRPos - 2, 2)If Left(GetSMSNum, 1) = "," Then GetSMSNum = Right(GetSMSNum, 1)End Function
Public Function ReadSMS(comms As MSComm, _ByVal tSMSNum As String, tMessage As String, _tSender As String, tDate As String, _tTime As String, bRead As Boolean) As BooleanDim tChar As String * 1Dim i As LongDim tRead As StringDim lQuoteNum As LongDim tDateTime As StringDim tData As String
Const TIMEOUT = 10000On Error GoTo ErrHandler
tData = "AT+CMGR=" & tSMSNum & vbCrcomms.InBufferCount = 0comms.Output = tDatatData = ""
i = timeGetTimeDo While timeGetTime - i <= TIMEOUT And InStr(tData, "OK" & vbCrLf) = 0 And InStr(tData, "ERROR" & vbCrLf) = 0DoEventsIf comms.InBufferCount > 0 ThentChar = comms.InputtData = tData & tCharEnd IfLoop
If InStr(tData, "ERROR") = 0 And tData <> "" ThenFor i = 1 To Len(tData)tChar = Mid(tData, i, 1)If tChar = """" Then lQuoteNum = lQuoteNum + 1If lQuoteNum = 1 And tChar <> """" Then tRead = tRead & tCharIf lQuoteNum = 3 And tChar <> """" Then tSender = tSender & tCharIf lQuoteNum = 5 And tChar <> """" Then tDateTime = tDateTime & tCharIf lQuoteNum = 6 And tChar <> """" Then tMessage = tMessage & tCharNext i
bRead = (tRead = "REC READ")tDate = Left(tDateTime, 8)tTime = Mid(tDateTime, 10, 8)tMessage = Mid(tMessage, 3)tMessage = Mid(tMessage, 1, InStr(tMessage, vbCr) - 1)ReadSMS = TrueEnd IfExit Function
ErrHandler:ReadSMS = FalseEnd Function
Public Function DeleteAllSMSes(comms As MSComm) As BooleanDim i As Long
For i = 1 To 15DeleteAllSMSes = InStr(TransmitAndReceiveData(comms, "AT+CMGD=" & i & vbCr), "OK")Next iEnd Function
Public Function DeleteSMS(comms As MSComm, ByVal lSMSNum As Long) As BooleanDeleteSMS = InStr(TransmitAndReceiveData(comms, "AT+CMGD=" & lSMSNum & vbCr), "OK")End Function
Public Function SendSMS(comms As MSComm, ByVal tSMSNum As String, ByVal tMessage As String) As BooleanSendSMS = InStr(TransmitAndReceiveData(comms, "AT+CMGS=" & """" & tSMSNum & """" & vbCr & tMessage & Chr(26)), "OK")End Function
Public Function TestModem(comms As MSComm) As StringTestModem = TransmitAndReceiveData(comms, "AT")End Function
Public Function ManufacturerInfo(comms As MSComm) As StringManufacturerInfo = TransmitAndReceiveData(comms, "AT+CGMI")End Function
Public Function ModelInfo(comms As MSComm) As StringModelInfo = TransmitAndReceiveData(comms, "AT+CGMM")End Function
Public Function FirmwareInfo(comms As MSComm) As StringFirmwareInfo = TransmitAndReceiveData(comms, "AT+CGMR")End Function
Public Function IMEIInfo(comms As MSComm) As StringIMEIInfo = TransmitAndReceiveData(comms, "AT+CGSN")End Function
Public Function IMSIInfo(comms As MSComm) As StringIMSIInfo = TransmitAndReceiveData(comms, "AT+CIMI")End Function
Public Function EF_CCIDInfo(comms As MSComm) As StringEF_CCIDInfo = TransmitAndReceiveData(comms, "AT+CCID")End Function
Public Function NetworkRegStatus(comms As MSComm) As StringNetworkRegStatus = TransmitAndReceiveData(comms, "AT+CREG?")End Function
Public Function AvailablePLMNs(comms As MSComm) As StringAvailablePLMNs = TransmitAndReceiveData(comms, "AT+COPS?")End Function
Public Function NetworkFieldStrength(comms As MSComm) As StringNetworkFieldStrength = TransmitAndReceiveData(comms, "AT+CSQ")
End Function
Public Function MainCellMainParams(comms As MSComm) As StringMainCellMainParams = TransmitAndReceiveData(comms, "AT+CCED=0")End Function
Public Function TransmitAndReceiveData(comms As MSComm, ByVal tData As String) As StringDim lTime As Long
Const TIMEOUT = 10000tData = tData & vbCr
With comms.InBufferCount = 0.Output = tDatatData = ""
lTime = timeGetTimetData = ""Do While timeGetTime - lTime <= TIMEOUT And InStr(tData, "OK") = 0 And InStr(tData, "ERROR" & vbCrLf) = 0DoEventsIf .InBufferCount > 0 Then tData = tData & .InputLoopEnd With
TransmitAndReceiveData = tDataEnd Function
4. Tambahkan komponen mscomm punyanya microsoft5. Set boudrate dan lainnya sesuai dengan setingan HP atau modem anda lalu pada form load isikan perintah inisialisasi modem/hp.6. Silahkan test send sms dengan menggunakan fungsi SendSMS dan silahkan coba-coba fungsi lainnya.7. Selamat mencoba.
Mendeteksi Port Modem Secara Otomatisuntuk mengetahui port modem Anda lakukan langkah di bawah ini:
1. Klik tombol start (sebelah kiri bawah)2. Selanjutnya klik Settings >> Control Panel >> System3. Klik tab Hardware Klik tombol Device Manager4. Klik Node Ports (COM & LPT)5. Carilah di sana akan ada port modem Wavecom Anda.
Sungguh merepotkan sekali, setiap kali port modemnya berubah kita harus selalu mengulangi dan mengulangi langkah-langkah di atas. Mulai saat ini, tinggalkan cara di atas, dan beralihlah pada deteksi port modem secara otomatis.Adapun kode untuk mendeteksi port modem secara otomatis menggunakan VB6 adalah sebagai berikut:
Deteksi port modem secara otomatisOption Explicit
Dim strBuffer As StringDim intPortNumber As String
Private Sub Command2_Click() On Error Resume Next Dim i As Integer For i = 1 To 20 If MSComm1.PortOpen Then MSComm1.PortOpen = False intPortNumber = i MSComm1.CommPort = i MSComm1.PortOpen = True MSComm1.Output = "AT" & vbCrLf Wait Me, 50 NextEnd Sub
Private Sub Form_Load() With MSComm1 .Settings = "115200,n,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 End WithEnd Sub
Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False EndEnd Sub
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive
strBuffer = strBuffer & MSComm1.Input End Select Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "OK") > 0 Then Caption = "COM" & intPortNumber Text1.Text = intPortNumber End IfEnd Sub
Menambahkan Fitur Auto Reply
Adapun contoh kode VB6 membalas SMS otomatis adalah seperti di bawah ini:
Option Explicit
Dim strBuffer As StringDim blnFirstLoad As Boolean
Private Sub Command1_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False With MSComm1 .PortOpen = True .Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf .Output = TxtMessage.Text & Chr(26) End WithEnd Sub
Private Sub Form_Load() With MSComm1 .CommPort = 7 'port disesuaikan atau beri kode auto detect port modem .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .NullDiscard = True .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End WithEnd Sub
Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False End IfEnd Sub
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "+CMGR") Then If InStr(1, strBuffer, "OK") Then Text1.Text = strBuffer End If End If If InStr(1, strBuffer, "+CMTI") > 0 Then If Right(strBuffer, 1) = vbLf Then Dim s() As String s = Split(strBuffer, ",") Debug.Print s(UBound(s)) ReadSMSByIndex Trim$(s(UBound(s))) Delay 1 Command1_Click 'Auto reply strBuffer = "" End If End If End SelectEnd Sub
Private Sub ReadSMSByIndex(Index As Integer) strBuffer = "" MSComm1.Output = "AT+CMGR=" & Index & vbCrLf 'baca SMS yang berada di index ke-1End Sub
Private Sub Delay(ByVal HowLong As Date) Dim endDate As Date endDate = DateAdd("s", HowLong, Now) While endDate > Now DoEvents WendEnd Sub
Mengirim SMS Disertai Verifikasi Terkirim - VB Source Code
Option Explicit
Dim strBuffer As String
Private Sub Command1_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False With MSComm1 .CommPort = 7 .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End With MSComm1.Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf Delay 1 MSComm1.Output = TxtMessage.Text & Chr(26) If WaitForSuccess Then MsgBox "SMS telah terkirim", vbInformation + vbOKOnly Else MsgBox "SMS gagal terkirim", vbCritical, "SMS Gagal" End If End Sub
Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End IfEnd Sub
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input End Select Debug.Print strBufferEnd Sub
Private Function WaitForSuccess() As Boolean Dim i As Integer Dim strInput As String Dim strPart As String Dim c As String, b As String For i = 1 To 5 Do Delay 1 c = strBuffer strBuffer = "" If c = "" Then Exit Do b = strInput & c Loop strPart = b
strInput = strInput & strPart If InStr(1, strInput, vbCrLf & "OK" & vbCrLf) > 0 Then Exit For If strPart = "" Then Delay 1 End If Next WaitForSuccess = InStr(1, strInput, vbCrLf & "OK" & vbCrLf) > 0End Function
Private Sub Delay(ByVal HowLong As Date) Dim endDate As Date endDate = DateAdd("s", HowLong, Now) While endDate > Now DoEvents WendEnd Sub
AT Command Tester Sederhana
Option Explicit
Dim strBuffer As String
Private Sub cmdSend_Click() txtResult.Text = "" txtProcess.Text = "" strBuffer = "" If UCase$(Left$(txtATCommand.Text, 2)) <> "AT" Then MSComm1.Output = txtATCommand.Text & Chr(26) Else MSComm1.Output = txtATCommand.Text & vbCrLf End IfEnd Sub
Private Sub Form_Load() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False With MSComm1 .CommPort = 7 .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End WithEnd Sub
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End IfEnd Sub
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input End Select txtProcess.Text = strBuffer txtProcess.SelStart = Len(txtProcess.Text) Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "OK") > 0 Then txtResult.Text = strBuffer txtResult.SelStart = Len(txtResult.Text) ElseIf InStr(1, strBuffer, "ERROR") Then txtResult.Text = strBuffer strBuffer = "" End IfEnd Sub
Mengirim SMS Menggunakan Modem Wavecom - VB6 Code
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click() With MSComm1 .CommPort = 7 'Port disesuaikan terhadap modem Wavecom yang terdeteksi .Settings = "115200,n,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End With
MSComm1.Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf Sleep 1000 MSComm1.Output = TxtMessage.Text & Chr(26)End Sub
Menerima dan Menampilkan SMS Baru
Option Explicit
Dim strBuffer As String
Private Sub Form_Load() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False With MSComm1 .CommPort = 3 .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End WithEnd Sub
Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End IfEnd Sub
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "+CMTI") > 0 Then If Right(strBuffer, 1) = vbLf Then Text1.Text = strBuffer End If End If
End SelectEnd Sub
Sampai dengan kode di atas, apabila ada SMS baru, maka modem akan memberitahukan kepada kita dengan diawali "+CMTI" misalnya: +CMTI: "SM",11. SM artinya memory yang digunakan adalah SIM card, sedangkan angka 11 mewakili indeks dari SMS tersebut, jadi apabila kita ingin mengakses/membaca SMS tersebut harus menggunakan 11 sebagai indeksnya. Gantilah kode yang terdapat dalam event MSComm1_OnComm() diatas dengan kode dibawah ini, apabila Anda berkeinginan membaca isi SMS baru tersebut.
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive strBuffer = strBuffer & MSComm1.Input Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If InStr(1, strBuffer, "OK") > 0 Then Text1.Text = strBuffer Dim d() As String d = Split(strBuffer, vbCrLf) strBuffer = "" End If If InStr(1, strBuffer, "+CMTI") > 0 Then Do strBuffer = strBuffer & MSComm1.Input Loop While MSComm1.InBufferCount If Right(strBuffer, 1) = vbLf Then Text1.Text = strBuffer Dim s() As String s = Split(strBuffer, ",") ReadSMSByIndex Trim$(s(UBound(s))) End If End If End SelectEnd Sub
Private Sub ReadSMSByIndex(Index As Integer) strBuffer = "" MSComm1.Output = "AT+CMGR=" & Index & vbCrLf 'baca SMS yang berada di index ke-1End Sub
Setelah kita modifikasi, maka akan menghasilkan:
+CMGR: "REC UNREAD","+6281315673456",,"12/06/26,01:43:51+28"Test SMS. Test SMS.
OK
Lakukan parse (urai, pisah, memilih dan memilah) jika Anda terganggu dan tidak nyaman dengan perolehan response data yang selalu diawali dengan "+CMGR: "REC UNREAD" kemudian koma dan diakhiri dengan kata "OK". Terutama jika Anda bermaksud memasukan data tersebut ke dalam objek ListView atau MSHFlexgrid, dan lain-lain, demikian pula jika bermaksud menghubungkannya dengan database Access, SQLite, MySQL, atau database apa saja tergantung selera Anda, tidak ada paksaan dalam hal ini
Fungsi Wait Sleep Tanpa Windows API - VB6 Code
Perbedaan fungsi sleep kali ini dengan fungsi sleep sebelumnya adalah: Fungsi sleep menggunakan Sleep Kernel32.dll:
Mem-freeze GUI (membekukan tampilan) Hitungan dalam millisecond
Fungsi sleep kali ini (lebih tepatnya delay time):
Tidak mem-freeze GUI Hitungan dalam second
Adapun fungsi sleep atau wait tanpa fungsi API adalah sebagai berikut:
Private Sub Sleep(ByVal HowLong As Date) Dim endDate As Date endDate = DateAdd("s", HowLong, Now) While endDate > Now DoEvents WendEnd Sub
Jika Anda mau bereksperimen maka buatlah kodenya seperti di bawah ini kemudian bandingkan antara fungsi sleep Kernel32.dll dengan fungsi sleep tanpa API.
Option Explicit
'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click() Label1.Caption = "Mulai menjalankan fungsi sleep atau wait" Label1.Refresh Sleep 5 'sleep/wait/hentikan eksekusi kode ke baris berikutnya selama 5 detik Label1.Caption = "Terhenti selama 5 detik"End Sub
Private Sub Command2_Click() Dim frm As New Form1 frm.ShowEnd Sub
Private Sub Timer1_Timer() Static i As Integer Caption = i i = i + 1End Sub
Private Sub Sleep(ByVal HowLong As Date) Dim endDate As Date endDate = DateAdd("s", HowLong, Now) While endDate > Now DoEvents WendEnd Sub
Demikianlah seputar fungsi sleep atau wait, menggunakan API dan tanpa menggunakan API.
Option Explicit
Private Function Sleep(mSecs As Long) As Double Dim Duration! Duration! = Timer + mSecs Do Until Timer > Duration! DoEvents LoopEnd Function
Private Sub Command1_Click() Sleep 0.9 MsgBox "Test"End Sub
SMS Gateway: Contoh Mengirim Kode USSD
USSD merupakan singkatan dari Unstructured Supplementary Service Data. USSD
biasanya diawali dengan tanda bintang (*) dan diakhiri dengan tanda pagar
(#). Contoh USSD:
*888#
*101#
*109*72348937857623#
Dibawah ini merupakan contoh mengirim kode USSD, yang digunakan untuk mengecek pulsa Simpati:
Option Explicit
Dim strBuffer As String
Private Sub Command1_Click() Text1.Text = "" strBuffer = "" If MSComm1.PortOpen = True Then MSComm1.PbortOpen = False With MSComm1 .CommPort = 3 .Settings = "115200,N,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True .Output = "AT+CUSD=1," & Chr(34) & "*888#" & Chr(34) & ",15" & vbCrLf End WithEnd Sub
Private Sub MSComm1_OnComm() strBuffer = strBuffer & MSComm1.Input Dim x As String If InStr(1, strBuffer, ",15") Then
Dim s() As String s = Split(strBuffer, vbCrLf) Dim i As Integer For i = 0 To UBound(s) If InStr(1, s(i), "+CUSD") Then x = s(i) End If Next End If If x <> "" Then s = Split(x, ",") Text1.Text = Mid$(s(1), 2, Len(s(1)) - 2) End IfEnd Sub
Maka hasilnya adalah seperti gambar di bawah ini:
sumber : www.seven-technology.blogspot.com , www. source-code-sms-gateway.blogspot.com
top related