MSCOMM - Manejar el celular desde la PC

Iniciado por extreme69, 1 Marzo 2011, 07:59 AM

0 Miembros y 2 Visitantes están viendo este tema.

extreme69

Hace 2 días que estoy intentando que esto me funcione...

No encontré absolutamente nada en el foro sobre este control.

| |-+  Resultados de la búsqueda
Páginas: [1]
No se encontraron resultados
Páginas: [1]


Si encontré unos ... 1200 ejemplos distintos... pero obviamente me falta algo porque no logro hacer que me funcione.

Paso a explicar... estoy intentando manejar el celular desde la pc, ¿para que? bueno, mando muchos sms por día y me queda más cómodo escribirlos en un teclado de pc que en el celular.

Así que estoy intentando hacer un programa que me permita desde el pc enviar sms (con el celular conectado por usb).

Bueno, mis primeras pruebas fueron 100% exitosas, utilicé hyperterminal para conectarme al COM correspondiente y luego jugué con comandos AT hasta lograr enviar el SMS con éxito.

Pongo los comandos y describo cada línea:

AT 'son comandos AT
OK
AT+CMGF=1 'manejar el mensaje en formato texto
OK
AT+CMGW="+666" 'mandar sms a este numero
> Testeo de texto largo para probar bla bla bla bla bla bla bla bla bla. 'contenido del sms a enviar
+CMGW: 14398

OK
AT+CMSS=14398
+CMSS: 20

OK


Ahora lo quiero hacer en VB6... y me encuentro con importantes inconvenientes.

Primero que nada creé una función con un "sleep" improvisado... el código sería algo así:

Sub Espera(Segundos As Single)
  Dim ComienzoSeg As Single
  Dim FinSeg As Single
  ComienzoSeg = Timer
  FinSeg = ComienzoSeg + Segundos
  Do While FinSeg > Timer
      DoEvents
      If ComienzoSeg > Timer Then
          FinSeg = FinSeg - 24 * 60 * 60
      End If
  Loop
End Sub


Luego agregué el control MSComm y un botón con el siguiente código:

MSComm1.InputLen = 0
MSComm1.CommPort = "3" ' Com3 Port
Espera (1)
MSComm1.Settings = "57600,n,8,1"
Espera (1)
MSComm1.PortOpen = True
Espera (1)
MSComm1.Output = "AT" & Chr(10)
Espera (1)
MSComm1.Output = "AT+CMGF=1" & Chr(10)
Espera (1)
MSComm1.Output = "AT+CMGW=" & "+666" & Chr$(13) & Chr(13) & Chr(10)
Espera (1)
MSComm1.Output = "Contenido sms aca" & Chr(26)


Pero esto NO me funciona... aunque está igual de seteado que el hyperterminal...

Por otro lado, si pretendo enviar sms desde un programa, debo saber el "index" del mensaje a enviar, en el caso del hyperterminal como lo hago a mano ví que el index del mensaje a enviar era "14398", para luego utilizar CMSS=14398 para enviar el sms, pero si lo hago con el soft ¿como hago que determine este número para luego usarlo en CMSS?

Podría usar MSComm.Input = RichTextBox1.Text y mid para sacar el contenido, pero no funciona tampoco, obviamente estoy haciendo algo mal.

¿Un poco de luz?  ;-)

BlackZeroX

#1
.
No estas respectando la sintasis de los comandos AT, Prueba con esto:

Alternativa al OCX.
Clase para los puertos Com hecha por Coco/Cocus.

Código (Vb) [Seleccionar]


Option Explicit

Private WithEvents obj_clscom           As clsCom

'
'   /////////////////////////////////////////////////////////////
'   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
'   //                                                         //
'   // Web:     http://InfrAngeluX.Sytes.Net/                  //
'   //                                                         //
'   //    |-> Pueden Distribuir Este codigo siempre y cuando   //
'   // no se eliminen los creditos originales de este codigo   //
'   // No importando que sea modificado/editado o engrandecido //
'   // o achicado, si es en base a este codigo                 //
'   /////////////////////////////////////////////////////////////
'   // http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=6:artwait&catid=2:catprocmanager&Itemid=8
'   /////////////////////////////////////////////////////////////

Private Declare Function WaitMessage Lib "user32" () As Long

Enum eTime
    Horas = 3600
    Minutos = 60
    Segundos = 1
End Enum

Public Sub Wait(ByVal vToWait&, Optional ByVal ThisWait As eTime = Segundos, Optional ByVal UseAllProc As Boolean = False)
Dim vDateE      As Date
    vDateE = DateAdd("s", vToWait& * (ThisWait + 0), Time)
    Do While vDateE > Time
        Call WaitMessage
        If Not UseAllProc Then DoEvents
    Loop
End Sub
Private Sub Form_Load()
    Set obj_clscom = New clsCom
    With obj_clscom
        .ComPort = 4
        .ComSettings = "57600,N,8,1"    ' 57600 bps, sin paridad, 8 bits de data, 1 bit de stop
        .TimerDelay = 1000              ' 1000ms = 1 Segundo para chequear si entro data
        .TimerEnabled = True
        If .InitCom Then
            Call .WriteCom("AT" & vbCr)
' wait()
            Call .WriteCom("AT+CMGF=1" & vbCr)
' wait()
            Call .WriteCom("AT+CMGS=" & Chr(34) & "0445526651140" & Chr(34) & vbCr) ' // Segun el protocolo lo que nos retorna es +CMGS: <Num. Identificador>
' wait()
            Call .WriteCom("Espero una jalada en mi cel, aun que ya no tengo credito xP" & Chr(26))    ' 26 = Ctrl+Z ( Segun el protocolo AT )
        End If
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set obj_clscom = Nothing
End Sub

Private Sub obj_clscom_DataReceived(ByVal strData As String)
    Debug.Print strData
    If InStr(1, strData, "+CMGS:") > 0 Then
        If InStr(1, strData, "OK") > 0 Then
            Dim str_Ret()       As String
            str_Ret() = Split(Replace(Replace(strData, vbCr, ""), "OK", ""), " ")
            Call obj_clscom.WriteCom("AT+CMSS=" & Val(str_Ret(1)) & vbCr)
        End If
    End If
End Sub



Temibles Lunas!¡.
The Dark Shadow is my passion.

-- KiLiaN --

CitarTemibles Lunas!¡.

y porque ahora temibles?? xD
Entren al chat de elhacker.net
    
   

@kln13

BlackZeroX

#3
.

OJO el codigo que puse es funcional al 100%

Tan solo con el comando

AT+CMGS

Enviara el SMS

No conozco, ni me figura en mis libros el comando:

AT+CMSS

Pero lo agregue a como creo que va.

Temibles Lunas!¡.
The Dark Shadow is my passion.

extreme69

BlackZeroX, ¿como decirlo sin sonar gay?

Sos un tierno  :-*

Tuve que cambiar algunos comandos AT pero funcionó EXCELENTE  ;-)

Psyke1

Cita de: extreme69 en  1 Marzo 2011, 17:37 PM
BlackZeroX, ¿como decirlo sin sonar gay?

Sos un tierno  :-*

Tuve que cambiar algunos comandos AT pero funcionó EXCELENTE  ;-)
gay :xD

DoEvents! :P

extreme69

Cita de: Mr.Frog™ en  1 Marzo 2011, 18:18 PM
gay :xD

DoEvents! :P

Uy! ese me conoce  :-[

De paso por si alguien más está intentando hacer lo mismo que yo explico la diferencia entre CMGW y CMGS es que con CMGW el mensaje se guarda en el storage area de "mensajes salientes" y hasta que no usás CMSS=Numero_Index no se envía el mensaje.

Yo venía utilizando CMGW + CMSS y tenía un grave problema que era como obtener las respuestas para obtener el numero index del mensaje a enviar, ahora con el CMGS quedó solucionado.

Esos libros mágicos de BlackZeroX son increíbles... debe tener una biblioteca de 9000m2...  :o

Ahora noto una gran diferencia más en el CMSS... estoy haciendo las pruebas enviandome un sms a mi mismo, el mensaje llega, y lo puedo leer, PERO NO QUEDA GUARDADO EN NINGUN LADO jajajaja, es increíble... se puede leer 1 única vez, y no queda ningún rastro del mensaje luego de salir del mensaje, simplemente desaparece.


BlackZeroX

.
Tu como crees que le enviaba mensajes a la Mr. Frogs sin que tuviera evidencias de quien le envio el mensajito xP.

Con:

AT+CMGW

lo guardas

Dulces Lunas!¡.
The Dark Shadow is my passion.

extreme69

Jajaja, si, si, ya ví, pero lo raro... es que se entiende que no kede en la bandeja de salida porque no se está guardando el mensaje... pero ¡¿en la de entrada tampoco?!

79137913

HOLA!!!

No se si me estoy metiendo mal, pero los mensajes que conozco que no se guardan en ninguna casilla son las notificaciones de red.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*