Поделиться через


Управление заданиями

Важно!

Мы рекомендуем использовать драйвер microsoft IPP класса "Входящие" вместе с приложениями поддержки печати (PSA) для настройки печати в Windows 10 и 11 для разработки принтеров.

Дополнительные сведения см. в руководстве по проектированию приложений поддержки печати.

Функция управления заданиями появилась в Windows 8.1 и более поздних версиях Windows, чтобы обеспечить динамическое представление очереди заданий.

Эта функция также позволяет клиенту отменить задание печати. Клиент может вызывать соответствующий программный интерфейс из приложения устройства UWP или из расширения принтера.

Новые интерфейсы

Следующие интерфейсы были представлены в Windows 8.1 для реализации функции управления заданиями.

IPrinterQueue2

IPrinterQueueView

IPrinterQueueViewEvent

IPrintJob

IPrintJobCollection

Инициализация сеанса управления заданиями

Чтобы инициировать сеанс управления заданиями, необходимо сначала указать и запросить диапазон заданий, которыми вы хотите управлять. Этот диапазон заданий называется представлением, и для его указания используется метод IPrinterQueue2::GetPrinterQueueView .

Если вы хотите изменить представление для мониторинга другого набора заданий, для этого можно использовать метод IPrinterQueueView::SetViewRange .

Обратите внимание, что очередь печати является динамической очередью. Поэтому при каждом изменении состояния очереди печати запускается событие , а метод IPrinterQueueViewEvent::OnChanged предоставляет обновленный snapshot запрошенного представления.

В следующем фрагменте кода C# показано использование новых интерфейсов для инициации сеанса управления заданиями.

void PerformJobManagement(IPrinterQueue2 queue)
{
    //
    // Create a printer queue view and specify the range of
    // print queue positions to be monitored
    //

    PrinterQueueView queueView = queue.GetPrinterQueueView(0, COUNT_JOBS_MONITORED);

    //
    // Add the event handler to the IPrinterQueueView object via the 
    // standard COM event model, the IConnectionPoint mechanism.
    //

    queueView.OnChanged += queueView_OnChanged;


    //
    // When a different range of print jobs needs to be monitored, 
    // reset/update the view.
    //

    queueView.SetViewRange(20, COUNT_JOBS_MONITORED);

}

//
// Create an event handler that is called when
// there is a change in the View
//
void queueView_OnChanged(
    IPrintJobCollection pcollection,
    uint ulviewOffset,
    uint ulviewSize,
    uint ulcountJobsInPrintQueue)
{
    foreach (IPrintJob job in pCollection)
    {
        UIDisplay(job.Name);
        UIDisplay(job.Id);
    }
}

UIDisplay используется универсальное имя для механизма, который вы разрабатываете для отображения информации пользователю.

Кроме того, обратите внимание, что перечисление заданий начинается при добавлении первого обработчика событий и останавливается при удалении последнего обработчика событий.

IPrinterQueue2

IPrinterQueueView

IPrinterQueueViewEvent

IPrintJob

IPrintJobCollection