Redirección de impresion en Terminal Server

Redirección de impresion en Terminal Server

Postby miarcod » Fri May 27, 2016 7:21 am

¿Alguien sabe como es puede obtener el número de sesion en una conexión de terminal Server?

Me explico:

Al conectarse via remota a una sesion de terminal server, las impresoras locales se redireccionan con el nombre IMPRESORA XX en la sesión 1, IMPRESORA XX en la sesión 2, etc.

El caso es que si trato de establecer una impresora predeterminada para una acción de programa a una impresora redireccionada si el orden de conexión no es el mismo la impresión no funciona.

Lo que pretendo es saber cual es el número de la sesión y reemplazar el valor de la sesión actual para la impresora, es decir, si la sesión con la que estoy conectado es la numero 5 (p.e.) sustituiría la impresora predeterminada por IMPRESORA XX en la sesión 5


He probado en el siguiente ejemplo, pero no obtengo en número de la sesión, solo puedo saber que la sesión es una sesión de teriminal server

Code: Select all  Expand view  RUN


#define SM_REMOTESESSION     4096

IF GetSysMetrics( SM_REMOTESESSION ) <> 0
 MsgAlert("SI ES TS Session " + NTRIM(GetSysMetrics( SM_REMOTESESSION )) )
Else
 MsgAlert("NO ES TS Session")
endif

 




Gracias.
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Redirección de impresion en Terminal Server

Postby hmpaquito » Fri May 27, 2016 8:09 am

Hola,


Lo que yo hice fue buscar cNombreImpresora en la lista de impresoras del sistema, pero la comparacion en la busqueda era asi:

Code: Select all  Expand view  RUN
Left(aListImpresora[i], Len(cNombreImpresora)) == cNombreImpresora
 


Espero te sirva.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Redirección de impresion en Terminal Server

Postby cnavarro » Fri May 27, 2016 9:29 am

Intenta lo siguiente

Ejecuta bajo consola el comando

query session /server:IP-Servidor > file

y analiza el fichero

Creo que las sesiones con rdp-tcp# son remotas y el ID el número de sesión
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Redirección de impresion en Terminal Server

Postby miarcod » Fri May 27, 2016 11:11 am

Gracias por la respuesta,

lo que pretenco es hacer lo que dice hmpaquito pero el problema es que si dos usuarios se conectan simultaneamente al mismo servidor, no puedo saber cual de las impresoras tengo que utilizar puesto que me encuentro la misma impresora en la sesion 1 y en la sesion 2

IMPRESORA XXX en la sesión 1
IMPRESORA XXX en la sesión 2
etc.

Voy a investigar si puedo obtener la información con la orden QUERY SESSION

Un saludo
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Redirección de impresion en Terminal Server

Postby hmpaquito » Fri May 27, 2016 11:38 am

miarcod,

Pues a mi me funcionó así.

Lo que no sé si el técnico que instaló las impresoras, las instaló de manera local a cada usuario.

En todo caso considera que instalar todas las impresoras para todos los usuarios formará una lista de impresoras realmente grande.

Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Redirección de impresion en Terminal Server

Postby miarcod » Wed Jun 01, 2016 6:20 pm

bueno ya he conseguido saber en que sesión me encuentro, a través de la orden query session

El problema ahora es que al establecer la impresora no me hace caso, y la impresión la envia a la impresora por defecto.

He intentado establecerla como impresora por defecto pero no me la cambia

¿Alguna idea de porque no funciona la orden SetPrintDefault() una sesión remota?

hago esto
Code: Select all  Expand view  RUN

   ...
   cOldPrinter := GetDefaultPrinter()
   SetPrintDefault(cPrinter)
   sysrefresh()
   msginfo("Cambio impresora por defecto a : " + cprinter)
   msginfo("Impresora por defecto: " + GetDefaultPrinter() )
   ....


   PRINT DOPRN NAME DTITUINFI + " - " + cPrinter TO cPrinter PREVIEW
   ...
 


pero no me la cambia,
Esto solo me ocurre con una sesión remota por TS contra una maquina con W7

Sin embargo si hago

Code: Select all  Expand view  RUN

PRINT DOPRN NAME DTITUINFI FROM USER PREVIEW
 


Si la envia a la impresora que selecciono
Lo que pretendo es poder decidir yo a que impresora quiero dirigir la impresión sin necesidad de seleccionar la impresora en cada impresión



gracias de nuevo
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Redirección de impresion en Terminal Server

Postby miarcod » Wed Jun 01, 2016 7:37 pm

Hola de nuevo

Investigando me dado cuenta que cuando se establece la impresora por defecto el valor se guarda en la clave HKCURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows

Pero la impresora por defecto en la sesion remota está en otra clave

[HKCURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices\S-1-5-5-0-213802]

Lo que pasa es que el valor final de la ruta S-1-5-5-0-213802 varia en cada sesión

¿alguna idea?

gracias
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Redirección de impresion en Terminal Server

Postby miarcod » Wed Jun 01, 2016 7:37 pm

Hola de nuevo

Investigando me dado cuenta que cuando se establece la impresora por defecto el valor se guarda en la clave del registro
HKCURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows

Pero la impresora por defecto en la sesion remota está en otra clave
[HKCURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices\S-1-5-5-0-213802]

Lo que pasa es que el valor final de la ruta p.e. S-1-5-5-0-213802 varia en cada sesión

¿alguna idea?

gracias
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Redirección de impresion en Terminal Server

Postby Antonio Linares » Wed Jun 01, 2016 7:59 pm

Que otras claves hay en HKCURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices ?

Puedes obtenerlas todas usando RegEnumKey(). Aqui tienes un ejemplo de uso:

Code: Select all  Expand view  RUN
// Retrieving all printers info from the registry

#define  HKEY_LOCAL_MACHINE      2147483650

function Main()

   local nHandle, cValue, n := 0

   if RegOpenKey( HKEY_LOCAL_MACHINE,;
         "System\CurrentControlSet\Control\Print\Printers", @nHandle ) == 0
      while RegEnumKey( nHandle, n++, @cValue ) == 0
         MsgInfo( cValue )
      end
      RegCloseKey( nHandle )
   else
      MsgInfo( "can't access it" ) 
   endif

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: richard-service and 44 guests