Módulos de configuración del complemento Unidrv/PScript5
Importante
La plataforma de impresión moderna es el medio preferido de Windows para comunicarse con impresoras. Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con aplicaciones de soporte técnico de impresión (PSA), para personalizar la experiencia de impresión en Windows 10 y 11 para el desarrollo de dispositivos de impresora.
Para obtener más información, consulte Plataforma de impresión moderna y la Guía de diseño de aplicaciones para compatibilidad con impresión.
Los módulos de configuración del controlador de impresión XPSDrv que usan complementos de configuración Unidrv o PScript5 en Windows Vista admiten las siguientes funciones nuevas:
Las funciones PrintTicket y PrintCapabilities
La interfaz IPrintCoreHelper para manipular la configuración de Unidrv y PScript5
Eventos de documento XPSDrv
Comunicación con filtros de controladores de impresión en la canalización de filtros
Soporte de las interfaces PrintTicket y PrintCapabilities
Los complementos de los controladores de impresión Unidrv y PScript5 implementan la interfaz IPrintOemPrintTicketProvider para personalizar los datos PrintTicket y PrintCapabilities. Los métodos de esta interfaz permiten a un complemento personalizar el procesamiento de PrintTicket y PrintCapabilities para las funciones personalizadas que proporciona el complemento.
Los controladores de impresión Unidrv y PScript5 implementan la interfaz IPrintTicketProvider y generan la versión inicial de los datos PrintTicket y PrintCapabilities basada en el archivo GPD o PPD. Tras el procesamiento inicial, el controlador de impresión Unidrv o PScript5 llama a la interfaz IPrintOemPrintTicketProvider del complemento para que este pueda modificar estos datos antes de que el controlador de impresión los devuelva a la aplicación llamante.
Interfaz IPrintCoreHelper
La interfaz IPrintCoreHelper permite al complemento de configuración del controlador de impresión:
Obtener y establecer valores en la parte privada de la estructura DEVMODE que usan los controladores de impresión Unidrv y PScript5.
Enumerar las características, opciones y restricciones del controlador de impresión.
Acceder al contenido completo del archivo GPD o parcial del archivo PPD.
La única forma de que un complemento establezca correctamente la configuración de Unidrv o PScript5 y habilite la funcionalidad completa de sustitución de la interfaz de usuario (UI) es usando la siguiente interfaz IPrintCoreHelper.
DECLARE_INTERFACE_(IPrintCoreHelper, IUnknown) {
// IUnknown methods skipped
STDMETHOD(CreateInstanceOfMSXMLObject)(...)
STDMETHOD(EnumConstrainedOptions)(...)
STDMETHOD(EnumFeatures)(...)
STDMETHOD(EnumOptions)(...)
STDMETHOD(GetOption)(...)
STDMETHOD(SetOptions)(...)
STDMETHOD(WhyConstrained)(...)
};
Las dos interfaces adicionales siguientes, IPrintCoreHelperUni e IPrintCoreHelperPS, se derivan de la interfaz IPrintCoreHelper. Estas interfaces son específicas de los controladores de impresión Unidrv y PScript5, respectivamente, e incluyen métodos adicionales que son exclusivos de cada controlador.
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)(...)
};
El siguiente ejemplo de código ilustra cómo puede usar la interfaz IPrintCoreHelper para consultar información de la estructura DEVMODE. Este ejemplo forma parte del código de ejemplo del controlador de impresión XPSDrv del Kit de controladores de 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;
}