PDA

View Full Version : کامپوننتی برای ارسال پیامک با gsm modem در ویندوز 7 64 بیت



saeed_sho
جمعه 23 فروردین 1392, 18:05 عصر
سلام
دنبال یه کامپوننت میگردم برای ارسال اس ام اس با مودم gsm در ویندوز 7 64 بیت
کامپوننت kylix sms activex رو ک.ر.ک شدشو دارم اما متاسفانه با ویندوز 32 بیت سازگاره و در ویندوز 64 بیت بعد از اضافه کردن به برنامه اجرا نمیشه
کسی اطلاع داره که kylix sms نسخه ی 64 بیت داره یا نه
یه نسخه 64 بیت ازش دانلود کردم اما دمو برنامه هنگ میکنه و اصلا اجرا نمیشه نمیدونم اصلا 64 بیته یا نه

کامپوننت mcore هم فعلا نسخه تریالشو دارم و یه ک.ر.ک هم دانلود کردم که هنوز تستش نکردم
کسی اطلاع داره که این کامپوننت با ویندوز 64 بیت 7 سازگاره یا نه؟
در سایتش که فقط نوشته بود سازگار با ویندوز و اسمی از نسخه ش ننوشته بود

با AT Command که نمیشه فارسی فرستاد

لطفا دوستان راهنمایی کنید

nakhodasokoot
جمعه 23 فروردین 1392, 21:05 عصر
چرا با AT command نشه !!!
من خودم با AT فارسی میفرستم
برای اینکه با AT فارسی بفرستین باید متن پیامتون رو بصورت PDU در بیارید که اگر همین PDU رو سرچ کنید هم سورس گیر میاد و هم مطلب

saeed_sho
شنبه 24 فروردین 1392, 08:50 صبح
فارسی هم میشه با pdu دریافت کرد؟
برای نوکیا هم میشه با pdu دریافت کرد؟

saeed_sho
شنبه 24 فروردین 1392, 19:25 عصر
چرا با AT command نشه !!!
من خودم با AT فارسی میفرستم
برای اینکه با AT فارسی بفرستین باید متن پیامتون رو بصورت PDU در بیارید که اگر همین PDU رو سرچ کنید هم سورس گیر میاد و هم مطلب
من اینجوری میفرستم آخرش که متن پیامک رو میفرستم هیچ واکنشی نشون نمیده ببینید درسته
Public Function SendMsg(ByVal port As SerialPort, _
ByVal PhoneNo As String, _
ByVal Message As String) As Boolean
'
Dim isSend As Boolean = False
'
Try
Dim receivedData As String = ExecCommand(port, "AT", 300, "No phone connected")
receivedData = ExecCommand(port, "AT+CSCS=""HEX""", 300, "Failed to set hexadecimal format")
receivedData = ExecCommand(port, "AT+CMGF=1", 300, "Failed to set message format")
receivedData = ExecCommand(port, "AT+CSMP=1,167,0,8", 300, "")
Dim command As String = "AT+CMGS=""" + PhoneNo + """"
receivedData = ExecCommand(port, command, 300, "Failed to accept PhoneNo")
command = Message + ChrW(26)
Dim sHex As String = StringToHex(command)

receivedData = ExecCommand(port, sHex, 3000, "Failed to send message", True) '3 seconds
If (receivedData.EndsWith(vbCr + vbLf + "OK" + vbCr + vbLf) OrElse receivedData.EndsWith("63")) Then
isSend = True
ElseIf (receivedData.Contains("ERROR")) Then
isSend = False
End If
Return isSend
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
End Function
Public Function StringToHex(ByVal sStr As String) As String
Dim sHex As New StringBuilder
Dim ch As String = String.Empty
'For i As Integer = 1 To sStr.Length
'ch = Mid(sStr, i, 1)
'sHex.Append(Conversion.Hex(Strings.Asc(ch)))
'Next i
'Dim byteArray() As Byte = ASCIIEncoding.ASCII.GetBytes(sStr)
'For i As Integer = 0 To byteArray.Length - 1
'sHex.Append(byteArray(i).ToString("x"))
'Next i
'For Each c As Char In sStr
'Dim tmp As Integer = AscW(c)
'sHex.Append(String.Format("{0:x4}", Convert.ToUInt32(tmp.ToString())))
'Next
For i As Integer = 1 To sStr.Length
ch = Mid(sStr, i, 1)
sHex.Append(String.Format("{0:x4}", Convert.ToUInt32(AscW(ch))))
Next
Return sHex.ToString()
End Function
Public Function ExecCommand(ByVal port As SerialPort, _
ByVal command As String, _
ByVal responseTimeout As Integer, _
ByVal errorMessage As String, _
Optional ByVal is_hexa As Boolean = False, _
Optional ByVal is_response_hex As Boolean = False) As String
'
Try
port.DiscardOutBuffer()
port.DiscardInBuffer()
receiveNow.Reset()
'Dim enc As Encoding = Encoding.UTF8
'Dim bCommand As Byte() = enc.GetBytes(command + vbCr)
If (is_hexa = False) Then
port.Write(command + vbNewLine)
Else
'port.Write(command + Conversion.Hex(Strings.Asc(vbCr)))
port.Write(command)
End If

'port.Write(bCommand, 0, bCommand.Length)
'
Dim input As String = String.Empty
If (is_response_hex = True) Then
input = ReadResponse(port, responseTimeout, True)
Else
input = ReadResponse(port, responseTimeout, is_hexa)
End If
'If ((input.Length = 0) OrElse ((Not input.EndsWith(vbCr + vbLf + "> ")) AndAlso (Not input.EndsWith(vbCr + vbLf + "OK" + vbCr + vbLf))) OrElse (input.EndsWith("63"))) Then
'MessageBox.Show("No success message was received.")
'End If
Return input
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
End Function
Public Function ReadResponse(ByVal port As SerialPort, _
ByVal timeout As Integer, _
Optional ByVal is_hexa As Boolean = False) As String
'
Dim buffer As String = String.Empty
Try
'Do
If (receiveNow.WaitOne(timeout, False)) Then
'Dim readCount As Integer = 0
'readCount = port.BytesToRead
'Dim readBytes(readCount - 1) As Byte
'port.Read(readBytes, 0, readCount)
'
'For Each b As Byte In readBytes
'buffer += Chr(b)
'Next
Dim t As String = port.ReadExisting()
If (is_hexa = True) Then
buffer += HexToString(t)
Else
buffer += t
End If
Else
If (buffer.Length > 0) Then
MessageBox.Show("Response received is incomplete.")
Else
MessageBox.Show("No data received from phone.")
End If
End If
'Loop While Not buffer.EndsWith(vbCr + vbLf + "OK" + vbCr + vbLf) AndAlso Not buffer.EndsWith(vbCr + vbLf + "> ") AndAlso Not buffer.EndsWith(vbCr + vbLf + "ERROR" + vbCr + vbLf) OrElse buffer.EndsWith("63")
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
Return buffer
End Function

Public Function HexToString(ByVal sHex As String) As String
Dim text As New StringBuilder()
'For i As Integer = 0 To sHex.Length - 2 Step 2
'text.Append(Chr(Convert.ToByte(sHex.Substring(i, 2), 16)))
'Next i
'Dim enc As Encoding = Encoding.Default
'Dim encbyte() As Byte = enc.GetBytes(sHex)
'Dim encutf8() As Byte = Encoding.Convert(enc, Encoding.UTF8, encbyte)
'Return text.ToString()
'Return Encoding.UTF8.GetString(encutf8)
For i As Integer = 1 To sHex.Length Step 4
text.Append(ChrW(CLng("&h" + Mid(sHex, i, 4))))
Next i
Return text.ToString()
End Function