bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Capturando informações do Windows e do hardware

... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,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

Antes de iniciar sua leitura, clique aqui e cadastre-se para receber comunicados sobre novos artigos.

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!


 

 


14 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?

aneves   02/06/2018 06:51:44

Caro Avelino Sampaio,

De todos os úteis conteúdos/exemplos colocados ao nosso dispor, considero este último - News 2 - como o mais valioso dos que tenho recebido.

Bem-haja e desejos de continuado sucesso.


Envie seu comentário: