Problema con Windows 10 y la impresora predeterminada

Post Reply
User avatar
AngelSalom
Posts: 664
Joined: Fri Oct 07, 2005 7:38 am
Location: Vinaros (Castellón ) - España
Contact:

Problema con Windows 10 y la impresora predeterminada

Post by AngelSalom »

Hola amigos, ando peleándome con las últimas actualizaciones de Windows 10, concretamente con la opción que se refiere al control de la impresora predeterminada. Por defecto tiene marcado "Permitir que Windows administre mi impresora predeterminada".

Con esto activado la impresión de FW directa a una impresora no funciona, siempre utiliza la última que se imprimió independientemente del parámetro que se le pasa. Entiendo que es porque la clase PRINTER cambia la impresora por defecto y Windows se lo salta a la torera.

¿Podéis probarlo para ver si es mi versión de FW? (12.04 y Harbour 3.2)

Aquí un ejemplo autocontenido :

Code: Select all

#include "fivewin.ch"

function Main()
   local oPrn, oFont, aPrinters:={}, cPrinter:=""
   
   aPrinters:=AGetPrinters()
   cPrinter:=aPrinters[MsgList (aPrinters, "Elija impresora")]
   MSginfo (cPrinter)
   
   PRINT oPrn NAME "Test Impresión" TO cPrinter
      DEFINE FONT oFont NAME "Arial" SIZE 0, -10 BOLD OF oPrn
      
      oPrn:SetPage(9)  // A4
      oPrn:SetPortrait() //Vertical
      PAGE
         oPrn:cmSay( 1.0,  1.0, "Superior Izquierda", oFont)
         oPrn:cmSay( 1.0, 10.5, "Superior Centro",    oFont)
         oPrn:cmSay( 1.0, 20.0, "Superior Derecha",   oFont)
         oPrn:cmSay(28.0,  1.0, "Inferior Izquierda", oFont)
         oPrn:cmSay(28.0, 10.5, "Inferior Centro",    oFont)
         oPrn:cmSay(28.0, 20.0, "Inferior Derecha",   oFont)
      ENDPAGE
   ENDPRINT
   
   RELEASE FONT oFont

return nil


function AGetPrinters() // returns an array with all the available printers

   local aPrinters, cText, cToken := Chr( 15 )

   cText = StrTran( StrTran( StrTran( ;
         GetProfString( "Devices", 0 ), Chr( 0 ), cToken ), Chr( 13 ) ), Chr( 10 ) )
   aPrinters = Array( Len( cText ) - Len( StrTran( cText, cToken ) ) )
   AEval( aPrinters, { |cPrn, nEle | ;
       aPrinters[ nEle ] := StrToken( cText, nEle, cToken ) } )

return aPrinters
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
User avatar
AngelSalom
Posts: 664
Joined: Fri Oct 07, 2005 7:38 am
Location: Vinaros (Castellón ) - España
Contact:

Re: Problema con Windows 10 y la impresora predeterminada

Post by AngelSalom »

Bueno, de momento solucionado modificando el registro, no es lo que prefiero pero ... aquí va por si os hace falta :

Code: Select all

#include "FiveWin.Ch"
#define  HKEY_CURRENT_USER       2147483649

//---------------------------------------------------------------------------//

function Main()

   LOCAL oReg

   oReg := TReg32():New( HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Windows" )
   oReg:Set( "LegacyDefaultPrinterMode", 1 )
   oReg:Close()

return nil

//---------------------------------------------------------------------------//
Angel Salom
http://www.visionwin.com
---------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.0
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Problema con Windows 10 y la impresora predeterminada

Post by hmpaquito »

Gracias Ángel
miarcod
Posts: 172
Joined: Tue Oct 11, 2005 2:17 pm

Re: Problema con Windows 10 y la impresora predeterminada

Post by miarcod »

Este problema sigue sin otra solución que la de desactivar la funcion para que windows controle la impresora predeterminada?

¿Alguna solución sin necesidad de desactivar esta funcion de Windows 10?
¿Se puede enviar una impresion a una impresora concreta sin establecer esta impresora como impresora predeterminada?
Gracias
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Problema con Windows 10 y la impresora predeterminada

Post by karinha »

Intenta asi:

Code: Select all

#Include "Fivewin.ch"

FUNCTION Main()

   LOCAL oPrn, oFont, aPrinters := {}, cPrinter := ""
   
   // aPrinters := AGetPrinters()

   aPrinters := DefaultPrinter()

   /*
   cPrinter := aPrinters[MsgList (aPrinters, "Elija impresora")]

   MSginfo ( cPrinter )
   */
   
   // PRINT oPrn NAME "Test Impresión" TO cPrinter

   PRINT oPrn NAME "Test Impresión" PREVIEW MODAL

   DEFINE FONT oFont NAME "Arial" SIZE 0, - 10 BOLD OF oPrn
      
   oPrn:SetPage( 9 )  // A4
   oPrn:SetPortrait() //Vertical

   PAGE

      oPrn:cmSay( 1.0,  1.0, "Superior Izquierda", oFont )
      oPrn:cmSay( 1.0, 10.5, "Superior Centro",    oFont )
      oPrn:cmSay( 1.0, 20.0, "Superior Derecha",   oFont )
      oPrn:cmSay( 28.0,  1.0, "Inferior Izquierda", oFont )
      oPrn:cmSay( 28.0, 10.5, "Inferior Centro",    oFont )
      oPrn:cmSay( 28.0, 20.0, "Inferior Derecha",   oFont )

   ENDPAGE

   ENDPRINT
   
   RELEASE FONT oFont

RETURN nil

FUNCTION DefaultPrinter()

   LOCAL nPrn, nRet, sGetDefaultPrinter

   nRet := PrinterSetUp()

   nPrn := PrnGetName()

   IF( nRet # 0 )

      SetDefaultPrinter( PRNGETNAME() ) // MUDA O DEFAULT DA IMPRESSORA

      sGetDefaultPrinter := GetDefaultPrinter()

      // ? PrnStatus( sGetDefaultPrinter )

      IF PrnStatus( sGetDefaultPrinter ) = 4096

         // SPOOLER
         MsgRun( sGetDefaultPrinter +": "+isprint( GetDefaultPrinter() ) + ;
                         " ou Spooler Desligado.", "Status da Impressora", ;
                 {|| WinExec( "NET START SPOOLER", 7 ) } )

      ENDIF

      //? GetPrinter()

   ELSE

      RETURN( .F. )

   ENDIF

RETURN NIL

/*
FUNCTION AGetPrinters() // returns an array with all the available printers

   LOCAL aPrinters, cText, cToken := Chr( 15 )

   cText = StrTran( StrTran( StrTran( ;
   GetProfString( "Devices", 0 ), Chr( 0 ), cToken ), Chr( 13 ) ), Chr( 10 ) )
   aPrinters = Array( Len( cText ) - Len( StrTran( cText, cToken ) ) )
   AEval( aPrinters, { |cPrn, nEle | ;
   aPrinters[ nEle ] := StrToken( cText, nEle, cToken ) } )

RETURN aPrinters
*/
 
Saludos.
João Santos - São Paulo - Brasil
miarcod
Posts: 172
Joined: Tue Oct 11, 2005 2:17 pm

Re: Problema con Windows 10 y la impresora predeterminada

Post by miarcod »

Gracias por responder
Lo que me propones no funciona.
Yo lo que pretendo es enviar la impresión a una impresora predefinida en el sistema sin necesidad de pasar por el cuadro de selección de impresora. Esto antes de Windows 10 funcionaba correctamente pero ahora da igual la impresora que le indique la impresión se envia siempre a la última impresora utilizada (si windows administra la impresora por defecto)

Lo que pretendo es lo siguiente:
Tengo varias impresoras instaladas en el mismo puesto de trabajo en una se imprimen albaranes, en otra facturas y en la tecera el resto de documentos. Si guardo el nombre de las impresoras que me interesan cuando genero la impresión la creo con la clausula PRINT oPrn NAME "XXXX" TO cPrinter y en esa variable le digo a que impresora quiero la impresión.
Lo que no comprendo es porque cuando utilizo la funcion GetDefaultPrinter() si funciona pero si yo le doy el valor no funciona

Un saludo
Post Reply