Condividi tramite


Moduli di configurazione plug-in Unidrv/PScript5

Importante

La piattaforma di stampa moderna è il mezzo preferito di Windows per comunicare con le stampanti. Ti consigliamo di usare il driver di classe IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi per stampanti.

Per altre informazioni, vedere Piattaforma di stampa moderna e guida alla progettazione dell'app di supporto per la stampa.

I moduli di configurazione del driver di stampa XPSDrv che usano plug-in di configurazione Unidrv o PScript5 in Windows Vista supportano le nuove funzionalità seguenti:

  • Funzionalità PrintTicket e PrintCapabilities

  • Interfaccia IPrintCoreHelper per la modifica delle impostazioni Unidrv e PScript5

  • Eventi di XPSDrv Document

  • Comunicazione con i filtri driver di stampa nella pipeline di filtro

Supporto dell'interfaccia PrintTicket e PrintCapabilities

I plug-in del driver di stampa Unidrv e PScript5 implementano l'interfaccia IPrintOemPrintTicketProvider per personalizzare i dati PrintTicket e PrintCapabilities. I metodi in questa interfaccia consentono a un plug-in di personalizzare l'elaborazione PrintTicket e PrintCapabilities per le funzionalità personalizzate fornite dal plug-in.

I driver di stampa Unidrv e PScript5 implementano l'interfaccia IPrintTicketProvider e generano la versione iniziale dei dati PrintTicket e PrintCapabilities basati sul file GPD o PPD. Dopo l'elaborazione iniziale, il driver di stampa Unidrv o PScript5 chiama quindi l'interfaccia IPrintOemPrintTicketProvider del plug-in in in modo che il plug-in possa modificare questi dati prima che il driver di stampa lo restituisca all'applicazione chiamante.

Interfaccia IPrintCoreHelper

L'interfaccia IPrintCoreHelper consente al plug-in di configurazione del driver di stampa di:

  • Ottiene e imposta i valori nella parte privata della struttura DEVMODE usata dai driver di stampa Unidrv e PScript5.

  • Enumerare le funzionalità, le opzioni e i vincoli dei driver di stampa.

  • Accedere al contenuto completo del file GPD o parziale ppd.

L'unico modo per impostare correttamente la configurazione Unidrv o PScript5 per un plug-in e abilitare la funzionalità di sostituzione completa dell'interfaccia utente consiste nell'usare l'interfaccia IPrintCoreHelper seguente.

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

Le due interfacce aggiuntive seguenti, IPrintCoreHelperUni e IPrintCoreHelperPS, derivano dall'interfaccia IPrintCoreHelper. Queste interfacce sono specifiche dei driver di stampa Unidrv e PScript5, rispettivamente e includono metodi aggiuntivi univoci per ogni 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)(...)
};

L'esempio di codice seguente illustra come usare l'interfaccia IPrintCoreHelper per eseguire query sulle informazioni dalla struttura DEVMODE. Questo esempio fa parte del codice di esempio del driver di stampa XPSDrv in 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;
}