Partager via


Instructions conditionnelles

Important

Nous vous recommandons d’utiliser le pilote de classe de boîte de réception IPP de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’imprimante.

Pour plus d’informations, consultez le Guide de conception de l’application de support d’impression.

Le langage GPD fournit des instructions conditionnelles de type C qui vous permettent de décrire les dépendances que certains attributs d’imprimante peuvent avoir sur la configuration d’une imprimante. Par exemple, les marges et l’origine du curseur d’une page peuvent dépendre de l’orientation de la page. Les instructions *Switch et *Case vous permettent d’exprimer ces dépendances. Le format de ces instructions est le suivant :

*Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } etc. *Case OptionN_Name { } *Default { } }

FeatureName doit être le nom d’une fonctionnalité spécifiée dans le fichier GPD avec une entrée *Feature . Les noms d’options utilisés doivent être des options associées à la fonctionnalité spécifiée.

Pour exprimer le cas dans lequel les marges de page et l’origine du curseur dépendent de l’orientation de la page, les entrées suivantes peuvent être utilisées :

*Feature: Orientation
{
    *DefaultOption: Portrait
    *Option: Portrait
    {
        *Name: "Portrait"
        *rcIconID: =RC_ICON_PORTRAIT
    }
    *Option: LANDSCAPE_CC90
    {
        *Name: "Landscape"
        *rcIconID: =RC_ICON_LANDSCAPE
    }
}
*Feature: PaperSize
{
    *DefaultOption: Letter
    *Option: Letter
    {
        *Name: "Letter 8.5 x 11 inch"
        *switch: Orientation
        {
            *case: Portrait
            {
                *PrintableArea: PAIR(4800, 6324)
                *PrintableOrigin: PAIR(150, 150)
                *CursorOrigin: PAIR(150,100)
            }
            *case: LANDSCAPE_CC90
            {
                *PrintableArea: PAIR(4860, 6360)
                *PrintableOrigin: PAIR(120, 120)
                *CursorOrigin: PAIR(100,6480)
            }
        }
    }
}

Dans cet exemple, les options de la fonctionnalité PaperSize de l’imprimante dépendent de l’option sélectionnée pour la fonctionnalité Orientation de l’imprimante.

Si vous ne répertoriez pas toutes les options d’une fonctionnalité en tant qu’arguments d’instruction *Case , vous pouvez inclure une instruction *Default , tout comme dans le langage C. Si vous n’incluez pas toutes les options et que vous n’incluez pas d’instruction *Default , vous devez évaluer les attributs pertinents (dans l’exemple, *PrintableArea, *PrintableOrigin et *CursorOrigin) ailleurs dans le fichier GPD, avant l’instruction *Switch .

Spécification de plusieurs dépendances

Vous pouvez inclure *Switch instructions dans *Case et *Instructions par défaut . Cela vous permet de spécifier plusieurs dépendances, comme suit :

*Feature: feature1 {*Option: optionA {...} *Option: optionB {...}}
*Feature: feature2 {*Option: optionC {...} *Option: optionD {...}}
*Feature: feature3 
    {*Option: optionE 
        {*Switch: feature1 
            {*Case: optionA
                 {*Switch: feature2
                     {*Case: optionD
                         {AttributeX: ValueX}
                      *Default
                         {AttributeX: ValueY}
                     }
                 }
             *Default
                  {AttributeX: ValueZ}
             }
         }
    *Option: optionF {...} 
    }

Dans cet exemple, AttributeX, appartenant à l’optionE de feature3, dépend à la fois de feature1 et de feature2.

Si l’utilisateur a sélectionné optionA pour feature1, optionD pour feature2 et optionE pour feature3, attributeX est défini sur ValueX.

Si l’utilisateur a sélectionné optionA pour feature1, optionC pour feature2 et optionE pour feature3, attributeX est défini sur ValueY.

Si l’utilisateur a sélectionné optionB pour feature1 et optionE pour feature3, attributeX est défini sur ValueZ. Le paramètre de Feature2 n’est pas pertinent.

Les règles suivantes s’appliquent lors de la spécification de plusieurs dépendances :

  • Plusieurs dépendances doivent être spécifiées dans l’étendue d’une seule entrée *Switch . En utilisant l’exemple, par exemple, vous ne pouvez pas utiliser une entrée *Switch pour indiquer que feature3 dépend de feature1, puis, dans une instruction *Switch non imbriquée ultérieure, indique que feature3 dépend de feature2.

  • Vous ne pouvez pas spécifier la même fonctionnalité plus d’une fois dans chaque entrée *Switch imbriquée.

Où placer une instruction *Switch

Vous pouvez placer une instruction *Switch aux emplacements suivants dans un fichier GPD :

  • À l’intérieur d’une instruction *Option

  • À l’intérieur d’une *instruction Feature

  • À l’intérieur d’une instruction *Case

  • À l’intérieur d’une instruction *Default

  • Au niveau supérieur du fichier (c’est-à-dire, pas à l’intérieur d’un ensemble d’accolades)

Éléments à placer dans *Switch, *Case et *Instructions par défaut

Dans une entrée *Commutateur , vous pouvez placer uniquement *Case et *Entrées par défaut .

Les entrées de fichier GPD qui peuvent être placées dans *Case ou *Les entrées par défaut sont appelées entrées déplaçables. Les types d’entrées GPD suivants peuvent être déplacés :

Les types d’entrées GPD suivants ne peuvent pas être déplacés :

  • Attributs de niveau racine uniquement.

  • *Entrées TTFS pour spécifier la police substituée.

  • *Constraints, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints entrées qui définissent des combinaisons d’options non valides, comme décrit dans Contraintes d’option.

  • *Caractéristique et *Entrées d’option (bien que les attributs de fonctionnalité et les attributs d’option soient délocalisables).

Une méthode permettant de déterminer si les entrées ont été placées correctement dans les instructions *Case consiste à supprimer toutes les instructions *Switch et *Case . Si les entrées dans les instructions *Case sont correctes, elles sont toujours correctes après la suppression des instructions *Switch et *Case .

Ordre des instructions switch dans un pilote d’impression V4 dérivé d’un pilote de classe

Le fichier GPD du pilote d’imprimante v4 dérivé doit suivre le même ordre que le pilote de classe de base.

Considérons le scénario suivant. Vous disposez d’un pilote d’imprimante v4 qui est dérivé d’un pilote de classe v4 en définissant RequiredClass sur le pilote de classe dans un fichier *-manifest.ini.

Le fichier GPD du pilote de classe a l’arborescence de commutateur suivante :

* Option: A4
    1. Switch: Resolution
* Option: Letter
    1. Switch: Resolution
    2. Switch: InputBin

Le pilote d’imprimante v4 dérivé souhaite ajouter le commutateur MarginSetting , de sorte que son fichier GPD aura l’arborescence de commutateur suivante :

* Option: A4
    1. Switch: Resolution
    2. Switch: InputBin
    3. Switch: MarginSetting
* Option: Letter
    1. Switch: Resolution
    2. Switch: InputBin
    3. Switch: MarginSetting

Notez que Résolution est défini avant InputBin dans le GPD dérivé et MarginSetting après les deux. Le fichier GPD du pilote d’imprimante v4 dérivé suit le même ordre que le pilote de classe de base et ajoute MarginSetting après.

Par exemple, un fichier GPD incorrectement dérivé peut ressembler à ce qui suit :

* Option: A4
    1. Switch: MarginSetting
    2. Switch: InputBin
    3. Switch: Resolution
* Option: Letter
    1. Switch: MarginSetting
    2. Switch: InputBin
    3. Switch: Resolution