Mais uma obra do nosso fórum. Numa discussão pra lá de produtiva, os usuários TARSA e Basole postaram dois blocos de código que permite pelo VBA obter o status da impressora padrão do computador. Tem para todos os gostos, sendo uma UDF e uma macro mais tradicional:
Versão TARSA:
Public Function PrinterOffline(Optional pstrPrinter As String = "Default") As Boolean Dim strWhere As String Dim objWMI As Object Dim objPrinters As Object Dim objPrinter As Object Set objWMI = GetObject("winmgmts:\\.\root\CIMV2") If LCase$(pstrPrinter) = "default" Then strWhere = "Default = True" Else strWhere = "Name = '" & pstrPrinter & "'" End If Set objPrinters = objWMI.ExecQuery("SELECT * FROM Win32_Printer WHERE " & strWhere) For Each objPrinter In objPrinters PrinterOffline = objPrinter.WorkOffline Exit For Next Set objPrinter = Nothing Set objPrinters = Nothing Set objWMI = Nothing End Function |
Versão Basole:
Sub Check_Printer_Status() Dim strComputer As String Dim objWMIService Dim colInstalledPrinters Dim objPrinter strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_Printer where Default = 'True'") For Each objPrinter In colInstalledPrinters Select Case objPrinter.printerstatus Case 3 MsgBox "A impressora está ociosa" Case 4 MsgBox "Impressora esta imprimindo" Case 5 MsgBox "A impressora está aquecendo" Case Else MsgBox "A impressora está desativada" End Select Next End Sub |
Indo mais no detalhe, caso haja interesse, o código está fazendo uso do WMI (Windows Management Instrumentation), utilizado não só gerenciar para impressoras mas também todo o hardware do computador. O mais curioso é que você usa sintaxe SQL para fazer as consultas às informações do hardware. Um prato cheio para quem conhece. 🙂
O link do post: http://www.tomasvasquez.com.br/forum/viewtopic.php?f=20&t=5428
Valeu pessoal! São vocês é que fazem o fórum ser o que ele é!