... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$145,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Capturando informações do Windows e do Hardware

Função Environ()

A função Environ(argumento) captura informações sobre o ambiente Windows, tais como: o nome do usuário, o nome do domínio e pastas relevantes.

A lista dos argumentos existentes é obtida do seguinte código:

Dim i As Long
Dim k
i = 1
Do Until Environ(i) = ""
    k = Split(Environ(i), "=")
    'Preenchendo a listBox
    Me!Lista.AddItem k(0) & ";" & k(1)
    i = i + 1
Loop

Veja na imagem, a lista gerada pelo código acima.

Usando Access - Lista comandos environ()

 

A lista completa está disponível no arquivo exemplo do artigo:

Exemplos de uso

Vamos supor que você queira acessar uma imagem armazenada na pasta TEMP do usuário.  Para isso,  bastará montar a linha da seguinte forma:

strPathImagem = environ("temp") & "\NomeImagem.gif"

E no caso de querer exibir na barra superior de um formulário, o nome do Computador e o nome do Usuário do Windows, bastará proceder desta forma:

strCaption = "Computador: " & environ("Computername")
strCaption = strCaption & " *** Usuário: " & environ("UserName")

Me.caption = strCaption     

Usando o WMI

Com a programação WMI é possível acessar, configurar, gerenciar e monitorar a maioria dos recursos do Windows. 

Com VBA e WMI são obtidos resultados que não são possíveis com as API's do Windows.  

Nota: O WMI é muito poderoso e por isso você precisa ter bastante atenção para não danificar as configurações do Windows.

Aqui estão algumas das coisas que podemos fazer em computadores locais ou remotos, usando o VBA com o WMI :

• Gerenciar usuários e políticas de grupo;

• Ler e salvar os Log's de eventos para arquivos;

• Obter o tamanho de memória livre em um disco rígido;

• Obter a versão do Microsoft Office;

• Obter os atributos de impressoras;

• Obter a versão do sistema operacional Service Pack; 

• Obter o nome do sistema operacional;

• Obter o número de versão do sistema operacional;

• Obter o número de compilação do sistema operacional;

• Obter número de série do Windows;

• Obter trabalhos agendados;

• Contar e listar processos de execução;

• Encerrar processos;

• Excluir, Instalar e Atualizar softwares;

• Listar todos os softwares instalados.

O WMI possui classes, propriedades, métodos e seu próprio dialeto de consulta de VBScript chamado WQL.  O WMI usa o CIM (Common Information Model) para acessar informações e realizar ações.  O CIM concede-nos acesso a quase tudo sobre um PC. Você pode aprender mais sobre CIM clicando aqui.

A seguir está um exemplo de código VBA usando o WMI.  Este código obtém o endereço IP da máquina local.

Public Function fncIP() As String
Dim objWMIService As Object
Dim strComputer As String
Dim strSql As String
Dim IPConfigSet
Dim IPConfig
Dim i
 
strComputer = "." 'Acesso a máquina local
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
                    strComputer & "\root\cimv2")

strSql = "Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE"
Set IPConfigSet = objWMIService.ExecQuery(strSql)
 
For Each IPConfig In IPConfigSet
 If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
       If InStr(IPConfig.IPAddress(i), "::") = 0 Then 
         fncIP = "IP de" & Environ("computername") & ": " & IPConfig.IPAddress(i)
       end if
    Next
 End If
Next
Set objWMIService = Nothing
End Function

Observe que depois de declarar algumas variáveis, criamos uma instância de um objeto WMI, usando GetObject("winmgmts:").

strComputer = "." 'Acesso a máquina local
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
                    strComputer & "\root\cimv2")

Nós usamos winmgmts para acessar a raiz ("\root\cimv2″) da biblioteca CIM.

A variável strComputer com o valor "." , informa que estamos acessando o computador local.  O acesso a computadores remotos não está incluído neste meu artigo.

Em seguida podemos instanciar, através de uma consulta, uma coleção de propriedades da classe Win32_NetworkAdapterConfiguration. Veja:

strSql = "Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE"
Set IPConfigSet = objWMIService.ExecQuery(strSql)

Você pode aprender mais sobre WQL, a linguagem de consulta WMI, Aqui.

E finalmente varremos a classe instanciada (Win32_NetworkAdapterConfiguration), para obtermos o número do IP da placa de Rede.

For Each IPConfig In IPConfigSet
 If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
       If InStr(IPConfig.IPAddress(i), "::") = 0 Then 
         fncIP = "IP de" & Environ("computername") & ": " & IPConfig.IPAddress(i)
       end if
    Next
 End If
Next

Fornecendo algumas funções úteis

Forneço algumas funções úteis usando o WMI, para você estudar e se familiarizar com a escrita.

Veja nesta imagem, o formulário frmQuadroWMI, com as funções oferecidas:

Usando Access - Lista WMI

 

Baixe o arquivo exemplo

Bom estudo!


 

 


13 comentário(s)

Guilherme B. Pereira   06/04/2013 13:25:06

Mestre carioca Avelino!

FANTÁSTICO!!!!!!!!!!!!!!!!!!!

Sem palavras para definir o tão útil, é o exemplo em questão, dentre outras dezenas de igual capricho que você disponibiliza para a comunidade.

Meu forte e cordial abraço,
Gillherme

Márcio Melo -RJ   06/04/2013 13:50:03

Nossa, verifiquei o seu exemplo, tem muito mais informações, traz tudo detalhado. Nunca que imaginei que o VBA dava para fazer tudo isso, até me animo em voltar a tentar ir mais afundo nessa parte que vem de fora do ambiente. Você saberia me dizer se podemos também manipular as funções das OCX por exemplo a MSCOMM32.OCX que tem a finalidade de comunicar pela porta COM, já consegui fazer alguns testes em PC que tinha o C++ studio instalado, quando levei a outros PC´s mesmo registrando a OCX não funcionava, como que tivesse que registrar direitos o detalhe que o C++ do meu trabalho é legalizado, mais faltou algum procedimento para essa OCX saber disso.

Gostei muito dessa postagem! me faz sonhar além das minhas expectativas...

Sou mais Brasil!


Eduardo Rubio   06/04/2013 15:03:54

muito bom mesmo...
sempre muito util...
obrigado

Valdino   06/04/2013 16:08:34

Bem elaborado. Vale lembrar que as opções disponibilizadas na lista do Environ pode mudar entre as versões do SO e do Office, bem como entre um programa e outro da mesma versão do Office. A dias atrás elaborei um aplicativo para comparação entre as versões do Office nas diferentes versões do Windows e entre os aplicativos de mesma versão do Office. A lista pode variar entre 25 a 37 itens. Nesse aplicativo tambem utilizo WMI para retornar dados referentes aos SOs utilizados na pesquisa.

Marcelo David   07/04/2013 00:56:13

Simplemente fantástico! Parabéns amigão!

Marcelo-PR   08/04/2013 09:30:59

Só não consegui a "lista" - como faço? Mas pelo que vi é um código matador para o que se propõe.

Leozito Pedroso de Almeida   08/04/2013 20:06:12

muito bom excelente....

Avelino Sampaio   09/04/2013 10:40:26

Obrigado pela participação de todos!

Marcelo-Pr,

o que acontece ao abri o formulário frmQuadroWMI ?

No aguardo

LEANDRA - RJ   21/08/2014 15:41:04

Ha muito tempo procurava uma função que retornasse o IP dentro do Access. Sua solução é 10!!

LEANDRA - RJ   21/08/2014 15:49:09

Parabéns pela organização e disponibilização de códigos tão úteis!

Gustavo   25/10/2014 12:31:30

Parabéns pelo artigo Avelino, me ajudou na função de backup do seu exemplo do Maestro, ele não estava reconhecendo o WinRar instalado no meu PC 64 bits e com o WinRar também 64 bits, a função original ele não reconhecia que ele estava instalado na pasta Program Files, somente reconhecia que tinha que estar na pasta Program Files (x86), utilizei a seguinte função:

ElseIf Len(Dir(Environ("ProgramW6432") & "\WinRar\WinRAR.EXE") & "") > 0 Then
strLocalWinRar = Environ("ProgramW6432")

E ele reconheceu o WinRar corretamente. Obrigado e parabéns mais uma vez pelo seu trabalho.

Humberto Galvani   04/01/2016 15:47:21

Gostaria de saber se existe alguma forma de maiplular as variaveis de Ambiente por exemplo a Username atraves de comandos de VBA?

Juan Pablo   31/01/2017 10:46:59

Mestre Avelino,

Por meio da função Environ é possível fazer o login no access usando os mesmos dados do login da rede windows?


Envie seu comentário: