Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Use SWbemServices.ExecQuery para solicitar todos os eventos existentes.
O exemplo de código a seguir mostra como consultar os eventos em um log.
Select * from Win32_NTLogEvent
Para obter mais informações, consulte Determinando o tipo de evento a receber, Recebendo notificações de eventose WQL (SQL para WMI).
A chamada padrão para SWbemServices.ExecNotificationQuery usa comunicação semissíncrona. O iflags parâmetro tem os wbemFlagForwardOnly e wbemFlagReturnImmediately marcadores definidos por padrão. Para obter mais informações, consulte chamando um método.
O procedimento a seguir descreve como receber notificação de evento semissíncrona usando VBScript.
Para receber notificação de evento semissíncrono no VBScript
Crie uma consulta para o tipo de evento que você deseja receber. Para obter mais informações, consulte Determinar o tipo de evento a receber.
Se você solicitar um tipo de evento de instância, como __InstanceCreationEvent, indique na consulta um tipo de instância de destino, por exemplo, Win32_LogicalDisk.
Se necessário, especifique uma instância, por exemplo, o nome de um namespace ao solicitar instâncias de __NamespaceModificationEvent futuras para um namespace específico.
Especifique um intervalo de sondagem para o WMI (Instrumentação de Gerenciamento do Windows) em uma consulta, como "DENTRO de 10" — para sondar a cada 10 segundos. Para obter mais informações, consulte WITHIN Cláusula.
Chame SWbemServices.ExecNotificationQuery usando a consulta.
Percorra a coleção que você recebe.
O exemplo a seguir mostra como monitorar a inserção e remoção de discos de uma unidade de disquete em uma máquina local. O script solicita ___InstanceModificationEvent instâncias para a unidade de disquete instância Win32_LogicalDisk e verifica a cada 10 segundos a existência de novas instâncias. Este script é um exemplo de um consumidor de eventos temporário e continua em execução até ser interrompido no Gestor de Tarefas ou o sistema ser reiniciado. Para obter mais informações, consulte Receção de eventos durante a duração da sua aplicação.
Const FLOPPY_DISK = 2
Set colMonitoredDisks = GetObject("Winmgmts:").ExecNotificationQuery _
("Select * from __InstanceModificationEvent within 10 WHERE " _
& "TargetInstance ISA 'Win32_LogicalDisk'")
i = 0
Do While i = 0
Set strDiskChange = colMonitoredDisks.NextEvent
If strDiskChange.TargetInstance.DriveType = FLOPPY_DISK Then
If strDiskChange.TargetInstance.Size > 0 Then
Wscript.Echo "A disk has been inserted" & _
" into the floppy drive."
Else
Wscript.Echo "A disk has been removed" & _
" from the floppy drive."
End If
End If
Loop
O procedimento a seguir descreve como receber notificação de evento semissíncrona usando C++.
Para receber notificação de evento semissíncrono em C++
Configure a aplicação com chamadas para as funções de CoInitializeEx e CoInitializeSecurity.
Como o WMI é baseado em COM, chamar CoInitializeEx e CoInitializeSecurity é uma etapa necessária para um aplicativo WMI. Para obter mais informações, consulte Criando um aplicativo WMI ou um script.
Determine o tipo de eventos que você deseja receber.
O WMI suporta eventos intrínsecos e extrínsecos. Um evento intrínseco é um evento predefinido pelo WMI. Um evento extrínseco é um evento definido por um provedor de terceiros. Para obter mais informações, consulte Determinando o tipo de evento a ser recebido.
Registe-se para receber uma classe específica de eventos com uma chamada para o método IWbemServices::ExecNotificationQuery.
Torne cada consulta muito específica. O objetivo do registo é registar-se para receber apenas as notificações necessárias. As notificações que não são necessárias desperdiçam o processamento e o tempo de entrega.
Você pode projetar um consumidor de eventos para receber vários eventos. Por exemplo, um consumidor pode exigir notificação de eventos de modificação de instância para uma classe específica de dispositivo e eventos de violação de segurança. Nesse caso, as tarefas que um consumidor executa ao receber um evento de modificação de instância são diferentes para os dois eventos. Assim, o consumidor deve fazer uma chamada para IWbemServices::ExecNotificationQuery para registrar, por exemplo, eventos de modificação, e outra chamada para ExecNotificationQuery para se registrar para eventos de violação de segurança.
Na chamada para ExecNotificationQuery, defina o parâmetro lFlags como WBEM_FLAG_RETURN_IMMEDIATELY e WBEM_FLAG_FORWARD_ONLY. O sinalizador WBEM_FLAG_RETURN_IMMEDIATELY solicita processamento semissíncrono, e o sinalizador WBEM_FLAG_FORWARD_ONLY solicita um enumerador apenas direto. Para obter mais informações, consulte chamando um método. A função ExecNotificationQuery retorna um ponteiro para uma interface IEnumWbemClassObject.
Verifique notificações de eventos registados fazendo chamadas repetidas para o IEnumWbemClassObject::Next método .
Quando terminar, liberte o enumerador que aponta para o objeto IEnumWbemClassObject.
Você pode liberar o ponteiro IWbemServices associado ao registro. Liberar o ponteiro IWbemServices faz com que o WMI pare de entregar eventos a todos os consumidores temporários associados.