Как я использую LocalPrintServer, чтобы предназначаться для определенного принтера? - PullRequest
4 голосов
/ 13 апреля 2011

После этого вопроса: Как получить список или количество заданий из очереди принтера?

Я все еще застрял на том, как настроить таргетинг на конкретный принтер, на котором я сейчас работаюзнать только имя, используя класс LocalPrintServer.Приложение должно печатать на нескольких машинах одновременно, и все принтеры должны контролироваться отдельно.Кто-нибудь может предоставить мне фрагмент кода, который показывает, как я могу создать экземпляр объекта LocalPrintServer, используя только имя принтера?

Заранее спасибо!

Редактировать: Добавлен фрагмент кода решения:

private int GetNumberOfPrintJobs()
{
    LocalPrintServer server = new LocalPrintServer();
    PrintQueueCollection queueCollection = server.GetPrintQueues();
    PrintQueue printQueue = null;

    foreach (PrintQueue pq in queueCollection)
    {
        if (pq.FullName == PrinterName) //PrinterName is a classmember
            printQueue = pq;
    }

    int numberOfJobs = 0;
    if (printQueue != null)
        numberOfJobs = printQueue.NumberOfJobs;

    return numberOfJobs;
}

В конце концов, это было не так сложно!

Ответы [ 2 ]

10 голосов
/ 02 сентября 2011

Важное примечание: GetPrintQueues возвращает не все принтеры, установленные с точки зрения пользователя - только те, которые «принадлежат» локальному серверу.

Как ни странно, LocalPrintServer.DefaultPrintQueue не обязательно содержится в GetPrintQueues(), даже если оно происходит от объекта LocalPrintServer.

Если вы используете System.Drawing.Printing.PrinterSettings.InstalledPrinters, то есть string[], вы получите список всех принтеров, установленных с точки зрения пользователя.

Некоторые из них могут быть на удаленных компьютерах, если вы установили удаленный принтер (на сервере печати). Если это сетевой принтер, доступный по IP, тогда он все равно будет локальным принтером:

"Send To OneNote 2010"  
"Microsoft XPS Document Writer" 
"HP LaserJet P2050 Series PCL6" 
"HP LaserJet 1020"  
"Fax"   
"\\\\ike\\LUCY" 
"\\\\shipping\\HP LaserJet 1020"    

Чтобы получить очередь печати на удаленном сервере, вам нужно сделать:

new PrintServer("\\ike").GetPrintQueue("LUCY")

Да, вам нужно разобрать это самостоятельно.

4 голосов
/ 13 апреля 2011

Попробуйте LocalPrintServer.GetPrintQueue, указав имя принтера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...