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


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

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" 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 предоставляет обновленный моментальный снимок запрошенного представления.

В следующем фрагменте кода 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