Практическое руководство. Клонирование принтера
Большинство компаний рано или поздно купит нескольких принтеров той же модели. Как правило они все устанавливаются с практически одинаковыми параметрами. Установка каждого принтера может занимать много времени и подвержено ошибкам. System.Printing.IndexedProperties Пространства имен и InstallPrintQueue класс, который предоставляется через Microsoft .NET Framework дает возможность мгновенно установить любое число дополнительных очередей печати, которые копируются из существующей очереди печати.
Пример
В следующем примере второй очереди печати клонируется из существующей очереди печати. Второй отличающимся от первого только в его имя, расположение, порт и состояние общего доступа. Ниже приведены основные действия для этого.
Создание PrintQueue объект для существующего принтера, который нужно клонировать.
Создание PrintPropertyDictionary из PropertiesCollection из PrintQueue. Value Каждой записи в этом словаре является объектом одного из типов, производных от PrintProperty. Существует два способа установки значения объекта, содержащегося в данном словаре.
Использование словаря удалить и Add методов, чтобы удалить запись, а затем добавьте его повторно с требуемым значением.
Использование словаря SetProperty метод.
В приведенном ниже примере показаны оба способа.
Создание PrintBooleanProperty и задайте его Name для «IsShared» и его Value для
true
.Используйте PrintBooleanProperty объект значение PrintPropertyDictionaryв записи «IsShared».
Создание PrintStringProperty и задайте его Name для «ShareName» и его Value — соответствующую String.
Используйте PrintStringProperty объект значение PrintPropertyDictionaryв записи «Ресурс».
Создайте другой PrintStringProperty и задайте его Name «Расположение» и его Value — соответствующую String.
Используйте второй PrintStringProperty объект значение PrintPropertyDictionaryв записи «Местоположение».
Создайте массив Strings. Каждый элемент является имя порта на сервере.
Используйте InstallPrintQueue для установки нового принтера с новыми значениями.
Пример приведен ниже.
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();