Cómo: Clonar una impresora
En algún momento, la mayoría de las empresas adquirirán varias impresoras del mismo modelo. Normalmente, todas ellas se instalan con valores de configuración prácticamente idénticos. La instalación de cada impresora puede llevar mucho tiempo y ser propensa a errores. El espacio de nombres System.Printing.IndexedProperties y la clase InstallPrintQueue que se exponen con Microsoft .NET Framework permiten instalar en un abrir y cerrar de ojos cualquier número de colas de impresión adicionales clonadas de una cola de impresión existente.
Ejemplo
En el ejemplo siguiente, se clona una segunda cola de impresión de una cola de impresión existente. La segunda difiere de la primera solamente en el nombre, la ubicación, el puerto y el estado compartido. Estos son los pasos fundamentales para hacerlo.
Cree un objeto PrintQueue para la impresora existente que se va a clonar.
Cree un objeto PrintPropertyDictionary a partir del elemento PropertiesCollection de PrintQueue. La propiedad Value de cada entrada de este diccionario es un objeto de uno de los tipos derivados de PrintProperty. Existen dos formas de establecer el valor de una entrada en este diccionario.
Usar los métodos Remove y Add del diccionario para quitar la entrada y, a continuación, volver a agregarla con el valor deseado.
Usar el método SetProperty del diccionario.
En el ejemplo siguiente se muestran ambos métodos.
Cree un objeto PrintBooleanProperty y establezca su propiedad Name en "IsShared" y su propiedad Value en
true
.Use el objeto PrintBooleanProperty de forma que sea el valor de la entrada "IsShared" de PrintPropertyDictionary.
Cree un objeto PrintStringProperty y establezca su propiedad Name en "ShareName" y su propiedad Value en un valor de String adecuado.
Use el objeto PrintStringProperty de forma que sea el valor de la entrada "ShareName" de PrintPropertyDictionary.
Cree otro objeto PrintStringProperty y establezca su propiedad Name en "Location" y su propiedad Value en un valor de String adecuado.
Use el segundo objeto PrintStringProperty de forma que sea el valor de la entrada "Location" PrintPropertyDictionary.
Cree una matriz de elementos String. Cada elemento es el nombre de un puerto en el servidor.
Use InstallPrintQueue para instalar la nueva impresora con los nuevos valores.
A continuación se muestra un ejemplo:
LocalPrintServer myLocalPrintServer = new LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer);
PrintQueue sourcePrintQueue = myLocalPrintServer.DefaultPrintQueue;
PrintPropertyDictionary myPrintProperties = sourcePrintQueue.PropertiesCollection;
// Share the new printer using Remove/Add methods
PrintBooleanProperty shared = new PrintBooleanProperty("IsShared", true);
myPrintProperties.Remove("IsShared");
myPrintProperties.Add("IsShared", shared);
// Give the new printer its share name using SetProperty method
PrintStringProperty theShareName = new PrintStringProperty("ShareName", "\"Son of " + sourcePrintQueue.Name +"\"");
myPrintProperties.SetProperty("ShareName", theShareName);
// Specify the physical location of the new printer using Remove/Add methods
PrintStringProperty theLocation = new PrintStringProperty("Location", "the supply room");
myPrintProperties.Remove("Location");
myPrintProperties.Add("Location", theLocation);
// Specify the port for the new printer
String[] port = new String[] { "COM1:" };
// Install the new printer on the local print server
PrintQueue clonedPrinter = myLocalPrintServer.InstallPrintQueue("My clone of " + sourcePrintQueue.Name, "Xerox WCP 35 PS", port, "WinPrint", myPrintProperties);
myLocalPrintServer.Commit();
// Report outcome
Console.WriteLine("{0} in {1} has been installed and shared as {2}", clonedPrinter.Name, clonedPrinter.Location, clonedPrinter.ShareName);
Console.WriteLine("Press Return to continue ...");
Console.ReadLine();
Dim myLocalPrintServer As New LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer)
Dim sourcePrintQueue As PrintQueue = myLocalPrintServer.DefaultPrintQueue
Dim myPrintProperties As PrintPropertyDictionary = sourcePrintQueue.PropertiesCollection
' Share the new printer using Remove/Add methods
Dim [shared] As New PrintBooleanProperty("IsShared", True)
myPrintProperties.Remove("IsShared")
myPrintProperties.Add("IsShared", [shared])
' Give the new printer its share name using SetProperty method
Dim theShareName As New PrintStringProperty("ShareName", """Son of " & sourcePrintQueue.Name & """")
myPrintProperties.SetProperty("ShareName", theShareName)
' Specify the physical location of the new printer using Remove/Add methods
Dim theLocation As New PrintStringProperty("Location", "the supply room")
myPrintProperties.Remove("Location")
myPrintProperties.Add("Location", theLocation)
' Specify the port for the new printer
Dim port() As String = { "COM1:" }
' Install the new printer on the local print server
Dim clonedPrinter As PrintQueue = myLocalPrintServer.InstallPrintQueue("My clone of " & sourcePrintQueue.Name, "Xerox WCP 35 PS", port, "WinPrint", myPrintProperties)
myLocalPrintServer.Commit()
' Report outcome
Console.WriteLine("{0} in {1} has been installed and shared as {2}", clonedPrinter.Name, clonedPrinter.Location, clonedPrinter.ShareName)
Console.WriteLine("Press Return to continue ...")
Console.ReadLine()
Vea también
.NET Desktop feedback