Hallo Miteinander,
da ich berüflich nach einer Möglichkeit gesucht habe um automatisiert SMS zu versenden, bin ich auf eine sehr gute Lösung gestoßen, bei der man nicht viel mehr als ein USB Modem mit Simkarte (haben bestimmt viele zu Hause rumliegen).
Es gibt noch viele andere Möglichkeiten:
Mit der hier vorgestellten Version ist man sehr konstengünstig am Weg und kann alles selbst mit ein paar Zeilen Code machen!
da ich berüflich nach einer Möglichkeit gesucht habe um automatisiert SMS zu versenden, bin ich auf eine sehr gute Lösung gestoßen, bei der man nicht viel mehr als ein USB Modem mit Simkarte (haben bestimmt viele zu Hause rumliegen).
Es gibt noch viele andere Möglichkeiten:
- Drittanbieter
- SMS Server (kostenpflichtige Software)
- SMS Gateway mit Auduino od. Raspberry
Mit der hier vorgestellten Version ist man sehr konstengünstig am Weg und kann alles selbst mit ein paar Zeilen Code machen!
VB.NET-Quellcode
- Imports System.Management
- Imports System.IO.Ports
- Public Class GSM
- Public Class GSMModem
- Private WithEvents SerialInterface As New SerialPort
- Public Property AttachedTo As String
- Public Property Description As String
- Public ReadOnly Property isConnected As Boolean
- Get
- Return SerialInterface.IsOpen
- End Get
- End Property
- Public Event DataRecived(ByVal e As String)
- Public Event SuccessfullyConnectedToModem()
- Public Event Disconnected()
- Public Overrides Function ToString() As String
- Return Me.Description
- End Function
- Public Sub New(ByVal queryObj As ManagementObject)
- Me.AttachedTo = queryObj("AttachedTo")
- Me.Description = queryObj("Description")
- End Sub
- Public Sub connect()
- With SerialInterface
- .PortName = Me.AttachedTo
- .BaudRate = 9600
- .Parity = Parity.None
- .DataBits = 8
- .StopBits = StopBits.One
- .Handshake = Handshake.None
- .RtsEnable = True
- .ReceivedBytesThreshold = 1
- .NewLine = vbCr
- .ReadTimeout = 1000
- .Open()
- End With
- If SerialInterface.IsOpen Then
- RaiseEvent SuccessfullyConnectedToModem()
- End If
- End Sub
- Public Sub disconnect()
- SerialInterface.Close()
- RaiseEvent Disconnected()
- End Sub
- Public Sub send(ByVal text As String)
- SerialInterface.WriteLine(text)
- End Sub
- Public Sub sendSMS(ByVal tel As String, ByVal message As String)
- With SerialInterface
- .Write("at" & vbCrLf)
- System.Threading.Thread.Sleep(1000)
- .Write("at+cmgf=1" & vbCrLf)
- System.Threading.Thread.Sleep(1000)
- .Write("at+cmgs=" & Chr(34) & tel & Chr(34) & vbCrLf)
- System.Threading.Thread.Sleep(1000)
- .Write(message & Chr(26))
- End With
- End Sub
- Private Sub SerialInterface_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialInterface.DataReceived
- Dim dataIn As String = ""
- For i As Integer = 1 To SerialInterface.BytesToRead
- dataIn &= Chr(SerialInterface.ReadChar)
- Next
- RaiseEvent DataRecived(dataIn)
- End Sub
- End Class
- Public Function CollectModems() As List(Of GSMModem)
- Dim Modems As New List(Of GSMModem)
- Try
- Dim Searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_POTSModem")
- For Each queryObj As ManagementObject In Searcher.Get
- If queryObj("Status") = "OK" Then
- Modems.Add(New GSMModem(queryObj))
- End If
- Next
- Catch ex As Exception
- MsgBox(ex)
- End Try
- Return Modems
- End Function
- End Class
VB.NET-Quellcode
- Public Class Form1
- Private isExpanded As Boolean = True
- Private g As New GSM
- Private WithEvents usedModem As GSM.GSMModem
- Delegate Sub delegateLog(ByVal text As String)
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim ListOfModems As List(Of GSM.GSMModem) = g.CollectModems
- For Each item In ListOfModems
- ListBox_allDevices.Items.Add(item)
- Next
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btn_connect_disconnect.Click
- If IsNothing(usedModem) Then
- usedModem = ListBox_allDevices.SelectedItem
- usedModem.connect()
- Else
- If usedModem.isConnected Then
- usedModem.disconnect()
- End If
- End If
- End Sub
- Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox_allDevices.SelectedIndexChanged
- Dim pos As Integer = Me.ListBox_allDevices.IndexFromPoint(Me.ListBox_allDevices.PointToClient(MousePosition))
- If pos <> -1 Then
- btn_connect_disconnect.Enabled = True
- Else
- btn_connect_disconnect.Enabled = False
- End If
- End Sub
- Sub log(ByVal text As String)
- RichTextBox2.AppendText(text)
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- usedModem.sendSMS(txt_tel.Text, rtb_nachricht.Text)
- End Sub
- Private Sub btn_refresh_Click(sender As Object, e As EventArgs) Handles btn_refresh.Click
- ListBox_allDevices.Items.Clear()
- Dim ListOfModems As List(Of GSM.GSMModem) = g.CollectModems
- For Each item In ListOfModems
- ListBox_allDevices.Items.Add(item)
- Next
- End Sub
- Private Sub usedModem_DataRecived(e As String) Handles usedModem.DataRecived
- Me.Invoke(New delegateLog(AddressOf log), e)
- End Sub
- Private Sub usedModem_SuccessfullyConnectedToModem() Handles usedModem.SuccessfullyConnectedToModem
- btn_connect_disconnect.Text = "Verbindung Trennen"
- btn_connect_disconnect.Image = Image.FromFile(Application.StartupPath & "\images\disconnect.png")
- ListBox_allDevices.Enabled = False
- sendsmspanel.Enabled = True
- MessageBox.Show("Verbindung zum Modem erfolgreich hergestellt", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
- End Sub
- Private Sub usedModem_Disconnected() Handles usedModem.Disconnected
- usedModem = Nothing
- btn_connect_disconnect.Text = "Verbindung zum Modem herstellen"
- btn_connect_disconnect.Image = Image.FromFile(Application.StartupPath & "\images\connect.png")
- ListBox_allDevices.Enabled = True
- sendsmspanel.Enabled = False
- MessageBox.Show("Verbindung wurde getrennt", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- End Sub
- Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles btn_expand.Click
- If isExpanded = True Then
- isExpanded = False
- Me.Size = New Size(Me.Width, Me.Height - RichTextBox2.Height)
- btn_expand.Image = Image.FromFile(Application.StartupPath & "\images\plus.png")
- Else
- isExpanded = True
- Me.Size = New Size(Me.Width, Me.Height + RichTextBox2.Height)
- btn_expand.Image = Image.FromFile(Application.StartupPath & "\images\minus.png")
- End If
- End Sub
- End Class
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „windowsfan“ ()