Fecha actual Mar Abr 16, 2024 3:12 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 5 mensajes ] 
Autor Mensaje
NotaPublicado: Mar Feb 21, 2012 2:21 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Hola, gente de C3.

He estado peleándome con el siguiente problema:
Quería cambiar desde una aplicación C3 la impresora por defecto y buscando por internet descubrí que es un problema muy común en varios entornos de trabajo.... Bueno al final lo solucioné con la siguiente rutinilla:


// ======================================================================================
// SetDefaultPrinter, 21.2.2012 12:58
// ======================================================================================

PROCEDURE SetDefaultPrinter( cNewDefPrinter )

LOCAL cBuffer AS STRING

cBuffer := 'cmd /c RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "' + cNewDefPrinter + '"'

WinExec( cBuffer, SW_HIDE, True )

RETURN

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto: Nueva versión
NotaPublicado: Mar Feb 21, 2012 2:37 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
// ======================================================================================
// SetDefaultPrinter, 21.2.2012 12:58
// ======================================================================================

FUNCTION SetDefaultPrinter( cNewDefPrinter )

LOCAL cExec AS STRING

cExec := GetEnv( "WinDir" ) + '\System32\RUNDLL32.EXE'
IF File( cExec )
cExec += ' PRINTUI.DLL,PrintUIEntry /y /n "' + cNewDefPrinter + '"'
WinExec( cExec, SW_HIDE, True )
RETURN True
ENDIF

RETURN False

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Feb 23, 2012 11:00 am 
Avatar de Usuario

Registrado: Mar Dic 27, 2005 2:58 pm
Mensajes: 77
Simple y eficaz, me gusta, lo guardo, gracias por compartirlo Jesús.

Saludos


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Feb 23, 2012 11:05 am 
Avatar de Usuario

Registrado: Mar Dic 27, 2005 2:58 pm
Mensajes: 77
Voy a completar un poco lo de Jesús, si ponéis en la línea de comandos:

rundll32 printui.dll,PrintUIEntry /?

Obtendréis todas las opciones posibles, saldrá algo parecido a esto:

Código:
Uso: rundll32 printui.dll,PrintUIEntry [opciones] [@archivodecomandos]
   /a[archivo] nombre de archivo binario
   /b[nombre] nombre de la impresora base
   /c[nombre] nombre de equipo UNC si la acción se realiza en un equipo remoto
   /dl eliminar la impresora local
   /dn eliminar la conexión de impresora
   /dd eliminar controlador de impresora
   /e mostrar las preferencias de impresión
   /f[file] es un archivo inf o de salida
   /F[archivo] ubicación de un archivo INF del que puede depender el archivo INF especificado con /f
   /ga agregar conexiones de impresora por máquina (se propagará la sesión al usuario cuando inicie sesión)
   /ge enumerar conexiones de impresora por máquina
   /gd eliminar conexiones de impresora por máquina (se eliminará la conexión cuando el usuario inicie sesión)
   /h[arq] arquitectura del controlador, puede ser x86, x64 o Itanium
   /ia instalar el controlador de impresora con el archivo inf.
   /id instalar el controlador de impresora iniciando el Asistente para agregar controladores de impresora
   /if instalar impresora usando el archivo inf.
   /ii instalar la impresora local mediante el Asistente para agregar impresoras con un archivo inf.
   /il instalar la impresora con el Asistente para agregar impresoras
   /in agregar conexión de impresora de red
   /ip instalar la impresora por medio del Asistente para la instalación de impresoras de red
   /j[proveedor] imprimir el nombre del proveedor
   /k imprimir página de prueba en la impresora especificada, no puede combinarse con un comando al instalar una impresora
   /l[ruta] ruta de acceso de origen del controlador de impresora
   /m[modelo] nombre del modelo de controlador de la impresora
   /n[nombre] nombre de impresora
   /o mostrar la vista de cola de impresora
   /p mostrar las propiedades de la impresora
   /q modo silencioso, no mostrar mensajes de error
   /r[puerto] nombre del puerto
   /s mostrar propiedades del servidor
   /Ss Almacenar la configuración de la impresora en un archivo
   /Sr Restaurar la configuración de la impresora desde un archivo
   Almacenar o restaurar marcas de opciones de configuración de la impresora que se deban colocar al final del comando:
   2   PRINTER_INFO_2
   7   PRINTER_INFO_7
   c   Perfil de colores
   d   Datos de impresora
   s   Descriptor de seguridad
   g   Modo de programación global
   m   Configuración mínima
   u   Modo de programación de usuario
   r   Resolver conflictos de nombres
   f   Forzar nombre
   p   Resolver puerto
   i   Conflicto de nombre de controlador
   /u usar el controlador de impresora existente si está instalado
   /t[#] página de índice basada en cero para iniciar
   /v[versión] versión del controlador, puede ser "Tipo 2: modo kernel" o "Tipo 3: modo usuario"
   /w pedir al usuario un controlador si no se encuentra el controlador especificado en el archivo .inf
   /y establecer impresora como predeterminada
   /Xg obtener la configuración de la impresora
   /Xs establecer la configuración de impresora
   /z no compartir esta impresora automáticamente
   /Y no generar automáticamente un nombre de impresora
   /K cambia el significado de /h para aceptar 2,3,4 en x86, x64 o Itanium y de /v para aceptar 3 en "Tipo 3: modo usuario"
   /Z compartir esta impresora. Puede usarse solamente con la opción /if
   /? ayuda sobre este mensaje
   @[archivo] archivo de argumento de la línea de comandos
   /Mw[mensaje] mostrar un mensaje de confirmación antes de ejecutar el comando
   /Mq[mensaje] mostrar un mensaje de confirmación antes de ejecutar el comando
   &/W[marcas] especifica las marcas y modificadores para los asistentes          (para APW y APDW)
   r   hace que los asistentes se puedan reiniciar desde la última página
   /G[marcas] especifica marcas y modificadores globales
   w   suprime la UI de las advertencias de controladores del programa de instalación (modo silencioso)

Ejemplos:
   Ejecutar las propiedades del servidor:
rundll32 printui.dll,PrintUIEntry /s /t1 /c\\equipo
   Ejecutar las propiedades de la impresora:
rundll32 printui.dll,PrintUIEntry /p /n\\máquina\impresora
   Ejecutar el Asistente para agregar impresoras localmente:
rundll32 printui.dll,PrintUIEntry /il
   Ejecutar el Asistente para agregar impresoras en \\máquina:
rundll32 printui.dll,PrintUIEntry /il /c\\Máquina
   Ejecutar la vista de cola:
rundll32 printui.dll,PrintUIEntry /o /n\\máquina\impresora
   Ejecutar la instalación del archivo .inf:
rundll32 printui.dll,PrintUIEntry /if /b "Impresora de prueba" /f c:\RutaInf\ArchivoInf.inf /r "lpt1:" /m "Brother DCP-128C"
   Ejecutar la instalación del archivo inf (con dependencia de otro archivo inf). En este ejemplo, prnbr002.inf depende de ntprint.inf
rundll32 printui.dll, PrintUIEntry /ia /m "Brother DCP-128C" /K /h x64 /v 3 /f "c:\RutaInf\prnbr002.inf" /F "c:\RutaInf\ntprint.inf"
   Ejecutar el Asistente para agregar impresoras con un archivo .inf:
rundll32 printui.dll,PrintUIEntry /ii /f c:\RutaInf\ArchivoInf.inf
   Agregar impresora con el controlador de impresora de bandeja de entrada:
rundll32 printui.dll,PrintUIEntry /if /b "Impresora de prueba" /r "lpt1:" /m "Brother DCP-128C"
   Agregar conexiones de impresora por máquina (se propagará la sesión al usuario cuando inicie sesión):
rundll32 printui.dll,PrintUIEntry /ga /c\\equipo /n\\equipo \impresora /j"Servicios de impresión LanMan"
   Eliminar conexiones de impresora por máquina (se eliminará la conexión cuando el usuario inicie sesión):
rundll32 printui.dll,PrintUIEntry /gd /c\\equipo /n\\equipo\impresora
   Enumerar conexiones de impresora por máquina:
rundll32 printui.dll,PrintUIEntry /ge /c\\machine
   Agregar un controlador de impresora con un archivo inf:
rundll32 printui.dll,PrintUIEntry /ia /c\\equipo /m "Brother DCP-128C" /h "x86" /v "Tipo 3: modo usuario" /f c:\RutaInf\ArchivoInf.inf
   Agregar un controlador de impresora con un archivo inf:
rundll32 printui.dll,PrintUIEntry /ia /K /c\\equipo /m "Brother DCP-128C" /h "x86" /v 3
   Agregar un controlador de impresora incluido:
rundll32 printui.dll,PrintUIEntry /ia /c\\equipo /m "Brother DCP-128C" /h "Intel" /v "Tipo 3: modo kernel"
   Quitar un controlador de impresora:
rundll32 printui.dll,PrintUIEntry /dd /c\\equipo /m "Brother DCP-128C" /h "x86" /v "Tipo 3: modo usuario"
   Quitar un controlador de impresora:
rundll32 printui.dll,PrintUIEntry /dd /K /c\\equipo /m "Brother DCP-128C" /h "x86" /v 3
   Establecer impresora como predeterminada:
rundll32 printui.dll,PrintUIEntry /y /n "impresora"
   Establecer comentario para la impresora:
rundll32 printui.dll,PrintUIEntry /Xs /n comentario para la "impresora", "Mi impresora"
   Determinar la configuración de la impresora:
rundll32 printui.dll,PrintUIEntry /Xg /n "impresora"
   Obtener los resultados de guardar la configuración de la impresora en un archivo:
rundll32 printui.dll,PrintUIEntry /f "resultados.txt" /Xg /n "impresora"
   Establecer el uso del comando de la configuración de impresora:
rundll32 printui.dll,PrintUIEntry /Xs /n "impresora" ?
   Almacenar la configuración de la impresora en un archivo:
rundll32 printui.dll,PrintUIEntry /Ss /n "impresora" /a "archivo.dat"
   Restaurar la configuración de la impresora desde un archivo:
rundll32 printui.dll,PrintUIEntry/Sr /n "impresora" /a "archivo.dat"
   Almacenar información de la impresora de nivel 2 en un archivo :
rundll32 printui.dll,PrintUIEntry /Ss /n "impresora" /a "archivo.dat" 2
   Restaurar de un descriptor de seguridad de impresora de archivos:
rundll32 printui.dll,PrintUIEntry /Sr /n "impresora" /a "archivo.dat" s
   Restaurar de un modo de desarrollo global de impresora de archivos y de datos de la misma:
rundll32 printui.dll,PrintUIEntry /Sr /n "impresora" /a "archivo.dat" g d
   Restaurar de una configuración de archivo mínima y resolver el nombre de puerto:
rundll32 printui.dll,PrintUIEntry /Sr /n "impresora" /a "archivo.dat" m p
   Habilitar la presentación del lado cliente para una impresora:
rundll32 printui.dll,PrintUIEntry /Xs /n "impresora" ClientSideRender enabled
   Deshabilitar la presentación del lado cliente para una impresora:
rundll32 printui.dll,PrintUIEntry /Xs /n "impresora" ClientSideRender disabled


como podéis ver hay muchas posibilidades.

saludos


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Feb 23, 2012 7:36 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
AlbertoGarcia escribió:
Simple y eficaz, me gusta, lo guardo, gracias por compartirlo Jesús.

Saludos


Hola, Alberto!!!!

El problema se me presentó cuando en uno de mis programas en el que el usuario va guardando distintos archivos: doc, docx, pdf, jpg... quise poner un botón para imprimir sin tener que abrir el archivo. Entonces descubrí que era más complicado de lo que parecía. En esta situación me puse a probar con PRINTER y descubrí que NO se podía, seguí buscando y me encontré con que es un problema común en muchos entornos de trabajo (delphi, vb....). Encontré otra solución pero me resultó más complicada de implantar. Al final me quedé con esta que parece que funciona bien. Al pulsar el usuario el botón le muestro el dialogo para que seleccione la impresora, si acepta, asigno la impresora y listo, restauro la anterior y fin.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 5 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron