使用 GetOptionAttribute

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅新式打印平台打印支持应用设计指南

仅 PostScript 打印机驱动程序 (PPD) 功能支持此函数。 如果某个属性不可用,GetOptionAttribute 则会返回 E_INVALIDARG。

常规选项属性的输出参数

在下表中,pdwDataType 会采用 EATTRIBUTE_DATATYPE 枚举类型的值。

常规选项属性 输出参数
DisplayName pdwDataType:kADT_UNICODE

pbData:以 null 结尾的选项关键字名称的转换字符串的 Unicode 字符串

pcbNeeded:pbData 指向的 Unicode 字符串的字节计数(包括 null 终止符)

此选项属性可用于 EnumOptions 可对某一 PPD 功能返回的任意选项。
调用 pdwDataType:kADT_BINARY

pbData:此选项的 InvocationValue 的字节数组

pcbNeeded:pbData 指向的二进制数据的字节计数

此选项属性可用于 EnumOptions 可对某一 PPD 功能返回的任意选项。 如果此选项的 InvocationValue 为空,则该函数会将 pdwDataType 设为上述值,将 S_OK 设为 0,然后返回 S_OK。
OrderDependencyValue pdwDataType:kADT_LONG

pbData:此选项的 PPD 的 OrderDependency 或 NonUIOrderDependency 关键字所指定的相对顺序。 请注意,这些关键字的第一个参数为转换为 LONG 型并返回的一个实数。

pcbNeeded:sizeof(LONG)

此选项属性仅适用于在 PPD 中具有 OrderDependency 或 *NonUIOrderDependency 条目的选项,且该条目不会省略 optionKeyword。
OrderDependencySection pdwDataType:kADT_ASCII

pbData:以 null 结尾的 ASCII 字符串,其中包含以下部分名称之一:“ExitServer”、“Prolog”、“DocumentSetup”、“PageSetup”、“JCLSetup”、“AnySetup”

pcbNeeded:pbData 指向的 ASCII 字符串的字节计数(包括 null 终止符)

此选项属性仅适用于在 PPD 中具有 OrderDependency 或 NonUIOrderDependency 条目的选项,且该条目不会省略 optionKeyword。

特定选项属性的输出参数

除前面所述的常规选项属性之外,下表中列出的选项属性还可能存在针对其可用时机的限制。 某些属性可用于特定 PPD 功能的所有选项,而其他属性则仅可用于其 PPD 功能的特定选项。 针对每个选项属性,均会列出所有此类限制。

关键字 可选属性 输出参数
InputSlot
RequiresPageRegion pdwDataType:kADT_BOOL

pbData:如果必须随 InputSlot 调用代码发送 PageRegion 调用代码,则为 TRUE,否则为 FALSE。 它基于 PPD 的 RequiresPageRegion 关键字。 如果为此输入槽选项省略此关键字,则会为此属性返回 TRUE

pcbNeeded:sizeof(BOOL)

此选项属性可用于“InputSlot”PPD 功能的任意选项,但驱动程序生成的选项“*UseFormTrayTable”除外。
OutputBin
OutputOrderReversed pdwDataType:kADT_BOOL

pbData:如果 binOption 的输出顺序为“Reverse”,则为 TRUE;如果输出顺序为“Normal”,则为 FALSE。 它基于 PPD 的 DefaultOutputOrder 和 ageStackOrder 关键字。

pcbNeeded:sizeof(BOOL)

此选项属性可用于“OutputBin”PPD 功能的任意选项。
PageSize
ImageableArea pdwDataType:kADT_RECT

pbData:PageSize 选项的成像区域的边界框(由 PPD 的 ImageableArea 关键字指定),它将在 RECT 结构中返回,而其 leftbuttom 成员包含 llx 和 lly 值,同时其 righttop 成员则包含 urx 和 ury 值。 所有值均以微米为单位。 PPD 的 llx 和 lly 值在转换为微米值之前会向上舍入为最接近的整数。 PPD 的 urx 和 ury 值在转换为微米值之前会向下舍入为最接近的整数。

pcbNeeded:sizeof(RECT)

此选项属性可用于“PageSize”PPD 功能的任意选项,但“CustomPageSize”选项除外。
PaperDimension pdwDataType:kADT_SIZE

pbData:PageSize 选项的物理维度(由 PPD 的 PaperDimension 关键字),它将在 SIZE 结构中返回,而其 cx 成员包含宽度值,同时其 cy 成员则包含高度值。 所有值均以微米为单位。

pcbNeeded:sizeof(SIZE)

此选项属性可用于“PageSize”PPD 功能的任意选项,但“CustomPageSize”选项除外。
PageSize: CustomPageSize
HWMargins pdwDataType:kADT_RECT

pbData:PPD 的 HWMargins 关键字所指定的四个值均会在 RECT 结构中返回。 所有值均以微米为单位。

pcbNeeded:sizeof(RECT)

此选项属性仅可用于“PageSize”PPD 功能的“CustomPageSize”选项。
MaxMediaHeight pdwDataType:kADT_DWORD

pbData:PPD 的 *MaxMediaHeight 关键字所指定的值(以微米为单位)。

pcbNeeded:sizeof(DWORD)

此选项属性仅可用于“PageSize”PPD 功能的“CustomPageSize”选项。
MaxMediaWidth pdwDataType:kADT_DWORD

pbData:PPD 的 MaxMediaWidth 关键字所指定的值(以微米为单位)。

pcbNeeded:sizeof(DWORD)

此选项属性仅可用于“PageSize”PPD 功能的“CustomPageSize”选项。
ParamCustomPageSize pdwDataType:kADT_CUSTOMSIZEPARAMS

pbData:CUSTOMPARAM_MAX 元素的数组,其中每个元素均为一个 CUSTOMSIZEPARAM 结构。 此数组的每个元素均会存储 PPD 的 ParamCustomPageSize 关键字条目中所指定的值。 对于“Orientation”之外的 paramOption,lMinVal 和 lMaxVal 值均以微米为单位。 对于“Orientation”,lMinVal 和 lMaxVal 值均处于 [0, 3] 范围内。

pcbNeeded:sizeof(CUSTOMSIZEPARAM) * CUSTOMPARAM_MAX

此选项属性仅可用于“PageSize”PPD 功能的“CustomPageSize”选项。

有关详细信息,请参阅有关 ParamCustomPageSize 的以下说明。
InstalledMemory
VMOption pdwDataType:kADT_DWORD

pbData:PPD 的 VMOption 关键字所指定的值;如果 PPD 没有为此选项指定 VMOption 关键字,则该值为 0。

pcbNeeded:sizeof(DWORD)

此选项属性可用于“InstalledMemory”PPD 功能的任意选项。
FCacheSize pdwDataType:kADT_DWORD

pbData:PPD 的 FCacheSize 关键字所指定的值;如果 PPD 没有为此选项指定 FCacheSize 关键字,则该值为 0。

pcbNeeded:sizeof(DWORD)

此选项属性可用于“InstalledMemory”PPD 功能的任意选项。

有关 ParamCustomPageSize 的说明

以下示例代码演示了如何获取 PPD 文件中“ParamCustomPageSize Width”条目的原始顺序、最小值和最大值。 printoem.h 中定义的 CUSTOMPARAM_WIDTH 常量表示 CUSTOMSIZEPARAM 结构的偏移量,而该结构包含与 Width 条目相关的信息。 此结构是用于构成此类结构的数组的 CUSTOMPARAM_MAX CUSTOMSIZEPARAM 结构之一。 printoem.h 头文件定义了一组名为 CUSTOMPARAM_XXX 的常量,其中列出了此数组中各结构的偏移量(Width、Height、WidthOffset、HeightOffset 和 Orientation)。

PCUSTOMSIZEPARAM  pCSParam;

pCSParam = (PCUSTOMSIZEPARAM)pbData + CUSTOMPARAM_WIDTH;

order = pCSParam->dwOrder;
// Convert lMinVal and lMaxVal from microns to points.
//   To convert microns to inches, divide by 25400.
//   To convert inches to points, multiply by 72.
min = pCSParam->lMinVal / 25400.0 * 72.0;
max = pCSParam->lMaxVal / 25400.0 * 72.0;