Saber si una impresora esta "ON LINE" (READY o al menos encendida).

473 views
Skip to first unread message

Edgar Acevedo

unread,
May 27, 2013, 4:22:33 AM5/27/13
to publice...@googlegroups.com, Edgar Acevedo
Saludos amigos expertos:

En tiempos de Foxpro para DOS utilizaba PRINTSTATUS() para saber si una impresora está en línea (ON LINE o READY).

Ahora quisiera hacer lo mismo, pero en VFP9.  ¿Hay alguna forma de hacerlo?
Si se trata de una impresora matricial, quisiera saber si está en línea.  Si se trata de una laser o inyección, quisiera saber si está encendida y "lista" para imprimir.

Gracias anticipadas por su atención,


Edgar Acevedo.

P.D.  "Guguleando" encontré un código que creo que está en VB, pero no tengo idea de como pasarlo a VFP (de hecho ni siquiera se si realmente funciona):

Private Enum PrinterStatus

PrinterIdle = 3

PrinterPrinting = 4

PrinterWarmingUp = 5

' For more states see WMI docs.

End Enum

Private Function PrinterStatusToString(ByVal ps As PrinterStatus) As String

Dim s As String

Select Case ps

Case PrinterStatus.PrinterIdle

s = "waiting (idle)"

Case PrinterStatus.PrinterPrinting

s = "printing"

Case PrinterStatus.PrinterWarmingUp

s = "warming up"

Case Else

s = "unknown state"

End Select

PrinterStatusToString = s

End Function

Private Sub Form1_Load( _

ByVal sender As System.Object, _

ByVal e As System.EventArgs _

) Handles MyBase.Load

Dim strPrintServer As String

strPrintServer = "localhost"

Dim WMIObject As String, PrinterSet As Object, Printer As Object

WMIObject = "winmgmts://" & strPrintServer

PrinterSet = GetObject(WMIObject).InstancesOf("win32_Printer")

For Each Printer In PrinterSet

MsgBox( _

Printer.Name & ": " & _

PrinterStatusToString(Printer.PrinterStatus) _

)

Next Printer

End Sub


Francisco

unread,
May 27, 2013, 4:41:07 AM5/27/13
to publice...@googlegroups.com, Edgar Acevedo
strComputer = "."
objWMIService = Getobject("winmgmts:"+ "{impersonationLevel=impersonate}!\\" + strComputer + "\root\cimv2")
colInstalledPrinters = objWMIService.ExecQuery("SELECT * FROM Win32_Printer")
For Each objPrinter In colInstalledPrinters
?"Name: " + objPrinter.Name
Do Case
Case objPrinter.PrinterStatus = 1
strPrinterStatus = "Other"
Case objPrinter.PrinterStatus = 2
strPrinterStatus = "Unknown"
Case objPrinter.PrinterStatus = 3
strPrinterStatus = "Idle"
Case objPrinter.PrinterStatus = 4
strPrinterStatus = "Printing"
Case objPrinter.PrinterStatus = 5
strPrinterStatus = "Warmup"
Endcase
? "Printer Status: " + strPrinterStatus
Next
Reply all
Reply to author
Forward
0 new messages