次の方法で共有


IPrintOemUI::D eviceCapabilities メソッド (prcomoem.h)

IPrintOemUI::DeviceCapabilities メソッドを使用すると、ユーザー インターフェイス プラグインでカスタマイズされたデバイス機能を指定できます。

構文

HRESULT DeviceCapabilities(
  POEMUIOBJ poemuiobj,
  HANDLE    hPrinter,
  PWSTR     pDeviceName,
  WORD      wCapability,
  PVOID     pOutput,
  PDEVMODE  pPublicDM,
  PVOID     pOEMDM,
  DWORD     dwOld,
  DWORD     *dwResult
);

パラメーター

poemuiobj

OEMUIOBJ 構造体への呼び出し元指定ポインター。

hPrinter

プリンター デバイスに対する呼び出し元が指定したハンドル。

pDeviceName

デバイス名を表す文字列への呼び出し元が指定したポインター。

wCapability

メソッドが返す必要がある情報の種類を示す呼び出し元から提供されるフラグ。 フラグの一覧については、DrvDeviceCapabilities 関数の説明を参照してください。

pOutput

要求された情報を受け取るバッファーへの呼び出し元指定ポインター。 返される情報の種類は、wCapabilityで指定されたフラグによって異なります。

pPublicDM

検証された devMODEW 構造体 呼び出し元から提供されたポインター。

pOEMDM

呼び出し元が指定した、ユーザー インターフェイス プラグインのプライベート DEVMODEW 構造体メンバーへのポインター。

dwOld

プリンター ドライバーの DrvDeviceCapabilities 関数から、または別のユーザー インターフェイス プラグインから呼び出し元が指定した戻り値。 詳細については、次の「解説」セクションを参照してください。

dwResult

wCapabilityで指定されたフラグに依存する戻り値。 詳細については、DrvDeviceCapabilities 関数の説明と、次の「解説」セクションを参照してください。

戻り値

このメソッドは、次のいずれかの値を返す必要があります。

リターン コード 形容
S_OK
操作は成功しました。
S_DEVCAP_OUTPUT_FULL_REPLACEMENT
プラグインは、pOutput パラメーターが指すバッファーを独自の目的で使用することを意図しています。 この戻り値は prcomoem.h で定義されています。 この戻り値を使用するタイミングの詳細については、次の「解説」セクションを参照してください。
E_FAIL
操作が失敗しました。
E_NOTIMPL
メソッドは実装されていません。

備考

ユーザー インターフェイス プラグインの IPrintOemUI::DeviceCapabilities メソッドは、ユーザー モード プリンター インターフェイス DLL によってエクスポートされる DrvDeviceCapabilities 関数と同じ種類の操作を実行します。 このメソッドは、プリンターによって提供される機能を指定します。

IPrintOemUI::DeviceCapabilities メソッドを使用して、Unidrv のサポートを機能に割り込んだり、プリンター ドライバーで提供されない機能を追加したりすることができます。 ドライバーは、DrvDeviceCapabilities 関数内から IPrintOemUI::DeviceCapabilities を呼び出します。

IPrintOemUI::DeviceCapabilities メソッドが機能のカスタマイズされたサポートを示している場合 (受信したDC_FIELDS フラグに応じて適切なビットを設定することによって)、カスタマイズされたコードは機能を完全にサポートする必要があります。 完全なサポートには、通常、IPrintOemUI::DeviceCapabilities メソッドの呼び出しに応答して機能に関する情報を返すことと、機能を実装するための適切なユーザー モードまたはカーネル モード コードの提供が含まれます。

IPrintOemUI::DeviceCapabilities メソッドが複数のユーザー インターフェイス プラグインによってエクスポートされる場合、そのメソッドは、インストール用にプラグインが指定された順序で呼び出されます。 プラグインの IPrintOemUI::DeviceCapabilities メソッドが呼び出されるたびに、その dwOld 入力値は、以前に呼び出されたプラグインの IPrintOemUI::DeviceCapabilities メソッドからの戻り値になります。 最初に呼び出されたプラグインの場合、dwOld には、プリンター ドライバーの DrvDeviceCapabilities 関数からの戻り値が含まれます。 同様に、pOutput 指すバッファーには、入力時に、以前に呼び出された IPrintOemUI::DeviceCapabilities メソッドまたは DrvDeviceCapabilities 関数によってそこに配置されたコンテンツ 含まれます。

複数のユーザー インターフェイス プラグインが相互に連携して動作するには、各 IPrintOemUI::DeviceCapabilities メソッドが次の規則に従う必要があります。

  • ユーザー インターフェイス プラグインが指定された機能をサポートしていない場合、その IPrintOemUI::DeviceCapabilities メソッドは、dwResult dwOld パラメーターの内容返す必要があります。
  • ユーザー インターフェイス プラグインでこの機能がサポートされている場合、その IPrintOemUI::DeviceCapabilities メソッドは dwOld 無視し、pOutput 指すバッファーの内容を無視する必要があります。 指定された機能をサポートしていることを示す適切な戻り値とバッファーの内容を提供する必要があります。 メソッドがエラーを検出した場合、dwResultでGDI_ERRORを返す必要があります。
  • ユーザー インターフェイス プラグインで pOutput が指すバッファーで受信した機能情報変更する場合、その IPrintOemUI::DeviceCapabilities メソッドはバッファーの内容を変更し、dwResultで適切な戻り値を返す必要があります。 たとえば、wCapability がDC_FIELDS 場合、メソッドは、dwOld で設定されたビット設定する必要があるビット 、dwResultで OR 演算の結果を返す必要があります。
  • 上記のルールは、dwOld の受信コンテンツがGDI_ERRORされている場合でも従う必要があります。
ドライバーの DrvDeviceCapabilities 関数が DC_FIELDS フラグを設定して呼び出されると、DC_FIELDSも指定して、すべての IPrintOemUI::DeviceCapabilities メソッドが呼び出され、すべてのセット ビットの和集合が呼び出し元に返されます。

S_DEVCAP_OUTPUT_FULL_REPLACEMENT戻り値は Windows Vista の新機能であり、Unidrv と Pscript5 の両方のユーザー インターフェイス プラグインに適用されます。プラグインは、pOutput パラメーターによって指されるバッファーに配置される内容を完全に制御する必要がある場合にのみ、S_DEVCAP_OUTPUT_FULL_REPLACEMENT戻り値を使用する必要があります。 プラグインがS_DEVCAP_OUTPUT_FULL_REPLACEMENTを返すとき、Unidrv も Pscript5 コア ドライバーも、pOutput バッファーにデータを配置しません。 プラグインは、DEVMODEW 構造体 (pPublicDM および pOEMDM パラメーターによって指される) の設定が、GPD または PPD ファイルで指定されたデバイス機能データとは異なるデバイス機能データを報告する必要があることをユーザー インターフェイス プラグインに示す場合に、この値を返す必要がある場合があります。 たとえば、写真の印刷を指定する DEVMODEW 構造体では、GPD または PPD ファイルで指定されているものとは異なる用紙の種類のセットが必要な場合があります。 このような状況では、pOutputdwOld パラメーターの値に関係なく、プラグインはS_DEVCAP_OUTPUT_FULL_REPLACEMENTを返し、dwResult パラメーターをレポートする用紙の種類の数に設定する必要があります。 pOutput が NULL されていない場合、プラグインは pOutput が指すバッファーにも目的の用紙の種類のセットを設定し、dwResult を、プラグインが報告する用紙の種類の数に設定する必要があります。

複数のユーザー インターフェイス プラグインが同時にアクティブで、そのうちの 1 つがS_DEVCAP_OUTPUT_FULL_REPLACEMENTを返す場合、Unidrv または Pscript5 コア ドライバーはこの戻り値を解釈して、プラグインが完全な置換出力データを提供することを意味します。 その結果、コア ドライバーは、プラグインを呼び出す前に、pOutput バッファーにデータを配置しません。(コア ドライバーは、インストールに指定されたのと同じ順序でプラグインを呼び出します)。

コア ドライバーが pOutput バッファーに配置する値を置き換える必要がない場合、プラグインはS_OKを返す必要があります。 Unidrv および Pscript5 コア ドライバーは、wCapability パラメーターが次のいずれかのフラグに設定されている場合に、pOutput バッファーを使用するデバイス機能に対してのみ、S_DEVCAP_OUTPUT_FULL_REPLACEMENT戻り値を認識します。

DC_PAPERNAMES

DC_PAPERS

DC_PAPERSIZE

DC_BINNAMES

DC_BINS

DC_NUP

DC_PERSONALITY

DC_MEDIAREADY

DC_MEDIATYPENAMES

DC_MEDIATYPES

DC_ENUMRESOLUTIONS

ユーザー インターフェイス プラグインの作成とインストールの詳細については、「Microsoft のプリンター ドライバーのカスタマイズ」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー prcomoem.h (Prcomoem.h を含む)

関連項目

DrvDeviceCapabilities

IPrintOemUI