Практическое руководство. Клонирование принтера

Большинство организаций в некоторых случаях покупают несколько принтеров одинаковой модели. Как правило, они все вместе устанавливаются с практически одинаковыми параметрами. Установка каждого принтера по отдельности занимает много времени, кроме того, увеличивается вероятность ошибок. Пространство имен System.Printing.IndexedProperties и класс InstallPrintQueue, которые предоставляются с Microsoft .NET Framework, дают возможность мгновенно установить любое число дополнительных очередей печати клонированием существующей очереди печати.

Пример

В приведенном ниже примере вторая очередь печати клонируется из существующей очереди печати. Вторая очередь отличается от первой только именем, расположением, портом и статусом общего доступа. Ниже приведены основные действия по созданию копии очереди печати.

  1. Создайте объект PrintQueue для существующего принтера, который подлежит клонированию.

  2. Создайте словарь PrintPropertyDictionary из коллекции PropertiesCollection класса PrintQueue. Свойство Value каждой записи в этом словаре является объектом одного из типов, производных от PrintProperty. Существует два способа задать значение записи в этом словаре:

    • использование методов словаря Remove и Add для удаления записи и повторного добавления ее с измененным значением,

    • использование метода словаря SetProperty.

    В примере ниже показаны оба способа.

  3. Создайте объект PrintBooleanProperty и задайте для его свойства Name значение IsShared, а для свойства Value — значение true.

  4. Используйте объект PrintBooleanProperty в качестве значения записи IsShared элемента PrintPropertyDictionary.

  5. Создайте объект PrintStringProperty и задайте для его свойства Name значение ShareName, а для свойства Value — соответствующую строку String.

  6. Используйте объект PrintStringProperty в качестве значения записи ShareName элемента PrintPropertyDictionary.

  7. Создайте другой объект PrintStringProperty и задайте для его свойства Name значение Location, а для свойства Value — соответствующую строку String.

  8. Используйте второй объект PrintStringProperty в качестве значения записи Location элемента PrintPropertyDictionary.

  9. Создайте массив объектов String. Каждый элемент является именем порта на сервере.

  10. Используйте InstallPrintQueue для установки нового принтера с новыми значениями.

Пример приведен ниже.

                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()
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();

См. также

Ссылки

System.Printing.IndexedProperties

PrintPropertyDictionary

LocalPrintServer

PrintQueue

DictionaryEntry

Основные понятия

Документы в WPF

Общие сведения о печати