Saludos... esto lo he publicado en el foro varias veces...
La forma más facil es seleccionar la impresora destino antes de mandar a impimir...
PrintSetUp()
Yo cuando no quiero la aplicación quede a merced del usuario hago esto..
Buscar y asigar impresora.
/ Obtener la Impresora Default (Listados)
// Existe una tabla llamada 'IMPRESORA'que contiene dos (2) columnas fijas y una opcional si se maneja por estación.:
FUNCION_IMPRESORA = Para que se utiliza: (Primary Key) varchar(12)
ej... listados, laser, facturas, etc...
DIRECCION_IMPRESORA = La dirección fisica de la impresora: varchar(128)
// Nota: a la tabla de impresoras puedes crear una columna que contenga el nombre de la estación y buscar la impresora que corresponda a esa estación....
IMPRESORA.ESTACION= Nombre de la estación de trabajo si se desea: varchar(24)
… ver más adelante…
/*
Con esta función obtengo cual es la impresora asignada por defecto y actualizo el valor del DW
donde actualizo mi lista de impresoras en la tabla 'IMPRESORA'
Este proceso lo hago con todas las impresoras,
es decir asigno una como impresora por defecto y la meto en la tabla, luego asigno otra por defecto
y la meto en la tabla... por supuesto con nombres diferentes (FUNCION_IMPRESORA) y así sucesivamente...
yo hice una ventanita con un boton con esta funcion (Buscar Impresora) para hacer esto.
*/
string printer_default
//BUSCAR EL SISTEMA OPERATIVO Y OBTENER IMPRESORA POR DEFECTO..
CHOOSE CASE env.OSType
CASE Windows!
gs_os="Win_95_98"
// Asignar la Impresora Default
RegistryGet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "default", printer_default)
//MessageBox("Windows sPrinter Asignada", printer_default)
CASE WindowsNT!
gs_os="Win_Nt"
// Asignar la Impresora Default
RegistryGet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device",printer_default )
//MessageBox("Windows NT Printer Asignada", printer_default)
END CASE
dw_impresoras.SetItem(dw_tablas.GetRow(),"direccion_impresora",printer_default)
// Repito ciclo....hasta definir todas las impresoras...
// Este es el formato general para asiganr impresora seleccionada por defecto...
//BUSCAR EL SISTEMA OPERATIVO Y ESTABLECER IMPRESORA POR DEFECTO..
//Para NT (xp; 2000): Asignar la Impresora Default
RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device",printer_default )
// Para todos los windows...
CHOOSE CASE env.OSType
CASE Windows!
gs_os="Win_95_98"
// Asignar la Impresora Default
RegistrySet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "default", printer_default)
//MessageBox("Windows sPrinter Asignada", printer_default)
CASE WindowsNT!
gs_os="Win_Nt"
// Asignar la Impresora Default
RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device",printer_default )
//MessageBox("Windows NT Printer Asignada", printer_default)
END CASE
// Con el manejo de la tabla IMPRESORAS...
// Con esta función busco en la tabla
//y tengo una que es por defecto para toda la aplicación llamada 'DEFAULT' (FUNCION_IMPRESORA)
// Selecciono la que es por defecto para todos los procesos de la aplicación (valor de FUNCION_IMPRESORA='DEFAULT')
string printer_default
//
SELECT IMPRESORA.DIRECCION_IMPRESORA
INTO :printer_default
FROM IMPRESORA
WHERE IMPRESORA.FUNCION_IMPRESORA = 'DEFAULT' ;
//
// o la que necesite para el proceso (dependiendo de como la haya llamado...etc...
//
// WHERE IMPRESORA.FUNCION_IMPRESORA = 'LISTADOS' ;
// aquí puedes agregar otro WHERE si lo manejas por ESTACION..
// AND IMPRESORA.ESTACION=:is_NOMBRE_ESTACION;
// Asignar la Impresora Default que haya buscado...
// Para NT:
// RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device",printer_default )
//
/Para todos lo windows...
CHOOSE CASE env.OSType
CASE Windows!
gs_os="Win_95_98"
// Asignar la Impresora Default
RegistrySet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "default", printer_default)
//MessageBox("Windows sPrinter Asignada", printer_default)
CASE WindowsNT!
gs_os="Win_Nt"
// Asignar la Impresora Default
RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device",printer_default )
//MessageBox("Windows NT Printer Asignada", printer_default)
//
END CHOOSE