Udostępnij za pośrednictwem


Moduły konfiguracji wtyczki Unidrv/PScript5

Ważny

Nowoczesna platforma drukowania jest preferowanym sposobem komunikacji z drukarkami w systemie Windows. Zalecamy używanie sterownika klasy skrzynki odbiorczej IPP firmy Microsoft wraz z aplikacjami do obsługi drukowania (PSA), aby dostosować środowisko drukowania w systemie Windows 10 i 11 na potrzeby opracowywania urządzeń drukarki.

Aby uzyskać więcej informacji, zobacz przewodnik projektowania aplikacji wsparcia drukowania .

Moduły konfiguracji sterownika wydruku XPSDrv korzystające z wtyczek konfiguracji Unidrv lub PScript5 w systemie Windows Vista obsługują następujące nowe funkcje:

  • Funkcje PrintTicket i PrintCapabilities

  • Interfejs IPrintCoreHelper do manipulowania ustawieniami Unidrv i PScript5

  • Zdarzenia dokumentu XPSDrv

  • Komunikacja z filtrami sterowników wydruku w potoku filtrów

Obsługa interfejsu PrintTicket i PrintCapabilities

Wtyczki sterowników drukarek Unidrv i PScript5 implementują interfejs IPrintOemPrintTicketProvider, aby dostosować dane dotyczące PrintTicket i PrintCapabilities. Metody w tym interfejsie umożliwiają wtyczkom dostosowywanie przetwarzania PrintTicket i PrintCapabilities dla funkcji niestandardowych oferowanych przez wtyczkę.

Sterowniki wydruku Unidrv i PScript5 implementują interfejs IPrintTicketProvider i generują początkową wersję danych PrintTicket i PrintCapabilities opartych na pliku GPD lub PPD. Po początkowym przetwarzaniu sterownik wydruku Unidrv lub PScript5 wywołuje interfejs IPrintOemPrintTicketProvider, aby wtyczka mogła zmodyfikować te dane przed tym, jak sterownik wydruku zwróci je do aplikacji wywołującej.

Interfejs IPrintCoreHelper

Interfejs IPrintCoreHelper umożliwia wtyczce konfiguracyjnej sterownika wydruku:

  • Pobierz i ustaw wartości w prywatnej części struktury DEVMODE używanej przez sterowniki wydruku Unidrv i PScript5.

  • Wyliczanie funkcji, opcji i ograniczeń sterowników wydruku.

  • Uzyskaj dostęp do pełnej zawartości pliku GPD lub częściowego pliku PPD.

Jedynym sposobem prawidłowego ustawienia konfiguracji Unidrv lub PScript5 dla wtyczki i włączenia pełnej funkcjonalności wymiany interfejsu użytkownika jest użycie następującego interfejsu IPrintCoreHelper.

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

Następujące dwa dodatkowe interfejsy, IPrintCoreHelperUni i IPrintCoreHelperPS, pochodzą z interfejsu IPrintCoreHelper. Te interfejsy są specyficzne dla sterowników wydruku Unidrv i PScript5 i zawierają dodatkowe metody, które są unikatowe dla każdego sterownika.

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

Poniższy przykład kodu ilustruje, jak za pomocą interfejsu IPrintCoreHelper wysyłać zapytania o informacje ze struktury DEVMODE. Ten przykład jest częścią przykładowego kodu sterownika wydruku XPSDrv w zestawie sterowników systemu 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;
}