Partilhar via


Módulos de configuração de plug-in Unidrv/PScript5

Importante

A plataforma de impressão moderna é o meio preferencial do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.

Para obter mais informações, consulte Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.

Os módulos de configuração do driver de impressão XPSDrv que usam plug-ins de configuração Unidrv ou PScript5 no Windows Vista oferecem suporte aos seguintes novos recursos:

  • Os recursos PrintTicket e PrintCapabilities

  • A interface IPrintCoreHelper para manipular as configurações Unidrv e PScript5

  • Eventos de documento XPSDrv

  • Comunicação com filtros de driver de impressão no pipeline de filtro

Suporte à interface PrintTicket e PrintCapabilities

Os plug-ins de driver de impressão Unidrv e PScript5 implementam a interface IPrintOemPrintTicketProvider para personalizar os dados PrintTicket e PrintCapabilities. Os métodos nessa interface permitem que um plug-in personalize o processamento de PrintTicket e PrintCapabilities para os recursos personalizados que o plug-in fornece.

Os drivers de impressão Unidrv e PScript5 implementam a interface IPrintTicketProvider e geram a versão inicial dos dados PrintTicket e PrintCapabilities com base no arquivo GPD ou PPD. Após o processamento inicial, o driver de impressão Unidrv ou PScript5 chama a interface IPrintOemPrintTicketProvider do plug-in para que o plug-in possa modificar esses dados antes que o driver de impressão os retorne ao aplicativo de chamada.

Interface IPrintCoreHelper

A interface IPrintCoreHelper permite que o plug-in de configuração do driver de impressão:

  • Obtenha e defina valores na parte privada da estrutura DEVMODE que os drivers de impressão Unidrv e PScript5 usam.

  • Enumere recursos, opções e restrições do driver de impressão.

  • Acesse o conteúdo completo do arquivo GPD ou PPD parcial.

A única maneira de um plug-in definir corretamente a configuração Unidrv ou PScript5 e habilitar a funcionalidade de substituição completa da interface do usuário é usando a interface IPrintCoreHelper a seguir.

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

As duas interfaces adicionais a seguir, IPrintCoreHelperUni e IPrintCoreHelperPS, são derivadas da interface IPrintCoreHelper. Essas interfaces são específicas para drivers de impressão Unidrv e PScript5, respectivamente, e incluem métodos adicionais exclusivos para cada driver.

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)(...)
};

O exemplo de código a seguir ilustra como você pode usar a interface IPrintCoreHelper para consultar informações da estrutura DEVMODE. Este exemplo faz parte do código de exemplo do driver de impressão XPSDrv no WDK (Windows Driver Kit).

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;
}