Поделиться через


Модули конфигурации подключаемых модулей Unidrv/PScript5

Внимание

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

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

Модули конфигурации драйвера печати XPSDrv, использующие подключаемые модули конфигурации Unidrv или PScript5 в Windows Vista, поддерживают следующие новые возможности:

  • Функции PrintTicket и PrintCapabilities

  • Интерфейс IPrintCoreHelper для управления параметрами Unidrv и PScript5

  • События документа XPSDrv

  • Взаимодействие с фильтрами драйверов печати в конвейере фильтров фильтра

Поддержка интерфейса PrintTicket и PrintCapabilities

Подключаемые модули драйвера печати Unidrv и PScript5 реализуют интерфейс IPrintOemPrintTicketProvider для настройки данных PrintTicket и PrintCapabilities. Методы в этом интерфейсе позволяют подключаемым модулем настраивать обработку PrintTicket и PrintCapabilities для пользовательских функций, предоставляемых подключаемым модулем.

Драйверы печати Unidrv и PScript5 реализуют интерфейс IPrintTicketProvider и создают начальную версию данных PrintTicket и PrintCapabilities, основанных на файле GPD или PPD. После первоначальной обработки драйвер печати Unidrv или PScript5 вызывает интерфейс IPrintOemPrintTicvider подключаемого модуля, чтобы подключаемый модуль смог изменить эти данные, прежде чем драйвер печати возвращает его вызывающему приложению.

Интерфейс IPrintCoreHelper

Интерфейс IPrintCoreHelper позволяет подключаемый модуль конфигурации драйвера печати:

  • Получение и установка значений в частной части структуры DEVMODE, используемой драйверами печати Unidrv и PScript5.

  • Перечисление функций драйвера печати, параметров и ограничений.

  • Доступ к полному содержимому GPD или частичному содержимому PPD-файла.

Единственным способом правильного задания конфигурации Unidrv или PScript5 для подключаемого модуля является возможность полной замены пользовательского интерфейса (UI) с помощью следующего интерфейса IPrintCoreHelper .

DECLARE_INTERFACE_(IPrintCoreHelper, IUnknown) {
  // IUnknown methods skipped
  STDMETHOD(CreateInstanceOfMSXMLObject)(...)
  STDMETHOD(EnumConstrainedOptions)(...)
  STDMETHOD(EnumFeatures)(...)
  STDMETHOD(EnumOptions)(...)
  STDMETHOD(GetOption)(...)
  STDMETHOD(SetOptions)(...)
  STDMETHOD(WhyConstrained)(...)
};

Следующие два дополнительных интерфейса, IPrintCoreHelperUni и IPrintCoreHelperPS, являются производными от интерфейса IPrintCoreHelper. Эти интерфейсы относятся к драйверам печати Unidrv и PScript5 соответственно и включают дополнительные методы, уникальные для каждого драйвера.

DECLARE_INTERFACE_(IPrintCoreHelperUni, IUnknown) {
  // IUnknown methods skipped
  // IPrintCoreHelper methods skipped
  STDMETHOD(CreateDefaultGDLSnapshot)(...)
  STDMETHOD(CreateGDLSnapshot)(...)
};

DECLARE_INTERFACE_(IPrintCoreHelperPS, IUnknown) {
  // IUnknown methods skipped
  // IPrintCoreHelper methods skipped
  STDMETHOD(GetFeatureAttribute)(...)
  STDMETHOD(GetGlobalAttribute)(...)
  STDMETHOD(GetOptionAttribute)(...)
};

В следующем примере кода показано, как использовать интерфейс IPrintCoreHelper для запроса сведений из структуры DEVMODE. Этот пример является частью примера кода драйвера печати XPSDrv в комплекте драйверов Windows (WDK).

HRESULT
CBookletDMPTConv::GetDrvSettingsFromDM(
    __in    PDEVMODE                         pDevmode,
            ULONG                            cbDevmode,
    __out   GPD::Binding::DrvSettings*       pDrvSettings
    )
{
  HRESULT hr = S_OK;

  for (GPD::Binding::EGPDSettings setting = 
        GPD::Binding::EGPDSettingsMin;
      setting < GPD::Binding::EGPDSettingsMax && SUCCEEDED(hr);
      setting++)
  {
    PCSTR pszOption;
    hr = m_pCoreHelper->GetOption(
      pDevmode,
      cbDevmode, 
      m_featureNames[setting], 
      &pszOption)
    if (SUCCEEDED(hr))
    {
      hr = GPDSettingFromOptionString(
      pszOption, 
      setting, 
      pDrvSettings);
    }
  }

  return hr;
}