Sunday, April 13, 2014

Send and Receive SMS using VB6

 Send and Receive SMS using VB6 No Third Party Software Required


How to Use.

1. Connect your broadband device to your PC that support sending and receiving SMS or your phone.
2. Install driver for your device.
3. Then stop all programs associated with your device like device dashboard. If you will not stop your device dashboard, you can send SMS but you cannot received SMS directly from your program.
4. Run this program and choose your device listed on the combo box(cbo). If your device is not on the list. click refresh device list(cmdrefresh).
5. Click Test Connection(cmdconnect).
6. You may start sending SMS.
7. Tick Receive Message(chk)

Components

1. Microsoft Comm Control 6.0

Module Code


Public GSMPort As String
Public GSMDescription As String
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public OK As Boolean
Public Error As Boolean


Function gsmConnect(xMSComm As MSComm, xPort As String) As String


    On Error Resume Next
   
    With xMSComm
    .CommPort = xPort
    .Settings = "9600,N,8,1"
    .Handshaking = comRTS
    .RTSEnable = True
    .DTREnable = True
    .RThreshold = 1
    .SThreshold = 1
    .InputMode = comInputModeText
    .InputLen = 0
    .PortOpen = True
    End With
   
    If Err.Number = 0 Then
        gsmConnect = "Connection Successful"
    Else
        gsmConnect = "Cannot connect to" & GSMDescription & "." & Err.Description
       
        GSMCom = ""
        GSMDescription = ""
    End If
       
End Function

Sub Wait_For_Response()
Dim Start

   Start = Timer
   Do While Timer < Start + 8
      DoEvents
      If OK Then
        Exit Sub
      End If
      If Error Then
        Exit Sub
      End If
   Loop
End Sub

Form Code

Private Sub chk_Click()

Screen.MousePointer = vbDefault
    If chk.Value = 0 Then
        If MSComm1.PortOpen = True Then
            Timer1.Enabled = False
            MSComm1.PortOpen = False
            'StatusBar1.Panels(1).Text = "Auto responder is inactive..."
           
        End If
    ElseIf chk.Value = 1 Then

       ' StatusBar1.Panels(1).Text = "Waiting for incoming messages..."
       
        getComPorts
        Connect_Now
        Timer1_Timer
        Timer1.Enabled = True
        'received2
    End If

End Sub

Private Sub cmdclose_Click()

Unload Me

End Sub

Private Sub cmdconnect_Click()
   
    If Len(Trim(cbo.Text)) = 0 Then
        MsgBox "Please choose device to connect.", vbwarning, "Alert!"
            cbo.SetFocus
        Exit Sub
    End If
   
    On Error Resume Next
    Screen.MousePointer = vbHourglass
    MSComm1.PortOpen = False
    getComPorts
   
    MsgBox gsmConnect(MSComm1, GSMPort)
   
    Screen.MousePointer = vbDefault
    MSComm1.PortOpen = False
   
End Sub

Private Sub cmdrefresh_Click()


    'On Error Resume Next
        cbo.Clear
       
    Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("select * from Win32_PnPEntity")
   
    For Each wmiobject In WMIObjectSet
        If InStr(wmiobject.Name, "COM") Then
        If InStr(wmiobject.Name, "COM ") Then GoTo nope
            cbo.AddItem wmiobject.Name
           
nope: End If
      Next
        Set WMIObjectSet = Nothing
       
End Sub

Private Sub getComPorts()

    On Error Resume Next
   
    If Mid(cbo.Text, Len(Trim(cbo.Text)) - 2, 1) = "M" Then
    GSMPort = Mid(cbo.Text, Len(Trim(cbo.Text)) - 1, 1)
    Else
    GSMPort = Mid(cbo.Text, Len(Trim(cbo.Text)) - 2, 2)
    End If
    GSMDescription = cbo.Text

End Sub

Private Sub Connect_Now()


On Error GoTo errmali
If Len(Trim(GSMPort)) = 0 Then
    MsgBox "Please check your connection to the device."

Else
    With MSComm1
    .CommPort = GSMPort
    .Settings = "9600,N,8,1"
    .Handshaking = comRTS
    .RTSEnable = True
    .DTREnable = True
    .RThreshold = 1
    .SThreshold = 1
    .InputMode = comInputModeText
    .InputLen = 0
    .PortOpen = True
End With
End If
Exit Sub
errmali:
    MsgBox "Please check your connection to the device."
   
End Sub

Private Sub cmdsend_Click()


On Error Resume Next
    MSComm1.PortOpen = False
    Connect_Now
    MSComm1.Output = "AT" & vbCrLf
    Sleep 500
   
    MSComm1.Output = "AT+CMGF = 1" & vbCrLf
    Sleep 500
   
    MSComm1.Output = "AT+CMGS = " & Chr(34) & txtcontact.Text & Chr(34) & vbCrLf
    Sleep 1000
   
    MSComm1.Output = txtsms.Text & Chr(26)
    Sleep 2000

End Sub

Public Sub received2()


On Error Resume Next
Dim rawmsg, msgno, msgdate, mobile, msgreceived As String
'StatusBar1.Panels(1).Text = "new message received..."

MSComm1.Output = "AT+CMEE = 1" & Chr$(13)
Do
    DoEvents
    buffer$ = buffer$ & MSComm1.Input
Loop Until InStr(buffer$, "OK")
buffer$ = ""

StatusBar1.Panels(1).Text = "processing new message..."

MSComm1.Output = "AT+CMGF = 1" & Chr$(13)

Do
    DoEvents
    buffer$ = buffer$ & MSComm1.Input
Loop Until InStr(buffer$, "OK")
'List All Messages
buffer$ = ""

MSComm1.Output = "AT+CMGL = " & Chr(34) & "ALL" & Chr(34) & vbCrLf
Do
DoEvents
buffer$ = MSComm1.Input

If InStr(buffer$, "+CMGL:") Then
    'List2.AddItem Replace(Split(buffer$, ",")(2), Chr(34), "") & "-" & Replace(Split(buffer$, ",")(1), "REC", "") & "-" & Replace(Split(buffer$, ",")(4), Chr(34), "") & "-" & Replace(Split(buffer$, Chr(13))(2), Chr(10), "")
    rawmsg = Replace(Split(buffer$, ",")(2), Chr(34), "") & "-" & Replace(Split(buffer$, ",")(1), "REC", "") & "-" & Replace(Split(buffer$, ",")(4), Chr(34), "") & "-" & Replace(Split(buffer$, Chr(13))(2), Chr(10), "")
   
    msgno = Val(Replace(Split(buffer$, ",")(0), "+CMGL:", "")) 'Split(rawmsg, "-")(0) & vbCrLf
    msgno = Trim(msgno)
   
    msgdate = Split(rawmsg, "-")(2) & vbCrLf
    msgdate = Replace(Replace(msgdate, Chr(10), ""), Chr(13), "")
   
    mobile = Split(rawmsg, "-")(0) & vbCrLf
    mobile = Replace(Replace(Replace(mobile, "+63", ""), Chr(10), ""), Chr(13), "")
   
    msgreceived = Split(rawmsg, "-")(3) & vbCrLf
    msgreceived = Replace(Replace(Trim(msgreceived), Chr(10), ""), Chr(13), "")

    ' display received message in a listbox name List2
   
    'List2.AddItem "Msg. No : " & msgno & " Date: " & msgdate & " Mobile No. :" & mobile & " SMS : " & msgreceived
    'KEYWORD is for auto reply, remove the block of code if you do not want to create an auto reply of received message
   
    If UCase(msgreceived) = "KEYWORD" Then
            'Process received message here
        Screen.MousePointer = vbHourglass
                           
        MSComm1.Output = "AT" & vbCrLf
   
            Wait_For_Response
                                   
            MSComm1.Output = "AT+CMGF = 1" & vbCrLf
           
              'This line can be removed if your modem will always be in Text Mode...
           
            Wait_For_Response
           
            MSComm1.Output = "AT+CMGS = " & Chr(34) & "+63" & mobile & Chr(34) & vbCrLf
           
            'Replace this with your mobile Phone 's No.
           
            Wait_For_Response
                                   
            MSComm1.Output = "HI from SMS" & Chr(26)
                'Sleep 2000
            Wait_For_Response
           
                Screen.MousePointer = vbDefault
                                        
    End If
    'end of KEYWORD block of code
   
         List2.AddItem "Msg. No : " & msgno & " Date: " & msgdate & " Mobile No. : +63" & mobile & " SMS : " & msgreceived
            'Delete SMS after reading
            cmd = "AT+CMGD = " & msgno
            MSComm1.Output = cmd & vbCrLf
            Wait_For_Response
       
End If
Loop Until InStr(buffer$, "OK")
buffer$ = ""

End Sub

Private Sub Timer1_Timer()

received2
    'Timer1.Enabled = false
   ' StatusBar1.Panels(1).Text = "Waiting for incoming messages..."
    MSComm1.PortOpen = False
    MSComm1.PortOpen = True
End Sub