处理可安装的功能和选项

重要

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

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

打印机的某些功能或选项可能可以安装。 例如,打印机可以接受可选的信封送纸器,但目前可能已安装,也可能未安装。 这种信封送纸器必须在 GPD 文件中以两种方式进行描述:

  • 作为 InputBin 功能的一个选项。

  • 作为一个可安装的“功能”(尽管它实际上是一个选项),它允许用户指明是否实际安装。

首先,要指定信封送纸器和自动送纸器作为 InputBin 功能的选项,可以使用以下 GPD 条目。

*Feature: InputBin
{
    *Name: "Input Bin"
    *Option: AUTO
    {
        *Name: "Automatic Feeder"
        *Command: CmdSelect {Command Attributes}
    }
    *Option: ENVFEED
    {
        *Name: "Envelope Feeder"
        *Command: CmdSelect {Command Attributes}
    }
}

要安装信封送纸器,则需要增加 GPD 条目,如下所示:

*InstalledOptionName: "Installed"
*NotInstalledOptionName: "Not installed"
*Feature: InputBin
{
    *Name: "Input Bin"
    *Option: AUTO
    {
        *Name: "Automatic Feeder"
        *Command: CmdSelect {Command Attributes}
    }
    *Option: ENVFEED
    {
        *Name: "Envelope Feeder"
        *Command: CmdSelect {Command Attributes}
        *Installable?: TRUE
        *InstallableFeatureName: "Optional Envelope Feeder"
    }
}

在信封送纸器的 *Option 条目中增加了两个属性:

  • *Installable? 属性表示该选项可安装。

  • *InstallableFeatureName 属性指定 Unidrv 显示的文本字符串,以便用户指出该选项是否已实际安装。

只要将功能或选项的 *Installable? 设置为 TRUE,Unidrv 就会为属性表显示创建一个附加功能。 (请注意,即使可安装项目是一个选项,Unidrv 也会在属性表中为其创建一个功能表示。)此 Unidrv 合成的功能由 *InstallableFeatureName 提供的字符串标识。 该功能提供“已安装”和“未安装”两个选项,允许用户选择其中之一。 字符串“已安装”和“未安装”是通过 *InstalledOptionName 和 *NotInstalledOptionName 属性指定的,因此如果有其他更合适的文本,可以对其进行修改。

因此,在我们的示例中,属性表将包括一个 InputBin 功能,标记为送纸盒,其中包括两个选项,标记为自动送纸器信封送纸器。 属性表还将包括一个附加功能,标注为可选信封送纸器,以及两个选项,分别标注为已安装未安装。 用户只有先在可选信封送纸器下选择已安装,才能在送纸盒下选择信封送纸器

有时,有必要说明某些可安装选项不能同时安装,或者如果安装了其他可安装选项,则不能选择某个不可安装选项。 要处理这些情况,请使用指定选项约束的 GPD 条目。

对于需要 *DisabledFeatures 条目的可选功能,不能使用 *Installable?。 对于这些功能,必须使用“已安装”和“未安装”选项来显式指定可选功能。 例如,假设打印机有一个可选的双工装置。 如果没有安装双工装置,则必须禁用双工功能(请参阅标准功能)。 必须定义“可选双工设备”功能,并提供“已安装”和“未安装”选项。 在“未安装”*Option 条目中,可以为双工功能添加一个 *DisabledFeatures 条目。 可以使用以下 GPD 条目:

*Feature: DuplexUnit
{
    *ConflictPriority: 3   *% Make priority higher than Duplex feature
    *Name: "Optional Duplexing Unit"
    *Option: Installed
    {
        *Name: "Installed"
    }
    *Option: NotInstalled
    {
        *Name: "Not Installed"
        *DisabledFeatures: LIST(Duplex)
        *Constraints: LIST (Duplex.LongEdge, Duplex.ShortEdge)
    }
}

请务必同时指定任何相关的选项约束,如图所示。