FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Redirecci贸n de impresion en Terminal Server
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Redirecci贸n de impresion en Terminal Server
Posted: Fri May 27, 2016 07: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 (fw): Select all Collapse
#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.
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: Fri May 27, 2016 08: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 (fw): Select all Collapse
Left(aListImpresora[i], Len(cNombreImpresora)) == cNombreImpresora


Espero te sirva.
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: Fri May 27, 2016 09: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
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: 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

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: 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

Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: Wed Jun 01, 2016 06: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 (fw): Select all Collapse
聽 聽...
聽 聽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 (fw): Select all Collapse
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
Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: Wed Jun 01, 2016 07: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

Posts: 203
Joined: Tue Oct 11, 2005 02:17 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: Wed Jun 01, 2016 07: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

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Redirecci贸n de impresion en Terminal Server
Posted: Wed Jun 01, 2016 07: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 (fw): Select all Collapse
// 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

Continue the discussion