FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema con Windows 10 y la impresora predeterminada
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Problema con Windows 10 y la impresora predeterminada
Posted: Fri Mar 09, 2018 08:58 AM
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 (fw): Select all Collapse
#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
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Problema con Windows 10 y la impresora predeterminada
Posted: Fri Mar 09, 2018 11:31 AM
Bueno, de momento solucionado modificando el registro, no es lo que prefiero pero ... aqu铆 va por si os hace falta :

Code (fw): Select all Collapse
#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
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Problema con Windows 10 y la impresora predeterminada
Posted: Fri Mar 09, 2018 01:15 PM

Gracias 脕ngel

Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Problema con Windows 10 y la impresora predeterminada
Posted: Tue Feb 19, 2019 06:15 PM

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

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Problema con Windows 10 y la impresora predeterminada
Posted: Tue Feb 19, 2019 07:58 PM
Intenta asi:

Code (fw): Select all Collapse
#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 - Phone: +55(11)95150-7341
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Problema con Windows 10 y la impresora predeterminada
Posted: Fri Feb 22, 2019 05:48 PM

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

Continue the discussion