Página 1 de 1

SET PRINTER

Publicado: Mié Nov 23, 2005 9:03 am
por Xevi
SET DEVICE TO PRINTER
SET PRINTER TO LPT1
@ 10,10 SAY "HOLA MUNDO"
EJECT
SET PRINTER TO
SET DEVICE TO SCREEN
¿Como puedo saber si el puerto LPT1 está disponible/conectado???
Lo que me ocurre... cuando utilizo esta sentencia, en una impresora de Red,
si no está el servidor de la impresora conectada, la aplicación se queda
"bloqueada"... entra en un bucle infinito...
Gracias.
Un Saludo,
Xevi.

SET PRINTER

Publicado: Mié Nov 23, 2005 9:37 am
por jfgimenez
Xevi,
> ¿Como puedo saber si el puerto LPT1 está disponible/conectado???
>
> Lo que me ocurre... cuando utilizo esta sentencia, en una impresora de
> Red, si no está el servidor de la impresora conectada, la aplicación se
> queda "bloqueada"... entra en un bucle infinito...
Prueba con la función IsPrinter(). Yo nunca la he usado con [x]Harbour, pero
se supone que debería funcionar.
--
Un saludo,
José F. Giménez

SET PRINTER

Publicado: Mié Nov 23, 2005 10:17 am
por Xevi
Jose,
Por lo visto IsPrinter() informa de si está imprimiendo... no si el puerto
está disponible!!!
Lo que necesitaría es poder cargar en un Array el comando NET USE...
que ese comando SI informa de los puertos y unidades disponibles...
¿Puede ser posible???
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:43842a4f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> ¿Como puedo saber si el puerto LPT1 está disponible/conectado???
>>
>> Lo que me ocurre... cuando utilizo esta sentencia, en una impresora de
>> Red, si no está el servidor de la impresora conectada, la aplicación se
>> queda "bloqueada"... entra en un bucle infinito...
>
> Prueba con la función IsPrinter(). Yo nunca la he usado con [x]Harbour,
> pero se supone que debería funcionar.
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>

SET PRINTER

Publicado: Mié Nov 23, 2005 10:30 am
por jfgimenez
Xevi,
> Por lo visto IsPrinter() informa de si está imprimiendo... no si el puerto
> está disponible!!!
Debería ser como en Clipper, es decir, que retorne .T. si la impresora está
lista y .F. si no; no si está imprimiendo o no. Otra cosa es que si es una
impresora de red, para windows la cola está disponible, y puede que siempre
devuelva .T.
> Lo que necesitaría es poder cargar en un Array el comando NET USE...
> que ese comando SI informa de los puertos y unidades disponibles...
> ¿Puede ser posible???
Supongo que te refieres a lanzar el comando y recoger su salida. No es que
sea muy de mi agrado, pero puedes usar algo como:
ShellExecute( 0, "open", "NET USE.... > netuse.txt" )
y después cargar el fichero netuse.txt y procesarlo.
--
Un saludo,
José F. Giménez

SET PRINTER

Publicado: Mié Nov 23, 2005 11:47 am
por Xevi
Jose,
No funciona!!!
local nHandle
ShellExecute( 0, "open", "NET USE >C:NETUSE.txt" )
*WinExec( "NET USE >C:NETUSE.txt", SW_NORMAL, .F. )
nHandle := FOpen( "C:NETUSE.txt" )
MsgInfo( nHandle )
MsgInfo( FReadStr( nHandle, 2000 ) )
Si ejecutas el comando NET USE >C:NETUSE.txt desde el sí­mbolo de sistema SI que crea el fichero, pero desde la aplicación Xailer/xHarbour no crea el fichero... nHandle devuelve -1
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:4384369a$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> Por lo visto IsPrinter() informa de si está imprimiendo... no si el puerto
>> está disponible!!!
>
> Deberí­a ser como en Clipper, es decir, que retorne .T. si la impresora está
> lista y .F. si no; no si está imprimiendo o no. Otra cosa es que si es una
> impresora de red, para windows la cola está disponible, y puede que siempre
> devuelva .T.
>
>
>> Lo que necesitarí­a es poder cargar en un Array el comando NET USE...
>> que ese comando SI informa de los puertos y unidades disponibles...
>> ¿Puede ser posible???
>
> Supongo que te refieres a lanzar el comando y recoger su salida. No es que
> sea muy de mi agrado, pero puedes usar algo como:
>
> ShellExecute( 0, "open", "NET USE.... > netuse.txt" )
>
> y después cargar el fichero netuse.txt y procesarlo.
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>
>
--

SET PRINTER

Publicado: Mié Nov 23, 2005 12:21 pm
por joseluis
Xevi,
¿Como hací­as esa operación en Clipper?
Técnicamente (no lo he probado) en xHarbour debe ser lo mismo.
Saludos,
José Luis Capel

SET PRINTER

Publicado: Mié Nov 23, 2005 12:33 pm
por Xevi
José Luis,
No lo hacía en Clipper.
Pero como los cambios son para ir mejorando...
Lo único que he conseguido es montar la instrucción
NET USE >NetUse.txt
en un fichero.bat
Y llamar al fichero.bat desde ShellExecute()
Pero creo que debe de haber alguna API que devuelva el nombre de LPTs
conectados, como ocurre con las unidades, A: C: D:...
Si a alguien se le ocurre como detectar un puerto LPT si está o no
conectado... lo agradecería.
Un Saludo,
Xevi.
"José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje
news:43845196$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> ¿Como hacías esa operación en Clipper?
>
> Técnicamente (no lo he probado) en xHarbour debe ser lo mismo.
>
> Saludos,
> José Luis Capel
>

SET PRINTER

Publicado: Mié Nov 23, 2005 12:51 pm
por joseluis
Xevi,
>
> Pero creo que debe de haber alguna API que devuelva el nombre de LPTs
> conectados, como ocurre con las unidades, A: C: D:...
> Si a alguien se le ocurre como detectar un puerto LPT si está o no
> conectado... lo agradecerí­a.
>
En casa tengo el wrapper a WNetGetConnection que es una función del API
de windows que devuelve el nombre el nombre de red asociado a un recurso
local.
Serí­a algo así­:
cRecurso := wNetGetConn( "Z:") ---> ServidorCarpetaRemota
Y _creo_ que podrí­as interrogar esto:
cImpresora := wNetGetConn("LPT1:") ----->ServidorImpresoraRemota1
Esta tarde lo dejo aquí­...
Saludos,
José Luis Capel

SET PRINTER

Publicado: Mié Nov 23, 2005 12:56 pm
por jfgimenez
Xevi,
> Pero creo que debe de haber alguna API que devuelva el nombre de LPTs
> conectados, como ocurre con las unidades, A: C: D:...
No lo he mirado, pero seguro que sí existe. Aunque habrá que hacer el
"wrapper"...
> Si a alguien se le ocurre como detectar un puerto LPT si está o no
> conectado... lo agradecería.
Yo creo que no deberías atacar directamente el puerto; en mi opinión, es
hacerlo como windows NO quiere que se haga, y por eso se complica. Yo lo que
haría es manejar la cola al estilo de windows, a través del objeto Printer.
Y en el caso de que tengas una impresora matricial o de tickets y necesites
enviarle directamente el texto sin que lo procese el driver de la impresora
puedes usar el método WriteData()
--
Un saludo,
José F. Giménez

SET PRINTER

Publicado: Mié Nov 23, 2005 1:23 pm
por jfgimenez
Xevi,
aquí tienes el "wrapper":
//---------------------------------------------------------- --------------------
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
XA_FUNC( WNETGETCONNECTION )
{
char *cLocalName = hb_parc( 1 );
char *cRemoteName;
DWORD nLen = 0, nError;
nError = WNetGetConnection( cLocalName, NULL, &nLen );
if( nLen )
{
cRemoteName = hb_xgrab( nLen );
nError = WNetGetConnection( cLocalName, cRemoteName, &nLen );
hb_storc( cRemoteName, 2 );
hb_xfree( cRemoteName );
}
hb_retnl( nError );
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------
Para usarla tienes que hacerlo así:
LOCAL cImpresora
IF WNetGetConnection( "LPT1:", @cImpresora ) != 0
MsgInfo( "Hay un problema al usar la impresora" )
ENDIF
...
Lo normal es que si no está disponible te devuelva 1201
(ERROR_CONNECTION_UNAVAIL).
--
Un saludo,
José F. Giménez

SET PRINTER

Publicado: Mié Nov 23, 2005 3:17 pm
por Xevi
PERFECTO!!!
Gracias, Jose y José Luis.
Eso es lo que necesitaba.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:43845f40$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> aquí tienes el "wrapper":
>
> //---------------------------------------------------------- --------------------
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
>
> XA_FUNC( WNETGETCONNECTION )
> {
> char *cLocalName = hb_parc( 1 );
> char *cRemoteName;
> DWORD nLen = 0, nError;
>
> nError = WNetGetConnection( cLocalName, NULL, &nLen );
> if( nLen )
> {
> cRemoteName = hb_xgrab( nLen );
> nError = WNetGetConnection( cLocalName, cRemoteName, &nLen );
> hb_storc( cRemoteName, 2 );
> hb_xfree( cRemoteName );
> }
> hb_retnl( nError );
> }
>
> #pragma ENDDUMP
>
> //---------------------------------------------------------- --------------------
>
> Para usarla tienes que hacerlo así:
>
> LOCAL cImpresora
>
> IF WNetGetConnection( "LPT1:", @cImpresora ) != 0
> MsgInfo( "Hay un problema al usar la impresora" )
> ENDIF
> ...
>
> Lo normal es que si no está disponible te devuelva 1201
> (ERROR_CONNECTION_UNAVAIL).
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>

SET PRINTER

Publicado: Jue Nov 24, 2005 5:46 pm
por Xevi
¿Como compruebo si el puerto LPT1 local está disponible???
Habría algun Wrapper para puertos LOCALES
Algo como... WLocalGetConnection
Se trataría primero de intentar localizar el puerto localmente y si no está
disponible intentar localizarlo en la Red.
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:43845f40$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> aquí tienes el "wrapper":
>
> //---------------------------------------------------------- --------------------
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
>
> XA_FUNC( WNETGETCONNECTION )
> {
> char *cLocalName = hb_parc( 1 );
> char *cRemoteName;
> DWORD nLen = 0, nError;
>
> nError = WNetGetConnection( cLocalName, NULL, &nLen );
> if( nLen )
> {
> cRemoteName = hb_xgrab( nLen );
> nError = WNetGetConnection( cLocalName, cRemoteName, &nLen );
> hb_storc( cRemoteName, 2 );
> hb_xfree( cRemoteName );
> }
> hb_retnl( nError );
> }
>
> #pragma ENDDUMP
>
> //---------------------------------------------------------- --------------------
>
> Para usarla tienes que hacerlo así:
>
> LOCAL cImpresora
>
> IF WNetGetConnection( "LPT1:", @cImpresora ) != 0
> MsgInfo( "Hay un problema al usar la impresora" )
> ENDIF
> ...
>
> Lo normal es que si no está disponible te devuelva 1201
> (ERROR_CONNECTION_UNAVAIL).
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>

SET PRINTER

Publicado: Jue Nov 24, 2005 6:53 pm
por jfgimenez
Xevi,
> ¿Como compruebo si el puerto LPT1 local está disponible???
>
> Habría algun Wrapper para puertos LOCALES
>
> Algo como... WLocalGetConnection
>
> Se trataría primero de intentar localizar el puerto localmente y si no
> está disponible intentar localizarlo en la Red.
¿Has probado IsPrinter() en el puerto local? Podrías usar
WNetGetConnection() para comprobar si es un puerto de red, y si no lo es,
comprobarlo con IsPrinter(). Yo creo que así sí debería funcionar bien.
--
Un saludo,
José F. Giménez

SET PRINTER

Publicado: Vie Nov 25, 2005 1:45 pm
por Xevi
Jose,
IsPrinter() no me funciona... o no se hacerlo funcionar !!!
En un ordenador con puerto LPT1, y una impresora conectada y encendida...
MsgInfo( IsPrinter( "LPT1" ) )
MsgInfo( IsPrinter( "LPT2" ) )
MsgInfo( IsPrinter( "LPT3" ) )
MsgInfo( IsPrinter( "LPT1:" ) )
MsgInfo( IsPrinter( "LPT2:" ) )
MsgInfo( IsPrinter( "LPT3:" ) )
La respuesta es SIEMPRE la misma F.
¿Hago algo mal???
y otra consulta sobre imprimir e interceptar el error...
En Clipper existí­a el objeto oError, que podí­amos "interceptar" e incluso "modificar" en el prg... ErrorSys.prg.
¿Cómo podemos interceptar los errores en Xailer/xHarbour???
Ya que si mando a imprimir
SET DEVICE TO PRINTER
SET PRINTER TO LPT5
y el puerto no existe
me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
Subsistema: TERM
Código de error: 2014
Estado: .T.
Descripción: Create error
Operación: LPT5.prn
Argumentos:
Fichero:
Código error SO: 2
Pila de llamadas:
SET (0)
MAIN (17)
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:[email=4385fe07@ozsrvnegro.ozlan.local...]4385fe07@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> ¿Como compruebo si el puerto LPT1 local está disponible???
>>
>> Habrí­a algun Wrapper para puertos LOCALES
>>
>> Algo como... WLocalGetConnection
>>
>> Se tratarí­a primero de intentar localizar el puerto localmente y si no
>> está disponible intentar localizarlo en la Red.
>
> ¿Has probado IsPrinter() en el puerto local? Podrí­as usar
> WNetGetConnection() para comprobar si es un puerto de red, y si no lo es,
> comprobarlo con IsPrinter(). Yo creo que así­ sí­ deberí­a funcionar bien.
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>
>
--

SET PRINTER

Publicado: Vie Nov 25, 2005 1:51 pm
por jfgimenez
Xevi,
IsPrinter() no me funciona... o no se hacerlo funcionar !!!
Nunca lo he usado en xHarbour (en Clipper tení­a mi propia función IsPrinter() escrita en assembler), pero deberí­a funcionar. En cuanto tenga un rato le echo un vistazo.
y otra consulta sobre imprimir e interceptar el error...
En Clipper existí­a el objeto oError, que podí­amos "interceptar" e incluso "modificar" en el prg... ErrorSys.prg.
¿Cómo podemos interceptar los errores en Xailer/xHarbour???
Ya que si mando a imprimir
SET DEVICE TO PRINTER
SET PRINTER TO LPT5
y el puerto no existe
me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
Lo más fácil y práctico es usar un bloque TRY / CATCH / END:
TRY
SET DEVICE TO PRINTER5
SET PRINTER TO LPT5
.... // Resto de impresion
SET PRINTER TO
SET DEVICE TO SCREEN
CATCH oError
MsgStop( oError:Description, "Error al imprimir" )
END
--
Un saludo,
José F. Giménez
--

SET PRINTER

Publicado: Vie Nov 25, 2005 1:52 pm
por jfgimenez
Xevi,
IsPrinter() no me funciona... o no se hacerlo funcionar !!!
Nunca lo he usado en xHarbour (en Clipper tení­a mi propia función IsPrinter() escrita en assembler), pero deberí­a funcionar. En cuanto tenga un rato le echo un vistazo.
y otra consulta sobre imprimir e interceptar el error...
En Clipper existí­a el objeto oError, que podí­amos "interceptar" e incluso "modificar" en el prg... ErrorSys.prg.
¿Cómo podemos interceptar los errores en Xailer/xHarbour???
Ya que si mando a imprimir
SET DEVICE TO PRINTER
SET PRINTER TO LPT5
y el puerto no existe
me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
Lo más fácil y práctico es usar un bloque TRY / CATCH / END:
TRY
SET DEVICE TO PRINTER5
SET PRINTER TO LPT5
.... // Resto de impresion
SET PRINTER TO
SET DEVICE TO SCREEN
CATCH oError
MsgStop( oError:Description, "Error al imprimir" )
END
--
Un saludo,
José F. Giménez
--

SET PRINTER

Publicado: Vie Nov 25, 2005 4:54 pm
por joseluis
Xevi,
IsPrinter solo funciona con LPT1 y no acepta parámetros.
Prueba con xIsPrinter("LPTn") y dime se eso te soluciona el problema.
Saludos,
José Luis Capel
Xevi escribió:
> Jose,
>
> IsPrinter() no me funciona... o no se hacerlo funcionar !!!
>
> En un ordenador con puerto LPT1, y una impresora conectada y encendida...
> MsgInfo( IsPrinter( "LPT1" ) )
> MsgInfo( IsPrinter( "LPT2" ) )
> MsgInfo( IsPrinter( "LPT3" ) )
> MsgInfo( IsPrinter( "LPT1:" ) )
> MsgInfo( IsPrinter( "LPT2:" ) )
> MsgInfo( IsPrinter( "LPT3:" ) )
> La respuesta es SIEMPRE la misma F.
> ¿Hago algo mal???
>
>
> y otra consulta sobre imprimir e interceptar el error...
>
> En Clipper existí­a el objeto oError, que podí­amos "interceptar" e
> incluso "modificar" en el prg... ErrorSys.prg.
> ¿Cómo podemos interceptar los errores en Xailer/xHarbour???
> Ya que si mando a imprimir
> SET DEVICE TO PRINTER
> SET PRINTER TO LPT5
> y el puerto no existe
> me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
> Subsistema: TERM
> Código de error: 2014
> Estado: .T.
> Descripción: Create error
> Operación: LPT5.prn
> Argumentos:
> Fichero:
> Código error SO: 2
>
> Pila de llamadas:
> SET (0)
> MAIN (17)
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
> mensaje news:[email=4385fe07@ozsrvnegro.ozlan.local...]4385fe07@ozsrvnegro.ozlan.local...[/email]
> >
> > Xevi,
> >
> >> ¿Como compruebo si el puerto LPT1 local está disponible???
> >>
> >> Habrí­a algun Wrapper para puertos LOCALES
> >>
> >> Algo como... WLocalGetConnection
> >>
> >> Se tratarí­a primero de intentar localizar el puerto localmente y si no
> >> está disponible intentar localizarlo en la Red.
> >
> > ¿Has probado IsPrinter() en el puerto local? Podrí­as usar
> > WNetGetConnection() para comprobar si es un puerto de red, y si no lo
> es,
> > comprobarlo con IsPrinter(). Yo creo que así­ sí­ deberí­a funcionar bien.
> >
> >
> > --
> > Un saludo,
> >
> > José F. Giménez
> >
> >
> >

SET PRINTER

Publicado: Vie Nov 25, 2005 5:16 pm
por Xevi
MsgInfo( xIsPrinter("LPT1") )
MsgInfo( xIsPrinter("LPT2") )
MsgInfo( xIsPrinter("LPT3") )
MsgInfo( xIsPrinter("LPT4") )
MsgInfo( xIsPrinter("LPT5") )
SIEMPRE devuelve -1, exista o no el puerto, o esté o no esté lista la
impresora conectada en LPT1
Gracias.
Un Saludo,
Xevi.
"José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje
news:[email=438734b0@ozsrvnegro.ozlan.local...]438734b0@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> IsPrinter solo funciona con LPT1 y no acepta parámetros.
>
> Prueba con xIsPrinter("LPTn") y dime se eso te soluciona el problema.
>
> Saludos,
> José Luis Capel
>
> Xevi escribió:
>> Jose,
>> IsPrinter() no me funciona... o no se hacerlo funcionar !!!
>> En un ordenador con puerto LPT1, y una impresora conectada y
>> encendida...
>> MsgInfo( IsPrinter( "LPT1" ) )
>> MsgInfo( IsPrinter( "LPT2" ) )
>> MsgInfo( IsPrinter( "LPT3" ) )
>> MsgInfo( IsPrinter( "LPT1:" ) )
>> MsgInfo( IsPrinter( "LPT2:" ) )
>> MsgInfo( IsPrinter( "LPT3:" ) )
>> La respuesta es SIEMPRE la misma F.
>> ¿Hago algo mal???
>> y otra consulta sobre imprimir e interceptar el error...
>> En Clipper existía el objeto oError, que podíamos "interceptar" e
>> incluso "modificar" en el prg... ErrorSys.prg.
>> ¿Cómo podemos interceptar los errores en Xailer/xHarbour???
>> Ya que si mando a imprimir
>> SET DEVICE TO PRINTER
>> SET PRINTER TO LPT5
>> y el puerto no existe
>> me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
>> Subsistema: TERM
>> Código de error: 2014
>> Estado: .T.
>> Descripción: Create error
>> Operación: LPT5.prn
>> Argumentos:
>> Fichero:
>> Código error SO: 2
>> Pila de llamadas:
>> SET (0)
>> MAIN (17)
>> Gracias.
>> Un Saludo,
>> Xevi.
>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>> mensaje news:[email=4385fe07@ozsrvnegro.ozlan.local...]4385fe07@ozsrvnegro.ozlan.local...[/email]
>> >
>> > Xevi,
>> >
>> >> ¿Como compruebo si el puerto LPT1 local está disponible???
>> >>
>> >> Habría algun Wrapper para puertos LOCALES
>> >>
>> >> Algo como... WLocalGetConnection
>> >>
>> >> Se trataría primero de intentar localizar el puerto localmente y si
>> no
>> >> está disponible intentar localizarlo en la Red.
>> >
>> > ¿Has probado IsPrinter() en el puerto local? Podrías usar
>> > WNetGetConnection() para comprobar si es un puerto de red, y si no lo
>> es,
>> > comprobarlo con IsPrinter(). Yo creo que así sí debería funcionar
>> bien.
>> >
>> >
>> > --
>> > Un saludo,
>> >
>> > José F. Giménez
>> >
>> >
>> >
>

SET PRINTER

Publicado: Vie Nov 25, 2005 5:33 pm
por joseluis
Xevi,
Pues me quedo pillado...
He revisado el fuente de xIsprinter y veo que utiliza una función del
Api de Windows ( OpenPrinter ) que abre un 'handle' a la impresora. Lo
que no se, mirando el MSDN, es si el nombre de la impresora corresponde
a "LPTx" o no. A ver si algún experto en la materia puede aclararnos
algo más esto.
Saludos,
José Luis Capel
Xevi escribió:
>
> MsgInfo( xIsPrinter("LPT1") )
> MsgInfo( xIsPrinter("LPT2") )
> MsgInfo( xIsPrinter("LPT3") )
> MsgInfo( xIsPrinter("LPT4") )
> MsgInfo( xIsPrinter("LPT5") )
>
> SIEMPRE devuelve -1, exista o no el puerto, o esté o no esté lista la
> impresora conectada en LPT1
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje
> news:[email=438734b0@ozsrvnegro.ozlan.local...]438734b0@ozsrvnegro.ozlan.local...[/email]
>
>>Xevi,
>>
>>IsPrinter solo funciona con LPT1 y no acepta parámetros.
>>
>>Prueba con xIsPrinter("LPTn") y dime se eso te soluciona el problema.
>>
>>Saludos,
>>José Luis Capel
>>
>>Xevi escribió:
>>
>>>Jose,
>>> IsPrinter() no me funciona... o no se hacerlo funcionar !!!
>>> En un ordenador con puerto LPT1, y una impresora conectada y
>>>encendida...
>>>MsgInfo( IsPrinter( "LPT1" ) )
>>>MsgInfo( IsPrinter( "LPT2" ) )
>>>MsgInfo( IsPrinter( "LPT3" ) )
>>>MsgInfo( IsPrinter( "LPT1:" ) )
>>>MsgInfo( IsPrinter( "LPT2:" ) )
>>>MsgInfo( IsPrinter( "LPT3:" ) )
>>>La respuesta es SIEMPRE la misma F.
>>>¿Hago algo mal???
>>> y otra consulta sobre imprimir e interceptar el error...
>>> En Clipper existí­a el objeto oError, que podí­amos "interceptar" e
>>>incluso "modificar" en el prg... ErrorSys.prg.
>>>¿Cómo podemos interceptar los errores en Xailer/xHarbour???
>>>Ya que si mando a imprimir
>>>SET DEVICE TO PRINTER
>>>SET PRINTER TO LPT5
>>>y el puerto no existe
>>>me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
>>>Subsistema: TERM
>>> Código de error: 2014
>>> Estado: .T.
>>> Descripción: Create error
>>> Operación: LPT5.prn
>>> Argumentos:
>>> Fichero:
>>> Código error SO: 2
>>> Pila de llamadas:
>>> SET (0)
>>> MAIN (17)
>>> Gracias.
>>> Un Saludo,
>>>Xevi.
>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>>>mensaje news:[email=4385fe07@ozsrvnegro.ozlan.local...]4385fe07@ozsrvnegro.ozlan.local...[/email]
>>> >
>>> > Xevi,
>>> >
>>> >> ¿Como compruebo si el puerto LPT1 local está disponible???
>>> >>
>>> >> Habrí­a algun Wrapper para puertos LOCALES
>>> >>
>>> >> Algo como... WLocalGetConnection
>>> >>
>>> >> Se tratarí­a primero de intentar localizar el puerto localmente y si
>>>no
>>> >> está disponible intentar localizarlo en la Red.
>>> >
>>> > ¿Has probado IsPrinter() en el puerto local? Podrí­as usar
>>> > WNetGetConnection() para comprobar si es un puerto de red, y si no lo
>>>es,
>>> > comprobarlo con IsPrinter(). Yo creo que así­ sí­ deberí­a funcionar
>>>bien.
>>> >
>>> >
>>> > --
>>> > Un saludo,
>>> >
>>> > José F. Giménez
>>> >
>>> >
>>> >
>>
>
>
>

SET PRINTER

Publicado: Vie Nov 25, 2005 5:45 pm
por Xevi
José Luis,
XISPRINTER
.. Syntax
XISPRINTER(<cPrinterName>) -->
.. Arguments
cPrinterName:
.. Files
rtl.lib, source is isprint.c
¿No será que xIsPrinter acepta el parámetro del nombre de la impresora, no del puerto ???
Gracias.
Un Saludo,
Xevi.
"José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje news:[email=43873dbe@ozsrvnegro.ozlan.local...]43873dbe@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> Pues me quedo pillado...
>
> He revisado el fuente de xIsprinter y veo que utiliza una función del
> Api de Windows ( OpenPrinter ) que abre un 'handle' a la impresora. Lo
> que no se, mirando el MSDN, es si el nombre de la impresora corresponde
> a "LPTx" o no. A ver si algún experto en la materia puede aclararnos
> algo más esto.
>
> Saludos,
> José Luis Capel
>
>
> Xevi escribió:
>>
>> MsgInfo( xIsPrinter("LPT1") )
>> MsgInfo( xIsPrinter("LPT2") )
>> MsgInfo( xIsPrinter("LPT3") )
>> MsgInfo( xIsPrinter("LPT4") )
>> MsgInfo( xIsPrinter("LPT5") )
>>
>> SIEMPRE devuelve -1, exista o no el puerto, o esté o no esté lista la
>> impresora conectada en LPT1
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje
>> news:[email=438734b0@ozsrvnegro.ozlan.local...]438734b0@ozsrvnegro.ozlan.local...[/email]
>>
>>>Xevi,
>>>
>>>IsPrinter solo funciona con LPT1 y no acepta parámetros.
>>>
>>>Prueba con xIsPrinter("LPTn") y dime se eso te soluciona el problema.
>>>
>>>Saludos,
>>>José Luis Capel
>>>
>>>Xevi escribió:
>>>
>>>>Jose,
>>>> IsPrinter() no me funciona... o no se hacerlo funcionar !!!
>>>> En un ordenador con puerto LPT1, y una impresora conectada y
>>>>encendida...
>>>>MsgInfo( IsPrinter( "LPT1" ) )
>>>>MsgInfo( IsPrinter( "LPT2" ) )
>>>>MsgInfo( IsPrinter( "LPT3" ) )
>>>>MsgInfo( IsPrinter( "LPT1:" ) )
>>>>MsgInfo( IsPrinter( "LPT2:" ) )
>>>>MsgInfo( IsPrinter( "LPT3:" ) )
>>>>La respuesta es SIEMPRE la misma F.
>>>>¿Hago algo mal???
>>>> y otra consulta sobre imprimir e interceptar el error...
>>>> En Clipper existí­a el objeto oError, que podí­amos "interceptar" e
>>>>incluso "modificar" en el prg... ErrorSys.prg.
>>>>¿Cómo podemos interceptar los errores en Xailer/xHarbour???
>>>>Ya que si mando a imprimir
>>>>SET DEVICE TO PRINTER
>>>>SET PRINTER TO LPT5
>>>>y el puerto no existe
>>>>me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
>>>>Subsistema: TERM
>>>> Código de error: 2014
>>>> Estado: .T.
>>>> Descripción: Create error
>>>> Operación: LPT5.prn
>>>> Argumentos:
>>>> Fichero:
>>>> Código error SO: 2
>>>> Pila de llamadas:
>>>> SET (0)
>>>> MAIN (17)
>>>> Gracias.
>>>> Un Saludo,
>>>>Xevi.
>>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>>>>mensaje news:[email=4385fe07@ozsrvnegro.ozlan.local...]4385fe07@ozsrvnegro.ozlan.local...[/email]
>>>> >
>>>> > Xevi,
>>>> >
>>>> >> ¿Como compruebo si el puerto LPT1 local está disponible???
>>>> >>
>>>> >> Habrí­a algun Wrapper para puertos LOCALES
>>>> >>
>>>> >> Algo como... WLocalGetConnection
>>>> >>
>>>> >> Se tratarí­a primero de intentar localizar el puerto localmente y si
>>>>no
>>>> >> está disponible intentar localizarlo en la Red.
>>>> >
>>>> > ¿Has probado IsPrinter() en el puerto local? Podrí­as usar
>>>> > WNetGetConnection() para comprobar si es un puerto de red, y si no lo
>>>>es,
>>>> > comprobarlo con IsPrinter(). Yo creo que así­ sí­ deberí­a funcionar
>>>>bien.
>>>> >
>>>> >
>>>> > --
>>>> > Un saludo,
>>>> >
>>>> > José F. Giménez
>>>> >
>>>> >
>>>> >
>>>
>>
>>
>>
>
--

SET PRINTER

Publicado: Vie Nov 25, 2005 6:18 pm
por Xevi
Lo suyo serí­a, según ayuda de xHarbour...
GETPRINTERS
Retrieve a list of available printers.
.. Syntax
GetPrinters() -->
.. Arguments
[<lPorts>] = .T. or .F. ( default .F. )
.. Returns
A List of available printers.
.. Description
This function retrieves a list of available printers.
.. Examples
CLS
?? 'Test program for WINDOWS printing'
? '---------------------------------'
? SET(_SET_DEVICE)
aPrinter:=GetPrinters()
IF EMPTY(aPrinter)
? '----- No Printers installed'
ELSE
set printer to (GetDefaultPrinter())
? SET(_SET_PRINTER)
? SET(_SET_PRINTFILE)
set console off
set printer on
? 'Default Printer'
?'----------------'
? GetDefaultPrinter()
?
? 'Printers Available'
?'-------------------'
FOR x:= 1 TO LEN(aPrinter)
? aPrinter[x]
NEXT x
aPrinter:= GetPrinters(.T.)
? 'Printers and Ports'
?'-------------------'
FOR x:= 1 TO LEN(aPrinter)
? aPrinter[x,1]+' on '+aPrinter[x,2]
NEXT x
EJECT
set printer off
set console on
set printer to
ENDIF
? SET(_SET_PRINTER)
? SET(_SET_DEVICE)
WAIT
return nil
.. Files
source is tprinter.c
Se puede utilizar como parámetro, .T. o .F. por si queremos saber la lista de puertos...
GetPrinters( .T. )
Eso deberí­a devolver un Array con los puertos que tenemos en nuestro Windows...
Bien, pues por lo que veo... GetPrinters() devuelve un Array Vacio!!!
Por lo que respecta a IsPrinter()
ISPRINTER
Determine whether LPT1 is ready
.. Syntax
ISPRINTER() --> lReady
.. Arguments
None
.. Returns
ISPRINTER() returns true (.T.) if LPT1 is ready; otherwise, it returnsfalse (.F.).
.. Description
ISPRINTER() is a printer function that determines whether the parallelport (LPT1) is online and ready to print. ISPRINTER() ishardware-dependent and, therefore, only works on IBM BIOS compatiblesystems.
You can check ISPRINTER() to make sure the printer is ready before youbegin a print operation; however, if an error occurs during the printoperation, a runtime error is generated.
.. Examples
This example tests the parallel port for readiness with up to
25 retries. If the parallel port is ready, the printer operation
begins:
lReady := ISPRINTER()
//
IF lReady
REPORT FORM Sales TO PRINTER
ELSE
? "Printer not ready..."
BREAK
ENDIF
.. Files
Library is rtl.lib, source is isprint.c
Pues desde Xailer... IsPrinter() lanza un GPF
Para que no lanze el GPF, debemos enviar algún parámetro a la Función...
IsPrinter("loquesea")
Pero SIEMPRE devuelve .F.
Si he entendido bien lo que he leí­do,...
Creo que hay problemas con los puertos LPTs y Xailer
Gracias.
Un Saludo,
Xevi.
"José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje news:[email=43873dbe@ozsrvnegro.ozlan.local...]43873dbe@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> Pues me quedo pillado...
>
> He revisado el fuente de xIsprinter y veo que utiliza una función del
> Api de Windows ( OpenPrinter ) que abre un 'handle' a la impresora. Lo
> que no se, mirando el MSDN, es si el nombre de la impresora corresponde
> a "LPTx" o no. A ver si algún experto en la materia puede aclararnos
> algo más esto.
>
> Saludos,
> José Luis Capel
>
>
> Xevi escribió:
>>
>> MsgInfo( xIsPrinter("LPT1") )
>> MsgInfo( xIsPrinter("LPT2") )
>> MsgInfo( xIsPrinter("LPT3") )
>> MsgInfo( xIsPrinter("LPT4") )
>> MsgInfo( xIsPrinter("LPT5") )
>>
>> SIEMPRE devuelve -1, exista o no el puerto, o esté o no esté lista la
>> impresora conectada en LPT1
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "José Luis Capel" <joseluis@iaicom.com> escribió en el mensaje
>> news:[email=438734b0@ozsrvnegro.ozlan.local...]438734b0@ozsrvnegro.ozlan.local...[/email]
>>
>>>Xevi,
>>>
>>>IsPrinter solo funciona con LPT1 y no acepta parámetros.
>>>
>>>Prueba con xIsPrinter("LPTn") y dime se eso te soluciona el problema.
>>>
>>>Saludos,
>>>José Luis Capel
>>>
>>>Xevi escribió:
>>>
>>>>Jose,
>>>> IsPrinter() no me funciona... o no se hacerlo funcionar !!!
>>>> En un ordenador con puerto LPT1, y una impresora conectada y
>>>>encendida...
>>>>MsgInfo( IsPrinter( "LPT1" ) )
>>>>MsgInfo( IsPrinter( "LPT2" ) )
>>>>MsgInfo( IsPrinter( "LPT3" ) )
>>>>MsgInfo( IsPrinter( "LPT1:" ) )
>>>>MsgInfo( IsPrinter( "LPT2:" ) )
>>>>MsgInfo( IsPrinter( "LPT3:" ) )
>>>>La respuesta es SIEMPRE la misma F.
>>>>¿Hago algo mal???
>>>> y otra consulta sobre imprimir e interceptar el error...
>>>> En Clipper existí­a el objeto oError, que podí­amos "interceptar" e
>>>>incluso "modificar" en el prg... ErrorSys.prg.
>>>>¿Cómo podemos interceptar los errores en Xailer/xHarbour???
>>>>Ya que si mando a imprimir
>>>>SET DEVICE TO PRINTER
>>>>SET PRINTER TO LPT5
>>>>y el puerto no existe
>>>>me lanza un error Xailer/xHarbour... y me "saca" de la aplicación
>>>>Subsistema: TERM
>>>> Código de error: 2014
>>>> Estado: .T.
>>>> Descripción: Create error
>>>> Operación: LPT5.prn
>>>> Argumentos:
>>>> Fichero:
>>>> Código error SO: 2
>>>> Pila de llamadas:
>>>> SET (0)
>>>> MAIN (17)
>>>> Gracias.
>>>> Un Saludo,
>>>>Xevi.
>>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>>>>mensaje news:[email=4385fe07@ozsrvnegro.ozlan.local...]4385fe07@ozsrvnegro.ozlan.local...[/email]
>>>> >
>>>> > Xevi,
>>>> >
>>>> >> ¿Como compruebo si el puerto LPT1 local está disponible???
>>>> >>
>>>> >> Habrí­a algun Wrapper para puertos LOCALES
>>>> >>
>>>> >> Algo como... WLocalGetConnection
>>>> >>
>>>> >> Se tratarí­a primero de intentar localizar el puerto localmente y si
>>>>no
>>>> >> está disponible intentar localizarlo en la Red.
>>>> >
>>>> > ¿Has probado IsPrinter() en el puerto local? Podrí­as usar
>>>> > WNetGetConnection() para comprobar si es un puerto de red, y si no lo
>>>>es,
>>>> > comprobarlo con IsPrinter(). Yo creo que así­ sí­ deberí­a funcionar
>>>>bien.
>>>> >
>>>> >
>>>> > --
>>>> > Un saludo,
>>>> >
>>>> > José F. Giménez
>>>> >
>>>> >
>>>> >
>>>
>>
>>
>>
>
--

SET PRINTER

Publicado: Vie Nov 25, 2005 6:19 pm
por joseluis
Xevi,
>
> Pues desde Xailer... IsPrinter() lanza un GPF
> Para que no lanze el GPF, debemos enviar algún parámetro a la Función...
> IsPrinter("loquesea")
> Pero SIEMPRE devuelve .F.
>
> Si he entendido bien lo que he leí­do,...
> Creo que hay problemas con los puertos LPTs y Xailer
>
El problema es de xharbour.
Serí­a interesante reportar ese fallo en la news de xharbour.
Saludos,
José Luis Capel

SET PRINTER

Publicado: Vie Nov 25, 2005 6:30 pm
por jfgimenez
Xevi,
Si he entendido bien lo que he leí­do,...
Creo que hay problemas con los puertos LPTs y Xailer
En realida el problema no es de Xailer ni de xHarbour. Simplemente, que con windows no se trabaja con los puertos directamente, sino con los dispositivos (en este caso impresoras) que tenga instalados.
Por eso te decí­a yo el otro dí­a que es mejor hacerlo a la windows, no a la MS-DOS. Utiliza la clase TPrinter (o mejor dicho, el objeto público Printer) para imprimir. Y en el caso de que necesites enviar a la impresora la secuencia de caracteres directamente, sin que los procese el driver, puedes usar el método WriteData().
--
Un saludo,
José F. Giménez
--