Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/03/2006, 10:43
robsergar
 
Fecha de Ingreso: junio-2003
Mensajes: 37
Antigüedad: 21 años, 5 meses
Puntos: 0
Solución al problema

Bueno, aunque sea me contesto yo mismo, aunque no es algo aconsejable !!!

Aca va la solución:


'las dos lineas siguientes hay que pegarlas en un modulo (.bas)
Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lparam As String) As Long

'En el formulario

Sub Main()
If Command$ = "" Then

For Each Prt In Printers
Set Printer = Prt
m$ = m$ + vbCrLf + Printer.DeviceName
Next

MsgBox "Para cambiar la impresora determinada, pase un parametro al programa con una única cadena como las mostradas (atención con las mayusculas/minusculas) :" + _
vbCrLf + m$, 64, "ImpDefaut"
Else
For Each Prt In Printers
If InStr(Prt.DeviceName, Command$) > 0 Then Set Printer = Prt: Exit For
Next

r = WriteProfileString("windows", "Device", Printer.DeviceName + "," + Printer.DriverName + "," + Printer.Port)
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows")
End If


'Este código agregarlo a un boton del formulario

'El comando SET PRINTER sirve unicamente para la impresión con el objeto PRINTER
'Set Printer = Printers(n)

'Estas son las impresoras instaladas en mi computadora
' 2 -->> \\server\HP1010
' 3 -->> \\SERVER\CITIZENREMIT
' 4 -->> \\SERVER\CITIZENFACT
' 5 -->> \\LETICIA\EPSON

' ojo !!!! --->>>>> En tu PC los nombres de las impresoras son diferentes, chequealo !!!!


' LA IMPRESORA POR DEFECTO EN MI XP/SP2 ES LA HP1010

'----------------------------- cambio como predeterminada a una epson lx810 de la computadora LETICIA

di = WriteProfileString("WINDOWS", "DEVICE", "\\LETICIA\EPSON,winspool,Ne05")
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "windows")

'cierro el recordset si esta abierto
If datos.rsivcompras_mes_year.State = 1 Then
datos.rsivcompras_mes_year.Close
End If

' Genero el recordset
datos.ivcompras_mes_year 1, 2005
datos.rsivcompras_mes_year.MoveFirst

'preparo el datareport
rpt_ivc.Sections("encabezado").Controls("mes").Cap tion = "Enero"
rpt_ivc.Sections("encabezado").Controls("anio").Ca ption = "2005"

'cambio la orientación el papel a apaisado
rpt_ivc.Orientation = rptOrientLandscape
rpt_ivc.PrintReport False

'----------------------------- cambio como predeterminada a una Laserjet HP 1010 de la computadora SERVER

di = WriteProfileString("WINDOWS", "DEVICE", "\\SERVER\HP1010,winspool,Ne03:")
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "windows")

datos.rsivcompras_mes_year.MoveFirst
rpt_ivc.PrintReport False

'----------------------------- cambio como predeterminada a una epson lx810 de la computadora LETICIA

di = WriteProfileString("WINDOWS", "DEVICE", "\\LETICIA\EPSON,winspool,Ne05")
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "windows")

datos.rsivcompras_mes_year.MoveFirst
rpt_ivc.PrintReport False

'----------------------------- cambio como predeterminada a una Laserjet HP 1010 de la computadora SERVER

di = WriteProfileString("WINDOWS", "DEVICE", "\\SERVER\HP1010,winspool,Ne03:")
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "windows")

datos.rsivcompras_mes_year.MoveFirst
rpt_ivc.PrintReport False

'Como ven, hago 2 listados en cada impresora, y me queda activada como predeterminada la HP1010

Pedido: Estuve buscando esta solución por internet durante una semana, buscando la solución en Yahoo! y Google en español, italiano y Frances,
que fue donde finalmente encontre parte de este código.
al que le sirva esto, por favor ponga una nueva respuesta en este misma página.

Saludos a todos!
__________________
Sergio Garcia
Bahia Blanca
Argentina