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 |