Gestione processi

Importante

La piattaforma di stampa moderna è il mezzo preferito di Windows per comunicare con le stampanti. Ti consigliamo di usare il driver di classe 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 per stampanti.

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

Una funzionalità di gestione dei processi è stata introdotta in Windows 8.1 e versioni successive di Windows per fornire una visualizzazione dinamica della coda dei 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 specificare e richiedere un intervallo di processi da gestire. Questo intervallo di processi è denominato "view" e si usa il metodo IPrinterQueue2::GetPrinterQueueView per specificarlo.

Se si desidera 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