Envió de teclas/pulsaciones a una aplicación externa.

Envió de teclas/pulsaciones a una aplicación externa.

Postby FiveWiDi » Wed May 31, 2023 2:27 pm

Hola a todos,

Estoy 'jugando' con web.whastapp.com, el caso es que consigo posicionarme en la pantalla, consigo buscar un contacto mediante el número de móvil, pero no hay manera de colocar el redactado del mensaje.
Lo que hago es coger el texto del redactado, y carácter a carácter intento enviarlo a la pantalla (antes ya me he posicionado en el 'get' del whasapp), mediante los códigos que proporciona ASC().

Le he metido trazas y parece que lo estoy haciendo bien, para una 'a' envía el código 97 y en pantalla muestra el número 1, para otros caracteres:

a b c d e f g h i j k l m n ñ o p q r s t u v w x y z
1 2 3 4 5 6 7 8 9 * + - . /

la 'm' y 'ñ' no muestran nada.
la 'p' abre la ayuda de crhome.

Está claro que no entiendo Windows (ni el a mi) y me falta mucha cultura web.

¿Cómo harían Ustedes para poder enviar un texto a un 'get' de una página web?

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1189
Joined: Mon Oct 10, 2005 2:38 pm

Re: Envió de teclas/pulsaciones a una aplicación externa.

Postby karinha » Wed May 31, 2023 3:24 pm

Mira se ayda:

Code: Select all  Expand view

// http://fivewin.com.br/index.php?/topic/ ... o-com-web/

// http://www.pctoledo.com.br/forum/viewto ... 9&start=15

/*
Function Main()

   Local oShell

   oShell := CreateObject( "WScript.Shell" )
   oShell:run("chrome.exe https://api.whatsapp.com/send?phone=34666666666" )
   Sleep(1500)
   oShell:sendkeys("{tab}{tab}")
   oShell:SendKeys("~")
   Sleep(5000)
   oShell:sendkeys("Mensaje de prueba")
   oShell:SendKeys("~")

Return nil
*/


// ó:

#Include "FiveWin.ch"

FUNCTION EXEMPLO_API_WHATS()

   LOCAL oWhats := TWhatsappAPI_WTS():New()

   oWhats:Situacao()
   oWhats:NivelBateria()
   oWhats:NrConectado()
   oWhats:EnviarMsg( '5567992354872', 'Teste *mensagem*' )
   oWhats:EnviarMsg( '5567992354872', NIL, 'd:\documento.pdf' ) ; Inkey( 2 ) // PAUSAR UNS 2 SEGUNDOS ENTRE UMA MENSAGEM E OUTRA
   oWhats:EnviarMsg( '5567992354872', NIL, 'd:\imagem.png' ) ; Inkey( 2 )
   oWhats:End()

   Quit()

RETURN NIL

// *******************************************************************************
#define httpGet 1
#define httpPost 2

// *******************************************************************************
CLASS TWhatsappAPI_WTS

   DATA sToken INIT 'O TOKEN Q VC ADQUIRIR OU PEDE PRO HENDELL PRA TESTES'
   DATA sEndPoint INIT 'URL DO ENDPOINT Q ELE FORNECE PRA TESTES QDO VC TIVER O SEU SERA O SEU URL, VC NAO USA ESTRUTURA DELE E SIM A SUA'

   DATA sRet INIT ''
   DATA hHash INIT hb_Hash()
   DATA nMetodo INIT 0 // 1 GET 2 POST

   METHOD ComunicaAPI()
   METHOD Situacao()
   METHOD Obter_QRCode()
   METHOD NrConectado()
   METHOD NivelBateria()
   METHOD EnviarMsg()
   METHOD MostraRetorno() INLINE PTAlert( 'Codigo..:;' + PadC( hb_CStr( ::hHash[ 'codigo' ], 70 ) ) + ';' + ;
      'Mensagem:;' + PadC( Upper( AllTrim( hb_UTF8ToStr( hb_CStr( ::hHash[ 'mensagem' ] ) ) ) ), 70 ) + ';' + ;
      'Retorno.:;' + PadC( hb_CStr( ::hHash[ 'retorno' ], 70 ) ), aOk, vcroxo )

// METHOD WhatsAPI_SetarWebhook() // PRA LER O RETORNO DAS MENSAGENS, ESSA PARTE NAO FIZ AINDA.

   METHOD End() INLINE Self := Nil

ENDCLASS

// ******************************************************************************
METHOD Situacao() CLASS TWhatsappAPI_WTS

   Mensag( "Consultando situacao da API..." )
   ::ComunicaAPI( "/whatsapp/situacao", httpGet )

   IF 'false' $ ::hHash[ 'retorno' ]
      MsgInfo( "Nao conectado. Obtenha QRCode", 'Atenção' )
   ELSE
      MsgInfo( "Whatsapp ja esta conectado.", 'Atenção' )
   ENDIF

   RETURN

// ******************************************************************************
METHOD NivelBateria() CLASS TWhatsappAPI_WTS

   Mensag( "Consultando nivel bateria" )
   ::ComunicaAPI( "/whatsapp/bateria", httpGet )
   ::MostraRetorno()
// ******************************************************************************

METHOD NrConectado() CLASS TWhatsappAPI_WTS

   Mensag( "Consultando Nr Conectado API..." )
   ::ComunicaAPI( "/whatsapp/meunumero", httpGet )
   ::MostraRetorno()

   RETURN
// *******************************************************************************
METHOD EnviarMsg( sContato, sMsg, sFilename ) CLASS TWhatsappAPI_WTS

   LOCAL sURL

   DEFAULT sMsg TO ''
   DEFAULT sFilename TO ''

   IF Empty( sFilename ) .AND. Empty( sMsg )
      Alert( 'falta parametro' )
      RETURN
   ENDIF

   IF Empty( sFilename )
      Mensag( "Enviando mensagem de texto..." )
      sURL := "/whatsapp/msg"
   ELSE
      Mensag( "Enviando arquivo..." )
      sURL := "/whatsapp/arquivo"
   ENDIF

   ::ComunicaAPI( sURL, httpPost, sContato, sMsg, sFilename )
   ::MostraRetorno()
// *******************************************************************************

PROCEDURE Obter_QRCode() CLASS TWhatsappAPI_WTS

   Mensag( "Obtendo QRCode..." )
   ::ComunicaAPIWhats( '/whatsapp/qrcode', httpGet )

// ATEN€ÇO O RETORNO AKI  RETORNADO O QRCODE EM Q VC TEM Q CARREGAR UM OBJETO GRAFICO ATRAVES DE UMA LIB GRAFICA FIVEWIN, -, MINIGUI, HWGUI ETC
// If 'obtido com sucesso' $ ::hHash['mensagem']
// AKI CARREGA O OBJETO GRAFICO NA LIB Q VC USAR ::hHash['retorno'], { 20,20,-20,-20 }, "QR-CODE"
// Else
// MsgInfo( "O Whatsapp esta reiniciando. Favor repetir a operação.", 'Atenção' )
// EndIf

RETURN
// ------------------------------------------------------------------------------*

METHOD ComunicaAPI( sURL, nMetodo, sContato, sMsg, sFilename ) CLASS TWhatsappAPI_WTS

   LOCAL cMetodo, oWeb, sContent := ''

   TRY
      oWeb := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' )
   CATCH
   oWeb := CreateObject( 'MSXML2.XMLHTTP' )
   END

   IF Empty( sContato ) .AND. nMetodo = httpPost
      Alert( "Falta telefone" )
      RETURN NIL
   ENDIF

   sURL := ::sEndPoint + sURL
   cMetodo := iif( nMetodo == httpGet, 'GET', 'POST' )
   oWeb:Open( cMetodo, sUrl, .F. ) // True = pra vir o ResponseBody
   oWeb:SetRequestHeader( 'token', ::sToken )

   IF nMetodo = httpPost
      oWeb:setRequestHeader( "contato", sContato )
      IF ! Empty( sFilename )
         oWeb:setRequestHeader( "filename", SubStr( AllTrim( CharRem( "[<(-)>]*&@:", sFileName ) ), 2 ) )
         oWeb:setRequestHeader( "caption", SubStr( AllTrim( CharRem( "[<(-)>]*&@:", sFileName ) ), 2 ) )

         sContent = hb_MemoRead( sFileName )
         sContent = hb_base64Encode( sContent )
         sContent = hb_StrToUTF8( sContent )
         sContent = AllTrim( CharRem( CRLF, sContent ) )
      ELSE

         IF .NOT. EMPTY(sMsg)
            sContent = sMsg
         ENDIF
      END
      oWeb:setRequestHeader( "Content-Type", "text/plain; charset=UTF-8" )
   END

   TRY
      IF EMPTY(sContent)
         oWeb:Send( )
      ELSE
         oWeb:Send( sContent )
      ENDIF

      ::sRet := oWeb:ResponseBody()
      hb_jsondecode( ::sRet, @::hHash )

   CATCH ; END

RETURN NIL
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Envió de teclas/pulsaciones a una aplicación externa.

Postby FiveWiDi » Thu Jun 01, 2023 7:05 am

Hola João,

Ya estaba probando con WScript.Shell, veremos hasta donde llego.

De momento voy avanzando, creo que me servirá.

Para enviar pocos whatsapp seguramente servirá, para muchos (*).. veremos como se los come y como reacciona la pantalla web; deberé jugar con Sleep() en la rutina de envío para dejar tiempo a que reaccione la página web.

(*) Debo enviar primero un whatsapp 'individual/personalizado' solicitando que den de alta mi contacto en su agenda; si mi contacto no está dado de alta en la agenda del destinatario, no se le envían mensajes de Lista de Distribución de whatsapp. De ahí la necesidad.

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1189
Joined: Mon Oct 10, 2005 2:38 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 76 guests