Amiguinhos,
Veja estes trechos e monte um teste.
Fiz o teste com este conjunto com Windows 10 e WhatsApp desktop instalado. A instalação do WhatsApp Desktop é feita diretamente da loja de aplicativos do Windows.
O curso do código irá capturar o handle do aplicativo WhatsApp, minimizá-lo, maximizálo, dar comandos sendkeys simulando ações do usuário, capturar uma imagem e colada numa mensagem para um de seus contatos.
Modifique as informações de destino no arquivo
mensagem.whats.
Arquivo messagem.whats
Código: Selecionar todos
DEQUEM;PARAQUEM;NOME;IMAGEM;MENSAGEM
+5514997797477;+55 14 99779-7477;Rochinha;C:\TEMP\GFDG.BMP;ESTA E UMA MENSAGEM DE TESTE ENTRE EU E EU MESMO
+5514997797477;10Comtracao;Ze das Couves;C:\TEMP\HDS.BMP;ESTA E UMA MENSAGEM DE TESTE ENTRE EU E EU MESMO
Função exemplo de chamada:
Código: Selecionar todos
// Captura lista whatsapp basica
IF file( "mensagem.whats" )
cWHATSTeste := MemoRead( "mensagem.whats" )
nLines := MlCount(cWHATSTeste,250)
detnItem := 1
vMPTotal := 0
FOR nFor := 2 TO nLines // Linha 1 tem o cabecalho
blinha := MemoLine(cWHATSTeste, 250, nFor)
ablinha := StringToArray( blinha, ";" )
if !empty( blinha ) .and. len( ablinha )=5
if !type( blinha )=="U"
Whatsapp( ablinha[1], ablinha[2], ablinha[3], ablinha[4], ablinha[5] )
endif
endif
detnItem := detnItem + 1
NEXT // enddo
fErase( cWHATSTeste )
ENDIF
Função principal:
Código: Selecionar todos
Function Whatsapp( cDe, cPara, cQuem, cBmp, cMsg )
Local clink
Local oClp
Local cBmpFile := "WHATSAPP"
Local cRetVal := "C:\TEMP\" + cBmpFile + ".BMP"
// ?procline(),, cDe, cPara, cQuem, cBmp, cMsg
OPENCLIPBOARD := .t.
EMPTYCLIPBOARD := .t.
CLOSECLIPBOARD := .t.
// DEFINE CLIPBOARD oClip OF oApp //
oClip := TClipBoard():New( 2, oApp )
oShell := TOleAuto():New( "WScript.Shell" )
nWhatSleep := 2
cDe := CharRem( "*()/-.%#+[]:, ", cDe )
cPara := CharRem( "*()/-.%#[]:, ", cPara )
cCumprimento := " "+Greetings() + iif(!empty(cQuem),", "+alltrim(cQuem), "" )
// Captura a tela e salva em arquivo
if !empty(cBmp)
// Captura a tela e salva no clipboard
oClip:Clear()
oClip:Open()
oClip:Empty()
oClip:SetData( FILoadImg( cBmp ) )
oClip:End()
endif
// Verifica se Whatsapp esta ativo
lWhatsPresent := .F.
hWndWhats := FindWindow(0,"WhatsApp") // FindWindow(,"WhatsChrome" ) // WhatsApp - Google Chrome")
if IsNil( hWndWhats )
lWhatsPresent := .F.
else
if hWndWhats == 0
lWhatsPresent := .F.
else
lWhatsPresent := .T.
BringWindowToTop( hWndWhats )
SysWait(2)
SendMessage( hWndWhats, WM_SETFOCUS, 0, 0 )
SysWait(2)
endif
endif
SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MINIMIZE, 0 )
// Prepara envio da mensagem
if empty( cMsg )
cMsg := "Um Teste de Envio de Mensagem de Texto pelo whatsapp. "+CRLF+"Neste caso é necessário abrir o browser, "+CRLF+"entrar no site web.whatsapp.com, "+CRLF+"ler o QR-Code com celular de envio e acionar a rotina pelo sistema."+CRLF+CRLF+"Ignore momentaneamente estas mensagem pois estou testando o procedimento."
endif
cMsg := strTran( cMsg, CRLF, "+{ENTER}" )
SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MAXIMIZE, 0 )
if !lWhatsPresent; syswait(2); oShell:run( "https://api.whatsapp.com/send?phone=" + cPara ); endif
//
nWhatSleep := 0.5
//
syswait(nWhatSleep); oShell:sendkeys("^(f)")
syswait(nWhatSleep); oShell:sendkeys( cPara )
syswait(nWhatSleep); oShell:sendkeys("{DOWN}")
syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
syswait(nWhatSleep); oShell:sendkeys( cCumprimento )
syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
//
syswait(nWhatSleep); oShell:sendkeys("^(v)")
syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
//
SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MINIMIZE, 0 )
Return nil
Function StringToArray( cString, cSeparator )
LOCAL nPos
LOCAL aString := {}
DEFAULT cSeparator := ";"
cString := ALLTRIM( cString ) + cSeparator
DO WHILE .T.
nPos := AT( cSeparator, cString )
IF nPos = 0
EXIT
ENDIF
AADD( aString, SUBSTR( cString, 1, nPos-1 ) )
cString := SUBSTR( cString, nPos+1 )
ENDDO
return ( aString )
Function Greetings()
Local cString := "", nHour, cOldTime
nHour := Val( Left( Time(), 2 ) )
Do Case
Case nHour < 12
cString := "Bom dia"
Case nHour < 18
cString := "Boa tarde"
OtherWise
cString := "Boa noite"
End Case
Return cString