处理可安装的功能和选项
重要
新式打印平台是 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)
}
}
请务必同时指定任何相关的选项约束,如图所示。