Como saber cuando es la Impresora predeterminada desde VFP9 cuando hay varias?

1,434 views
Skip to first unread message

pupo

unread,
May 16, 2016, 7:33:24 AM5/16/16
to Comunidad de Visual Foxpro en Español
Hola a todos!

Necesito saber cuando es la Impresora predeterminada desde VFP9, cuando hay varias conectadas a la PC, y aunque esté en RED.
Tengo este pedazo de código que me facilitaron trabaja bien pero no descifro cuál es la predeterminada en la PC y es lo más importante que necesito.

WAIT windows " Espere, verificando conexiones de Impresoras instaladas a la PC..." NOWAIT


vnoetaprint=SPACE(1)

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"


mMens1="Impresora desconectada de la PC" +CHR(13)
mMens2=" " +CHR(13)+"  "+objPrinter.Name

mope=MESSAGEBOX(mMens1+mMens2, 0+64,"Atención!")

Case objPrinter.PrinterStatus = 3
strPrinterStatus = "Idle"
Case objPrinter.PrinterStatus = 4
strPrinterStatus = "Printing"
Case objPrinter.PrinterStatus = 5
strPrinterStatus = "Warmup"
Endcase
? "Printer Status: " + strPrinterStatus
Next





Gracias!

Pupo

pupo

unread,
May 16, 2016, 1:04:40 PM5/16/16
to Comunidad de Visual Foxpro en Español
Gracias de todas forma pero con esto que encontré aquí en este sitio funciona bien y es precisamente lo que buscaba por si otro lo necesita.

? SET("PRINTER", 2)

lcDefaultPrinter = SET("Printer",2)

Saludos

francisco prieto

unread,
May 16, 2016, 1:18:35 PM5/16/16
to Comunidad de Visual Foxpro en Español
Pupo,

Gracias, en primer lugar por dar por solucionado tu error y en segundo lugar por compartir la solucion.

Saludos,

Pancho
Cordoba
Argentina

pupo

unread,
May 16, 2016, 1:23:55 PM5/16/16
to Comunidad de Visual Foxpro en Español

Gracias Pancho, con en este sitio he aprendido mucho, lo poco que tenga lo comparto.

Saludos amigo!

Elides Paredes

unread,
May 17, 2016, 3:41:30 PM5/17/16
to Comunidad de Visual Foxpro en Español
Amigo Pupo.
Este código lo tengo en un botón, (en el click claro!)

Muestra el cuadro de diálogo de windows que te permite seleccionar una impresora. En el código, (suelo hacerlo para no olvidarlo), coloqué una explicación para mi mismo, porque a veces con tantas cosas, cuando pasa el tiempo lo olvido. Pero es básicamente por el problema que hemos tenido muchos, cuando en un informe se estable una impresora predeterminada. 
El problema es que a veces tenemos una predeterminada, pero VFP busca la que está en el entorno del frx.
Revisa el código y los comentarios.

Espero te sean útiles y a todos a quienes les pueda servir

*------------
* GETPRINTER Muestra el cuadro de dialogo de impresoras disponibles 

Impresora = ALLTRIM(GETPRINTER( ))

* Si selecciona una Muestra la impresora seleccionada ***
* Y luego la pone como predeterminada

IF EMPTY(Impresora)
WAIT 'No seleccionó Impresora'  WINDOW  AT 3,45 

ELSE 
  cMensaje = 'Ahora la impresora Predeterminada será'+ CHR(13)+;
    'La impresora: '+ Impresora 
WAIT cMensaje  WINDOW  AT 3,45 


ws = Createobject("WScript.Network")
ws.SetDefaultPrinter(Alltrim(Impresora))
RELEASE ws && lo libero de memoria.

ENDIF 

* En cada botón que mande a imprimir debo decirla la impresora que va
* a usar diciendo  SET PRINTER TO NAME ((variable)))
* Entonces puedo seleccionar una con el promt cada vez que va a imprimir
* o puedo tener una predeterminada para ese reporte.
* El problema que tenía es que el reporte guarda en su entorno (si uno quiere, 
* el nombre de la impresora. Por eso es necesario cambiar las propiedades de 
* los reportes para que no guarde la impresora en el entorno del reporte o 
* informe.
* Esto se hace haciendo click derecho sobre el reporte se despliega una ventana
* que contiene en la parte inferior un control check box que dice 
* Save printer enviroment, lo que significa guardar la impresora en el 
* entorno (del reporte).
*
* si se coloca de esa manera (sin guardar la impresora) entonces se dirige 
* el reporte a la impresora predeterminada por el sistema operativo.

* Se puede también cambiar la impresora predeterminada con un simple botón
*

* y se puede poner para que imprima con la predeterminada Así:
* SET PRINTER TO NAME ((SET("PRINTER",2))) o también se puede
* seleccionar una impresora cuyo nombre se guarda en una varible y luego le digo
* SET PRINTER TO NAME ((variable)))
* Ahora si quiero mostrar la impresora que va a usar antes
* o también si seleccioné otra se puede ver 

* SET PRINTER TO NAME ((SET("PRINTER",3)))
* cambiando el valor 2  x 3 se ve la predeterminada para VFP con 
* SET PRINTER TO NAME 
*  


Saludos 
Elides Paredes
Barquisimeto Venezuela.

Hans Mar

unread,
May 17, 2019, 9:48:14 AM5/17/19
to Comunidad de Visual Foxpro en Español
GRacias por compartir tus conociminetos, me sirvio de mucho
Saludos

HernanCano

unread,
May 17, 2019, 6:39:40 PM5/17/19
to Comunidad de Visual Foxpro en Español
Chévere que "pupo" haya resuelto su inconveniente.

Elides: cuéntame: ¿Por qué es preferible tu propuesta ws.SetDefaultPrinter(Alltrim(Impresora)) frente a SET PRINTER TO NAME NombreDeLaImpresora que es lo que dispone Fox/VFP?

Gracias.
Reply all
Reply to author
Forward
0 new messages