Обслуживание устройств
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
Функция обслуживания устройств появилась в Windows 8.1 и более поздних версиях Windows.
Эта функция использует двунаправленное взаимодействие (Bidi), чтобы разрешить отправлять команды обслуживания устройств из приложения устройства UWP или расширения принтера в подсистему печати. Например, можно отправить команды на устройство печати для очистки насадок рукописного ввода.
Монитор портов работает в сочетании с файлами расширения Bidi, предоставляемыми поставщиком, для перевода этих запросов Bidi в команды для устройства и протокола, а затем передает их на устройство печати. Задача обслуживания устройства выполняется путем отправки запросов Bidi Set на устройство печати, а ответ Bidi от устройства указывает, выполнена ли операция успешно или не выполнена.
Новый асинхронный интерфейс, который помогает реализовать эту функцию, принимает данные XML в виде строкового параметра и объекта обратного вызова.
Так как интерфейс является асинхронным, вызывающий объект не должен ждать ответа. После завершения операции Bidi вызывается объект обратного вызова.
Новые интерфейсы
В Windows (с именем Blue) появились следующие интерфейсы для реализации функции обслуживания устройств.
IPrinterBidiSetRequestCallback
IPrinterExtensionAsyncOperation
Инициирование сеанса обслуживания устройства
Чтобы инициировать сеанс обслуживания устройства, сначала необходимо создать командную строку в виде 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