** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Verificar estado Impresora
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoVerificar estado Impresora

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Tema: Verificar estado Impresora
    Enviado: 02/Septiembre/2020 a las 12:36
Buenas!!  Tengo estas dos funciones que en windows 7 funcionan correctamente y hacen lo que tienen que hacer, pero en windows 10 no va la funcion IsPrinterOff.
No da error, ni dice nada...el que si dice es el propio windows 10, no se puede imprimir el documento xxxx....

Hay alguna solucion????

Function Imprimir(strNumImpresora As Integer, strInforme As String) 'Le pasamos como parametro numero de impresora de tbImpresoras  e informe
On Error GoTo Err_Imprimir

Dim varImpresora As String
varImpresora = DLookup("NombreImpresora", "tbImpresoras", "NumImpresora=" & strNumImpresora & "")

    '**************************
    'En windows 10 no salta la funcion
    'Le paso funcion para ver si esta encendida
    If IsPrinterOff(varImpresora) = True Then
    'MsgBox "OffLine"
    MsgBox "Parece que la impresora esta apagada.", vbInformation
    Exit Function
    End If
'******************************


Set Application.Printer = Application.Printers(varImpresora)
DoCmd.OpenReport strInforme, acViewNormal

Exit_Imprimir:
    Exit Function

Err_Imprimir:
    If Err.Number = 5 Then
    MsgBox "Es posible que la impresora de tickets este apagada,mal configurada o no este instalada.", vbExclamation
    Else
    MsgBox Err.Description
    End If
    Resume Exit_Imprimir
End Function


Public Function IsPrinterOff(Optional Printer As String) As Boolean
'En windows 10 no salta la funcion
'Devuelve true si esta apagada o no lista!!!!!!
'Si no ponemos que impresora es pilla la predeterminada
    Dim strWhere As String
    If LenB(Printer) Then
        strWhere = "Name = '" & Replace(Printer, "'", "\'") & "'"
    Else
        strWhere = "Default = TRUE"
    End If
    IsPrinterOff = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_Printer WHERE " & strWhere & " AND WorkOffline = TRUE").Count
End Function

Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4812
Enlace directo a este mensaje Enviado: 02/Septiembre/2020 a las 20:18
Buenas ,


Prueba con el siguiente codigo , con Windows 8.1 funciona

Private Function funTest()
    If funImpresoraOnLine = False Then
        MsgBox "La impresora esta encendida", vbInformation
    Else
        MsgBox "La impresora esta apagada", vbExclamation
    End If
End Function

Public Function funImpresoraOnLine(Optional PonImpresora 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$(PonImpresora) = "default" Then
        strWhere = "Default = True"
    Else
        strWhere = "Name = '" & PonImpresora & "'"
    End If
    
    Set objPrinters = objWMI.ExecQuery("SELECT * FROM Win32_Printer WHERE " & strWhere)
    
    For Each objPrinter In objPrinters
        DoEvents
        funImpresoraOnLine = objPrinter.WorkOffline
        Exit For
    Next

Close_Local:
    Set objPrinter = Nothing
    Set objPrinters = Nothing
    Set objWMI = Nothing
End Function


Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 02/Septiembre/2020 a las 22:56
PerfectoClapClap

Lo he dejado asi, solo con esta funcion

Public Function FunImpresoraOnLine(Optional PonImpresora As String = "Default") As Boolean
'Devuelve True es apagada. Le podemos pasar como argumento la impresoram si no pillara la predeter,onada
    Dim strWhere As String
    Dim objWMI As Object
    Dim objPrinters As Object
    Dim objPrinter As Object

    Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
    
    If LCase$(PonImpresora) = "default" Then
        strWhere = "Default = True"
    Else
        strWhere = "Name = '" & PonImpresora & "'"
    End If
    
    Set objPrinters = objWMI.ExecQuery("SELECT * FROM Win32_Printer WHERE " & strWhere)
    
    For Each objPrinter In objPrinters
        DoEvents
        FunImpresoraOnLine = objPrinter.WorkOffline
        Exit For
    Next

Close_Local:
    Set objPrinter = Nothing
    Set objPrinters = Nothing
    Set objWMI = Nothing
End Function

Y para llamar a la funcion

   'Le paso funcion para ver si esta encendida y como parametro el nombre de la impresora
    If FunImpresoraOnLine("NombreImpresora") = True Then  'Si devuelve true es apagada
    MsgBox "Parece que la impresora esta apagada.", vbExclamation, "Apagada"
    Exit Function
    End If


Se puede cerrar

Saludos y  gracias


Editado por rokoko - 02/Septiembre/2020 a las 22:59
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable