Detectar impresoras instaladas

03/09/2005 - 21:12 por luis a | Informe spam
Amigos, necesito detectar mediante codigo las impresoras
instaladas y guardar el nombre de cada una.

Gracias

luis

Preguntas similare

Leer las respuestas

#1 KL
03/09/2005 - 21:40 | Informe spam
Hola Luis,

Revisa este hilo: http://tinyurl.com/bpjel

Saludos,
KL


"luis a" wrote in message
news:025a01c5b0bb$67422c10$
Amigos, necesito detectar mediante codigo las impresoras
instaladas y guardar el nombre de cada una.

Gracias

luis
Respuesta Responder a este mensaje
#2 luis a
04/09/2005 - 01:36 | Informe spam
KL, efectivo!! gracias ahora probare como asignar una
impresora como la impresora activa.

luis

Hola Luis,

Revisa este hilo: http://tinyurl.com/bpjel

Saludos,
KL


"luis a" wrote in


message
news:025a01c5b0bb$67422c10$
Amigos, necesito detectar mediante codigo las impresoras
instaladas y guardar el nombre de cada una.

Gracias

luis




.

Respuesta Responder a este mensaje
#3 Héctor Miguel
04/09/2005 - 03:03 | Informe spam
hola, chicos !

... ahora probare como asignar una impresora como la impresora activa.



si estas desarrolando una aplicacion que habra de ejecutarse en diversas 'plataformas'...
[versiones, equipos, redes, idiomas, departamentos, etc. etc. etc.]...
si se supone que tu/aplicacion 'desconoce/n' cuantas/cuales impresoras [y donde] estan 'disponibles'...
[preguntas]:
1) ya pensaste como se habra de 'asegurar' tu aplicacion que la impresora re/asignada sea la 'apropiada' ?
[supongo que tendras que 'monitorear' dentro de las disponibles... marca/modelo/puerto/laser/color/etc.] -?-
2) no crees que seria mas sencillo [y menos 'laborioso'] dejar que el usuario del momento seleccione la impresora ?
prueba con una instruccion +/- como: Application.Dialogs(xlDialogPrinterSetup).Show

si [de nuevo] he 'volado mas alla' [de lo 'necesario'] :-(( -no me hagas caso- :DD

saludos,
hector.
Respuesta Responder a este mensaje
#4 luis a
04/09/2005 - 04:14 | Informe spam
Hector, excelente tu idea!! gracias. La aplicacion debe
filtrar datos y enviarlos a tres impresoras distintas al
mismo tiempo: Ademas, estaran varios equipos en red con la
misma aplicacion. Por eso debo asegurarme que sean fijas
las impresoras para cada grupo de datos.

Por eso, al procedimiento econtrado en el hilo que
recomienda KL lo modifique asi: (ya que muestra la lista
en una matriz) para que las muestre una a una en una
columna

(todo en un Modulo estandar)
'Las declaraciones:
Private Declare Function GetProfileString Lib "kernel32" _
Alias "GetProfileStringA" (ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long

'La funcion:
Public Function PrinterFind(Optional Match As String) As
String()
Dim n%, lRet&, sBuf$, sCon$, aPrn$()
Const lLen& = 1024, sKey$ = "devices"

'Split ActivePrinter string to get localized word
for "on"
aPrn = Split(Excel.ActivePrinter)
sCon = " " & aPrn(UBound(aPrn) - 1) & " "

'Read all installed printers (1k bytes s/b enough)
sBuf = Space(lLen)
lRet = GetProfileString(sKey, vbNullString,
vbNullString, sBuf, lLen)
If lRet = 0 Then
Err.Raise vbObjectError + 513, , "Can't read Profile"
Exit Function
End If

'Split buffer string
aPrn = Split(Left(sBuf, lRet - 1), vbNullChar)
'Filter array on Match
If Match <> vbNullString Then aPrn = Filter(aPrn,
Match, -1, 1)

For n = LBound(aPrn) To UBound(aPrn)
'Add 16bit portname for each Printer
sBuf = Space(lLen)
lRet = GetProfileString(sKey, aPrn(n), vbNullString,
sBuf, lLen)
aPrn(n) = aPrn(n) & sCon & _
Mid(sBuf, InStr(sBuf, ",") + 1, lRet - InStr
(sBuf, ","))
Next
'Return the result
PrinterFind = aPrn

End Function

'3 El procedimiento que llama la funcion:
Sub ListaImpresoras()
Dim vaList
Dim Fila As Long
Dim MSG As String
Dim Con, Con1, Con2 As Long
vaList = PrinterFind
MSG = Join(vaList, "~")
Con1 = 1
Con = 1 ' start
Do While Con1 > 0
Con1 = InStr(Con, MSG, "~") 'largo
If Con1 > 0 Then
Hoja1.Range("e" & Hoja1.Range("d1")) = Mid(MSG, Con, Con1 -
Con) ' Left(MSG, Con1 - 1)
Else
Hoja1.Range("e" & Hoja1.Range("d1")) = Mid(MSG, Con, Len
(MSG) - Con + 1) ' Left(MSG, Con1 - 1)
End If
Con = Con1 + 1
Loop
End Sub


Le retire una seccion para impresoras laser porque no lo
necesito.


Gracias de nuevo

luis



hola, chicos !

... ahora probare como asignar una impresora como la




impresora activa.

si estas desarrolando una aplicacion que habra de


ejecutarse en diversas 'plataformas'...
[versiones, equipos, redes, idiomas, departamentos, etc.


etc. etc.]...
si se supone que tu/aplicacion 'desconoce/n'


cuantas/cuales impresoras [y donde] estan 'disponibles'...
[preguntas]:
1) ya pensaste como se habra de 'asegurar' tu aplicacion


que la impresora re/asignada sea la 'apropiada' ?
[supongo que tendras que 'monitorear' dentro de las


disponibles... marca/modelo/puerto/laser/color/etc.] -?-
2) no crees que seria mas sencillo [y menos 'laborioso']


dejar que el usuario del momento seleccione la impresora ?
prueba con una instruccion +/- como:


Application.Dialogs(xlDialogPrinterSetup).Show

si [de nuevo] he 'volado mas alla' [de lo 'necesario'] :-


(( -no me hagas caso- :DD

saludos,
hector.


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida