Compartilhar via


Gerenciamento de trabalho

Importante

A plataforma de impressão moderna é o meio preferencial do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.

Para obter mais informações, consulte Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.

Um recurso de gerenciamento de trabalhos foi introduzido no Windows 8.1 e versões posteriores do Windows para fornecer uma exibição dinâmica da fila de trabalhos.

Esse recurso também permite que um cliente cancele um trabalho de impressão. Um cliente pode chamar a interface de programação apropriada de dentro de um aplicativo de dispositivo UWP ou de uma extensão de impressora.

As novas interfaces

As interfaces a seguir foram introduzidas no Windows 8.1 para implementar o recurso de gerenciamento de trabalhos.

IPrinterQueue2

IPrinterQueueView

IPrinterQueueViewEvent

IPrintJob

IPrintJobCollection

Iniciando uma sessão de gerenciamento de tarefas

Para iniciar uma sessão de gerenciamento de tarefas, você deve primeiro especificar e solicitar um intervalo de tarefas que deseja gerenciar. Esse intervalo de trabalhos é chamado de "exibição" e você usa o método IPrinterQueue2::GetPrinterQueueView para especificá-lo.

Se você quiser alterar o modo de exibição para monitorar um conjunto diferente de trabalhos, poderá usar o método IPrinterQueueView::SetViewRange para fazer isso.

Observe que a fila de impressão é uma fila dinâmica. Portanto, cada vez que o status da fila de impressão é alterado, um evento é disparado e o método IPrinterQueueViewEvent::OnChanged fornece um instantâneo atualizado da exibição que foi solicitada.

O trecho de código C# a seguir ilustra o uso das novas interfaces para iniciar uma sessão de gerenciamento de trabalhos.

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 é usado como um nome genérico para o mecanismo que você desenvolve para exibir as informações ao usuário.

Além disso, observe que a enumeração de trabalho começa quando o primeiro manipulador de eventos é adicionado e é interrompida quando o último manipulador de eventos é removido.

IPrinterQueue2

IPrinterQueueView

IPrinterQueueViewEvent

IPrintJob

IPrintJobCollection