Gestione processi

Importante

È consigliabile usare il driver di classe posta in arrivo IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi della stampante.

Per altre informazioni, vedere la guida alla progettazione dell'app di supporto per la stampa.

È stata introdotta una funzionalità di gestione dei processi in Windows 8.1 e versioni successive di Windows per offrire una visualizzazione dinamica della coda di processi.

Questa funzionalità consente anche a un client di annullare un processo di stampa. Un client può chiamare l'interfaccia di programmazione appropriata dall'interno di un'app per dispositivi UWP o da un'estensione della stampante.

Nuove interfacce

Le interfacce seguenti sono state introdotte in Windows 8.1 per implementare la funzionalità di gestione dei processi.

IPrinterQueue2

IPrinterQueueView

IPrinterQueueViewEvent

IPrintJob

IPrintJobCollection

Avvio di una sessione di gestione dei processi

Per avviare una sessione di gestione dei processi, è necessario innanzitutto specificare e richiedere un intervallo di processi che si desidera gestire. Questo intervallo di processi è denominato "view" e si usa il metodo IPrinterQueue2::GetPrinterQueueView per specificarlo.

Se si vuole modificare la visualizzazione per monitorare un set diverso di processi, è possibile usare il metodo IPrinterQueueView::SetViewRange per eseguire questa operazione.

Si noti che la coda di stampa è una coda dinamica. Pertanto, ogni volta che lo stato della coda di stampa cambia, viene generato un evento e il metodo IPrinterQueueViewEvent::OnChanged fornisce uno snapshot aggiornato della visualizzazione richiesta.

Il frammento di codice C# seguente illustra l'uso delle nuove interfacce per avviare una sessione di gestione dei processi.

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 viene usato un nome generico per il meccanismo sviluppato per visualizzare le informazioni all'utente.

Si noti inoltre che l'enumerazione del processo viene avviata quando viene aggiunto il primo gestore eventi e viene arrestata quando viene rimosso l'ultimo gestore eventi.

IPrinterQueue2

IPrinterQueueView

IPrinterQueueViewEvent

IPrintJob

IPrintJobCollection