Обслуживание устройств

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.

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

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

Эта функция использует двунаправленное взаимодействие (Bidi), чтобы разрешить отправлять команды обслуживания устройств из приложения устройства UWP или расширения принтера в подсистему печати. Например, можно отправить команды на устройство печати для очистки насадок рукописного ввода.

Монитор портов работает в сочетании с файлами расширения Bidi, предоставляемыми поставщиком, для перевода этих запросов Bidi в команды для устройства и протокола, а затем передает их на устройство печати. Задача обслуживания устройства выполняется путем отправки запросов Bidi Set на устройство печати, а ответ Bidi от устройства указывает, выполнена ли операция успешно или не выполнена.

Новый асинхронный интерфейс, который помогает реализовать эту функцию, принимает данные XML в виде строкового параметра и объекта обратного вызова.

Так как интерфейс является асинхронным, вызывающий объект не должен ждать ответа. После завершения операции Bidi вызывается объект обратного вызова.

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

В Windows (с именем Blue) появились следующие интерфейсы для реализации функции обслуживания устройств.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2

Инициирование сеанса обслуживания устройства

Чтобы инициировать сеанс обслуживания устройства, сначала необходимо создать командную строку в виде XML-данных. Затем необходимо создать экземпляр объекта обратного вызова, который будет вызываться после завершения асинхронной операции Bidi.

После завершения операции объект обратного вызова вызывается в методе IPrinterBidiSetRequestCallback::Completed и предоставляет значение HRESULT операции. Затем можно проанализировать это значение HRESULT и выполнить другие необходимые задачи.

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

//
// Declare a global constant that will be used
// to determine whether method calls were successful
//
const int S_OK = 0;
 
class BidiSendAsyncDemo
{
    //
    // Create a queue object and also
    // create the command string
    //
    void PerformDeviceMaintenance(
        IPrinterQueue2 queue,
        string bidiRequestInXml
        )
    {
        BidiSetResultCallback callBack = new BidiSetResultCallback();

        IPrinterExtensionAsyncOperation asyncOperation =
          queue.SendBidiSetRequestAsync(bidiRequestInXml, callBack);
    }
}

/// <summary>
/// This class represents the callback object
/// </summary>
public class BidiSetResultCallback :
    IPrinterBidiSetRequestCallback
{
    void Completed(
        string bidiResponse,
        int hr
        )
    {
        if (S_OK == hr)
        {
            // parse and interpret 'bidiResponse'
        }
    }
} 

Обслуживание устройств поддерживается в приложениях устройств UWP после вызова приложения с помощью любой из трех точек входа.

IPrinterBidiSetRequestCallback

IPrinterExtensionAsyncOperation

IPrinterQueue2