ATENÇÃO NOVOS USUÁRIOS

Se registrou recentemente? Seu cadastro será avaliado e mendiante aprovação, a conta será ativada e você poderá usufruir do fórum. O tempo de avaliação gira em torno de 24 a 48 horas.

Esqueceu sua senha?

Você pode usar o mecanismo de lembrete neste link: Recuperar senha

Você receberá um link de reativação no email cadastrado.

Não recebeu o email? Lembre-se checar o Lixo Eletrônico.

Manipulação de Janelas do Windows com VBA

Dicas dos mais variados tipos, necessidades, angústias, enfim
Raygsson
Manda bem
Manda bem
Mensagens: 105
Registrado em: Sex Jan 31, 2020 8:06 pm

Manipulação de Janelas do Windows com VBA

Mensagem por Raygsson »

Venho compartilhar com vocês um conhecimento precioso.
No código abaixo estou usando algumas APIs do Windows para manipular as janelas/avisos abertos.
Sabe aquela tela de confirmação perguntando Sim ou Não que você precisa clicar com VBA? ou ainda OK/Salvar/Cancelar/etc, o que precisar de click ou apenas fechar.
Só quem já fez alguma automação e travou nessas telas sabe como é importante saber mexer com isso 🤣

Código: Selecionar todos

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function FindWindowExW Lib "user32" (ByVal hWndParent As LongPtr, Optional ByVal hwndChildAfter As LongPtr, Optional ByVal lpszClass As LongPtr, Optional ByVal lpszWindow As LongPtr) As LongPtr

Public Function IdBotão(JanelaMãe, Texto)
Dim TextoAPI As String * 255
ElementoFilho = FindWindowExW(JanelaMãe)
Do While ElementoFilho <> 0
    TextoElemento = Left$(TextoAPI, GetWindowText(ElementoFilho, ByVal TextoAPI, 255))
    If TextoElemento Like "*" & Texto & "*" Then
       IdBotão = ElementoFilho
       Exit Function
    End If
  ElementoFilho = FindWindowExW(JanelaMãe, ElementoFilho)
Loop
End Function

Sub ManipulandoJanelas()

'COMANDOS BÁSICOS
CLICAR = "&HF5"
FECHAR = "&H10"

'LOCALIZA A JANELA PELO TITULO
Janela = FindWindow(vbNullString, "Excluir Arquivo")

'PODERIA FECHAR A JANELA COM ESSE COMANDO:
'SendMessage Janela, FECHAR, 0&, 0&

'LOCALIZA BOTÃO PELO TEXTO
Botão = IdBotão(Janela, "Sim")

'ENVIA O COMANDO P/ O BOTÃO
SendMessage Botão, CLICAR, 0&, 0&

End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
webmaster
Administrador
Mensagens: 2909
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Manipulação de Janelas do Windows com VBA

Mensagem por webmaster »

Nice!

Cria um gist disso para compartilhar com a comunidade.


Tomás
https://www.tomasvasquez.com.br/blog
https://www.tomasvasquez.com.br/cursocsharp
https://twitter.com/tomamais
Se sua dúvida foi solucionada, acrescente [RESOLVIDO] ao título.
Responder