Freigeben über


Unidrv/PScript5-Plug-in-Konfigurationsmodule

Wichtig

Die Modern Print-Plattform ist die von Windows bevorzugte Methode zur Kommunikation mit Druckern. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.

Weitere Informationen finden Sie unter Modern Print-Plattform und der Anleitung zum Design der Print-Support-App.

XPSDrv-Drucktreiberkonfigurationsmodule, die Unidrv- oder PScript5-Konfigurations-Plug-Ins in Windows Vista verwenden, unterstützen die folgenden neuen Features:

  • Die Funktionen PrintTicket und PrintCapabilities

  • Die IPrintCoreHelper-Schnittstelle zum Bearbeiten von Unidrv- und PScript5-Einstellungen

  • XPSDrv Dokument-Ereignisse

  • Kommunikation mit Drucktreiberfiltern in der Filterpipeline

PrintTicket- und PrintCapabilities-Schnittstellenunterstützung

Unidrv- und PScript5-Drucktreiber-Plug-Ins implementieren die IPrintOemPrintTicketProvider-Schnittstelle, um die PrintTicket- und PrintCapabilities-Daten anzupassen. Die Methoden in dieser Schnittstelle ermöglichen es einem Plug-In, die PrintTicket- und PrintCapabilities-Verarbeitung für die benutzerdefinierten Features anzupassen, die das Plug-In bereitstellt.

Die Drucktreiber Unidrv und PScript5 implementieren die IPrintTicketProvider-Schnittstelle und generieren die ursprüngliche Version der PrintTicket- und PrintCapabilities-Daten, die auf der GPD- oder PPD-Datei basieren. Nach der anfänglichen Verarbeitung ruft der Unidrv- oder PScript5-Drucktreiber dann die Schnittstelle IPrintOemPrintTicketProvider des Plug-Ins auf, damit das Plug-In diese Daten ändern kann, bevor der Drucktreiber sie an die aufrufende Anwendung zurückgibt.

IPrintCoreHelper-Schnittstelle

Die IPrintCoreHelper-Schnittstelle ermöglicht das Druckertreiberkonfigurations-Plug-In für Folgendes:

  • Dient zum Abrufen und Festlegen von Werten im privaten Teil der DEVMODE-Struktur, die von Unidrv- und PScript5-Drucktreibern verwendet wird.

  • Aufzählen von Drucktreiberfeatures, -optionen und -einschränkungen.

  • Greifen Sie auf den vollständigen GPD- oder partiellen PPD-Dateiinhalt zu.

Die einzige Möglichkeit für ein Plug-In, die Unidrv- oder PScript5-Konfiguration ordnungsgemäß festzulegen und die vollständige Benutzeroberflächenersetzungsfunktionalität zu aktivieren, besteht darin, die folgende IPrintCoreHelper-Schnittstelle zu verwenden.

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

Die folgenden beiden zusätzlichen Schnittstellen, IPrintCoreHelperUni und IPrintCoreHelperPS werden von der IPrintCoreHelper abgeleitet. Diese Schnittstellen sind spezifisch für Unidrv- bzw. PScript5-Drucktreiber und enthalten zusätzliche Methoden, die für jeden Treiber eindeutig sind.

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

Das folgende Codebeispiel veranschaulicht, wie Sie die IPrintCoreHelper-Schnittstelle verwenden können, um Informationen aus der DEVMODE-Struktur abzufragen. Dieses Beispiel ist Teil des XPSDrv-Drucktreiberbeispielcodes im 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;
}