Partager via


Modules de configuration du plug-in Unidrv/PScript5

Important

La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.

Pour plus d’informations, veuillez consulter la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

Les modules de configuration du pilote d'impression XPSDrv qui utilisent les plug-ins de configuration Unidrv ou PScript5 dans Windows Vista prennent en charge les nouvelles fonctionnalités suivantes :

  • Les fonctionnalités PrintTicket et PrintCapabilities

  • L'interface IPrintCoreHelper pour manipuler les paramètres Unidrv et PScript5

  • Événements de document XPSDrv

  • Communication avec les filtres du pilote d'impression dans le pipeline de filtrage

Prise en charge des interfaces PrintTicket et PrintCapabilities

Les plug-ins des pilotes d'impression Unidrv et PScript5 implémentent l'interface IPrintOemPrintTicketProvider pour personnaliser les données PrintTicket et PrintCapabilities. Les méthodes de cette interface permettent à un plug-in de personnaliser le traitement des PrintTicket et des PrintCapabilities pour les fonctionnalités personnalisées fournies par le plug-in.

Les pilotes d'impression Unidrv et PScript5 mettent en œuvre l'interface IPrintTicketProvider et génèrent la version initiale des données PrintTicket et PrintCapabilities qui est basée sur le fichier GPD ou PPD. Après le traitement initial, le pilote d'impression Unidrv ou PScript5 appelle l'interface IPrintOemPrintTicketProvider du plug-in afin que ce dernier puisse modifier ces données avant que le pilote d'impression ne les renvoie à l'application appelante.

Interface IPrintCoreHelper

L'interface IPrintCoreHelper permet au plug-in de configuration du pilote d'impression :

  • d'obtenir et de définir des valeurs dans la partie privée de la structure DEVMODE utilisée par les pilotes d'impression Unidrv et PScript5.

  • d'énumérer les fonctionnalités, les options et les contraintes du pilote d'impression.

  • d'accéder au contenu complet du fichier GPD ou partiel du fichier PPD.

Le seul moyen pour un plug-in de définir correctement la configuration Unidrv ou PScript5 et d'activer la fonctionnalité de remplacement complet de l'interface utilisateur (UI) est d'utiliser l'interface IPrintCoreHelper suivante.

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

Les deux interfaces supplémentaires suivantes, IPrintCoreHelperUni et IPrintCoreHelperPS, sont dérivées de l'interface IPrintCoreHelper. Ces interfaces sont spécifiques aux pilotes d'impression Unidrv et PScript5, respectivement, et comprennent des méthodes supplémentaires propres à chaque pilote.

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

L'exemple de code suivant illustre comment vous pouvez utiliser l'interface IPrintCoreHelper pour demander des informations à partir de la structure DEVMODE. Cet exemple fait partie du code d'exemple du pilote d'impression XPSDrv dans le Windows Driver Kit (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;
}