MS Access | Utilizando SendKeys de Forma Eficiente

MS Access | Utilizando SendKeys de Forma Eficiente


A função SendKeys no VBA é uma ferramenta poderosa para automatizar a interação com janelas e aplicativos no Windows. No entanto, a evolução do sistema operacional trouxe desafios, especialmente com o lançamento do Windows Vista e suas versões posteriores. Neste contexto, adaptar funções VBA para garantir a compatibilidade com sistemas mais recentes é uma prática essencial para desenvolvedores.


 Aprenda: 17 Passos Essenciais para Melhorar seu Código VBA 


O código acima exemplifica uma solução robusta para enviar sequências de teclas em versões diferentes do Windows. A função SendKeys foi ajustada para reconhecer automaticamente se o sistema operacional é anterior ou posterior ao Windows Vista. Isso é feito através da função OsVersion, que utiliza uma chamada à API do Windows para obter informações detalhadas sobre o sistema. A partir dessa informação, a função decide qual método de envio de teclas usar — o SendKeys nativo do VBA para sistemas mais antigos, ou a WScript.Shell para sistemas modernos.


' Declaração das funções API para obter a versão do sistema operacional e o nome do módulo

Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long


' Estrutura para armazenar informações sobre a versão do sistema operacional

Private Type OSVERSIONINFO

    dwOSVersionInfoSize As Long

    dwMajorVersion As Long

    dwMinorVersion As Long

    dwBuildNumber As Long

    dwPlatformId As Long

    szCSDVersion As String * 128 ' String para armazenar a descrição do pacote de serviços

End Type


' Função para obter a versão do sistema operacional (Windows)

Function OsVersion() As Single

    Dim os As OSVERSIONINFO

    Dim retval As Long

    os.dwOSVersionInfoSize = Len(os) ' Define o tamanho da estrutura de dados

    retval = GetVersionEx(os) ' Chama a função API para obter a versão do Windows

    OsVersion = Val(os.dwMajorVersion & "." & os.dwMinorVersion) ' Retorna a versão principal e secundária do sistema operacional

End Function


' Função para enviar teclas (equivalente ao SendKeys) com suporte para Windows Vista ou superior

Public Function Sendkeys(sSend As String, Optional bWait As Boolean = False)

    Static bInit As Boolean, bVistaOrGreater As Boolean, wShell As Object


    ' Inicializa variáveis estáticas na primeira execução da função

    If Not bInit Then

        bVistaOrGreater = (OsVersion() >= 6) ' Verifica se o SO é Windows Vista ou superior

        If bVistaOrGreater Then Set wShell = CreateObject("WScript.Shell") ' Cria objeto WScript.Shell se for Vista ou superior

        bInit = True ' Marca a inicialização como completa

    End If


    ' Se não for Vista ou superior, usa VBA.SendKeys; caso contrário, usa wShell.SendKeys

    If Not bVistaOrGreater Then

        VBA.Sendkeys sSend, bWait ' Usa o método SendKeys do VBA para SOs mais antigos

    Else

        wShell.SendKeys sSend, bWait ' Usa o método SendKeys da WScript.Shell para Windows Vista ou superior

    End If

End Function


Essa distinção é importante porque o Windows Vista introduziu mudanças na segurança e no gerenciamento de aplicativos que podem interferir no comportamento do SendKeys. A abordagem aqui proposta garante que a função funcione corretamente em qualquer ambiente Windows sem a necessidade de modificações adicionais no código.


Além disso, a implementação de variáveis estáticas dentro da função SendKeys otimiza a performance, inicializando objetos e verificações apenas uma vez por execução. Isso reduz a sobrecarga, tornando o código mais eficiente, especialmente quando é executado repetidamente em um processo automatizado.


 Que tal aprender estes códigos também: 

MS Access | Aplicando Função Concatenação de Valores nos Campos das Consultas
MS Access | Utilizando SendKeys de Forma Eficiente
MS Access | Automatizando a Compactação do Bancos de Dados
MS Access | Como Gerenciar Links das Tabelas
MS Access | Quebra de Texto em Linhas com Comprimento Máximo
MS Access | Monitoramento de Conexões de Usuários
MS Access | Mapeando 3.500 Erros com a Criação de Tabelas de Erros
MS Access | Código para Registro de Logs
MS Access | 17 Passos Essenciais para Melhorar seu Código VBA
MS Access | Código VBA para Backup de Todas as Tabelas Comentado


Esse tipo de implementação é extremamente útil em cenários de automação de tarefas repetitivas, como o controle de aplicativos legados que não possuem API direta ou automação de fluxos complexos envolvendo várias interfaces. A possibilidade de enviar sequências de teclas dinamicamente pode ser empregada para preencher formulários, navegar em menus ou executar comandos em software de terceiros, sem a necessidade de interação manual.


Portanto, adaptar funções VBA clássicas, como o SendKeys, para suportar diferentes versões do Windows, permite que os desenvolvedores criem soluções robustas e compatíveis com ambientes diversos. Isso não só amplia a vida útil dos projetos, mas também garante que a automação funcione perfeitamente em versões futuras do sistema operacional.


  Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série Donut Project 
DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 Clique nas capas abaixo e compre também: 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)


Série Top 10 Funções: Top 10 Funções VBA para o Microsoft Excel (Série Top 10 Funções - Microsoft Excel)


eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias