Ir ao conteúdo
  • Cadastre-se

VBA problema código controlar mouse


Posts recomendados

  Boa tarde senhores,

 

estou fazendo um código para automatizar o movimento e os cliques do mouse para preencher alguns fórmulários WEB de maneira automática. Consegue fazer o código, porém estou com um problema. Desenvolvi o código no PC do trabalho e quando cheguei em casa os cliques não estava mais "acertando" onde eu queria. 

 

Achei que pudesse ser por conta da resolução dos monitores ser diferente, mas verifiquei agora que são iguais.

 

Alguem sabe como poderia contornar esse problema?

 

o código está assim:

 

 

 

 

 

Option Explicit
 
Declare PtrSafe Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
 
Global Const SW_MAXIMIZE = 3
'Global Const SW_SHOWNORMAL = 1
'Global Const SW_SHOWMINIMIZED = 2
 
Sub About_Click()
    
    On Error Resume Next
    
    ' Cria um novo objecto e lança a página
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate "endereço_da_intranet"
    apiShowWindow IE.hwnd, SW_MAXIMIZE
    IE.Visible = True
    
    While IE.Busy
    Wend
    
    Application.Wait (Now + TimeValue("0:00:05"))
    
    Call SingleClicks
    
    Application.Wait (Now + TimeValue("0:00:03"))
 
    Call SingleClicks2
 
    Application.Wait (Now + TimeValue("0:00:04"))
 
    Call SingleClicks3
 
    Application.Wait (Now + TimeValue("0:00:02"))
 
    Call SingleClicks4
 
    Application.Wait (Now + TimeValue("0:00:03"))
 
    Call SingleClicks5
 
    Application.Wait (Now + TimeValue("0:00:03"))
 
 
 
 
    Dim ieHwnd As Long
    ieHwnd = FindWindowPartial("endereço_da_janela_do_windows_explorer_aberta_por_um_dos_cliques_do_mouse")
    
    
'    Maximiza a janela
    ShowWindow ieHwnd, SW_MAXIMIZE
 
    Call SingleClicks6
    
    Application.Wait (Now + TimeValue("0:00:03"))
 
    Call SingleClicks7
    
    Application.Wait (Now + TimeValue("0:00:04"))
 
    Call SingleClicks8
    
    Application.Wait (Now + TimeValue("0:00:03"))
 
    Call SingleClicks6
    
 
End Sub
 
Private Sub SingleClicks()
    SetCursorPos 670, 302 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    
    Application.Wait (Now + TimeValue("0:00:01"))
        
    SetCursorPos 600, 322 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub SingleClicks2()
    SetCursorPos 320, 567 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub SingleClicks3()
    SetCursorPos 223, 567 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub SingleClicks4()
    SetCursorPos 380, 110 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub SingleClicks5()
    SetCursorPos 1065, 190 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub SingleClicks6()
    SetCursorPos 1429, 7 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub SingleClicks7()
    SetCursorPos 1350, 100 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub SingleClicks8()
    SetCursorPos 1310, 370 'x and y position
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
 
 
 
 
Outro problema nele é que tenho que ficar pondo esses "Application.wait". Será que tem uma maneira melhor de dizer para ele esperar a pagina ficar ativa? Tentei com o:
 
 
While IE.Busy
 Wend
 
mas não funcionou direito.
 
Grato,

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

  Pelo que verifiquei o problema estava na exibição ligeiramente diferente das janelas do "Internet Explorer" devido a diferenças na versão e na configuração do "Internet Explorer" instalado na máquina do meu trabalho e da minha casa. Acredito que igualando essas diferenças o problema se resolve.

 

  No futuro pretendo criar um código que leve em conta a resolução da tela do monitor para adaptar as coordenadas do clique do mouse para cada resolução.

 

  A única coisa que eu ainda queria uma ajuda era para tentar achar um comando ou função desempenhasse o papel do "Application.Wait" de forma mais eficiente, no seguinte sentido: ao invés de dizermos ao programa para esperar um determinado tempo antes de dar o próximo clique do mouse queria um comando ou função que aguardasse quanto a aplicação está ocupada. Tentei o Application.busy, mas ele não funcinou aqui.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...