HidP_TranslateUsagesToI8042ScanCodes, fonction (hidpi.h)
La routine HidP_TranslateUsagesToI8042ScanCodes mappe une liste d’utilisations HID sur la page d’utilisation HID_USAGE_PAGE_KEYBOARD à leurs codes d’analyse PS/2 respectifs (jeu de codes d’analyse 1).
Syntaxe
NTSTATUS HidP_TranslateUsagesToI8042ScanCodes(
[in] PUSAGE ChangedUsageList,
[in] ULONG UsageListLength,
[in] HIDP_KEYBOARD_DIRECTION KeyAction,
[in, out] PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
[in] PHIDP_INSERT_SCANCODES InsertCodesProcedure,
[in, optional] PVOID InsertCodesContext
);
Paramètres
[in] ChangedUsageList
Pointeur vers une liste d’utilisations du clavier (bouton). La routine d’utilisations de traduction interprète un zéro comme un délimiteur qui met fin à la liste d’utilisation.
[in] UsageListLength
Spécifie le nombre maximal d’utilisations possibles dans la liste des utilisations modifiées.
[in] KeyAction
Identifie la direction clé pour la liste d’utilisation des modifications spécifiées.
typedef enum _HIDP_KEYBOARD_DIRECTION {
HidP_Keyboard_Break,
HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;
HidP_Keyboard_Break
Spécifie un sens d’arrêt (touche vers le haut). La liste d’utilisation modifiée contient les utilisations définies sur OFF qui étaient précédemment définies sur ON (ce qui correspond aux clés qui étaient précédemment en panne, mais qui sont maintenant activées).
HidPKeyboard_Make
Spécifie une direction de création (touche vers le bas). La liste d’utilisation modifiée contient les utilisations définies sur ON qui étaient précédemment définies sur OFF (ce qui correspond aux clés qui étaient précédemment en place, mais qui sont maintenant en panne).
[in, out] ModifierState
Pointeur vers une structure _HIDP_KEYBOARD_MODIFIER_STATE que l’appelant gère pour une utilisation par la routine des utilisations de traduction. La structure d’état du modificateur identifie l’état des touches de modification du clavier.
typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
union {
struct {
ULONG LeftControl: 1;
ULONG LeftShift: 1;
ULONG LeftAlt: 1;
ULONG LeftGUI: 1;
ULONG RightControl: 1;
ULONG RightShift: 1;
ULONG RightAlt: 1;
ULONG RigthGUI: 1;
ULONG CapsLock: 1;
ULONG ScollLock: 1;
ULONG NumLock: 1;
ULONG Reserved: 21;
};
ULONG ul;
};
Chaque membre de la structure d’état du modificateur identifie si l’utilisation correspondante est définie sur ON (1) ou OFF (zéro).
Pour plus d’informations sur l’utilisation d’une structure d’état modificateur avec la routine d’utilisation de translate, consultez la section Remarques.
[in] InsertCodesProcedure
Pointeur vers une routine de rappel de type PHIDP_INSERT_SCANCODES fournie par l’appelant que la routine d’utilisation de translate utilise pour retourner les codes d’analyse mappés à l’appelant de la routine d’utilisation translate.
typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
IN PVOID Context,
IN PCHAR NewScanCodes,
IN ULONG Length
);
Context
Pointeur vers le contexte de l’appelant de la routine d’utilisation de translate. La routine d’utilisation de translate transmet le pointeur InsertCodesContext à la routine InsertCodesProcedure .
NewScanCodes
Pointeur vers le premier octet d’un code d’analyse que la routine d’utilisation de translate retourne à l’appelant de la routine d’utilisation de traduction.
Longueur
Spécifie la longueur, en octets, du code d’analyse. Un code d’analyse ne peut pas dépasser quatre octets.
[in, optional] InsertCodesContext
Pointeur vers un contexte défini par l’appelant que la routine d’utilisation de la traduction passe à la routine InsertCodesProcedure .
Valeur retournée
HidP_TranslateUsagesToI8042ScanCodes retourne l’une des valeurs status suivantes :
Code de retour | Description |
---|---|
|
La routine d’utilisation de traduction a mappé toutes les utilisations valides dans la liste des utilisations modifiées. |
|
Utilisation dans la liste d’utilisation modifiée mappée à un code d’analyse clavier non valide. |
Remarques
HidP_TranslateUsagesToI8042ScanCodes mappe séquentiellement les utilisations du bouton clavier dans la liste des utilisations modifiées dans l’ordre dans lequel elles se produisent dans la liste, en commençant par la valeur dans ChangedUsageList. Une fois que la routine d’utilisation de traduction a correctement mappé une utilisation, elle utilise la routine InsertCodesProcedure de l’appelant pour renvoyer le code d’analyse correspondant à l’appelant. La routine d’utilisation translate continue de mapper les utilisations dans la liste jusqu’à ce que l’une des opérations suivantes se produise : une valeur d’utilisation dans la liste est zéro ; il mappe le nombre d’utilisations spécifié par UsageListLength ; une utilisation correspond à un code d’analyse du clavier non valide.
HidP_TranslateUsagesToI8042ScanCodes est principalement conçu pour être utilisé dans une boucle de traitement qui détermine à plusieurs reprises la liste d’utilisation actuelle (utilisations actuellement définies sur ON), les compare à une liste d’utilisation précédente (utilisations précédemment définies sur ON) et mappe la différence entre les listes d’utilisation actuelle et précédente pour créer des codes d’analyse et briser les codes d’analyse. Les opérations suivantes illustrent comment utiliser la routine d’utilisations de traduction.
Avant de commencer une boucle de traitement, le code de traitement alloue et initialise généralement les données suivantes :
-
Une liste d’utilisation précédente, une liste d’utilisation actuelle, une liste d’interruptions d’utilisation et une liste d’utilisation.
Chaque liste est un tableau d’utilisations initialisé à zéro. Pour s’assurer que le code de traitement mappe toutes les utilisations pouvant changer entre les rapports d’entrée HID consécutifs, le code de traitement doit définir le nombre d’éléments de chaque liste sur le nombre maximal d’utilisations que HidP_GetUsages pouvez retourner pour la page d’utilisation HID_USAGE_PAGE_KEYBOARD. Ce nombre est obtenu à l’aide de HidP_MaxUsageListLength.
-
Structure _HIDP_KEYBOARD_MODIFIER_STATE initialisée à zéro à utiliser par la routine d’utilisations de traduction.
Dans la boucle de traitement, le code doit conserver cette structure pour une utilisation par la routine des utilisations de traduction. Le code de traitement peut lire l’état des clés de modification, mais il ne doit pas modifier la structure. La routine d’utilisation de translate utilise cette structure pour conserver des informations internes sur l’état des clés de modification.
- Appelez HidP_GetUsages pour obtenir la liste d’utilisation actuelle des utilisations définies sur ON. Définissez le paramètre d’entrée UsagePage de la routine obtenir des utilisations sur HID_USAGE_PAGE_KEYBOARD.
- Appelez HidP_UsageListDifference pour comparer la liste d’utilisations actuelle à une liste d’utilisations précédente. La routine de différence de liste d’utilisation retourne une liste d’interruptions d’utilisation et une liste d’utilisation.
- Appelez la routine d’utilisation translate, affectez à ChangedUsageList la liste d’interruption de l’utilisation, KeyAction à HidP_KeyboardBreak et ModifierState à la structure que le code de traitement gère pour la routine d’utilisations de traduction. La routine d’utilisations de traduction utilise la routine de rappel InsertCodesProcedurepour renvoyer les codes d’analyse d’arrêt à la boucle de traitement.
- Appelez la routine d’utilisation translate, affectez à ChangedUsageList la liste d’utilisation, KeyAction à HidP_KeyboardMake et ModifierState à la structure que le code de traitement gère pour la routine d’utilisations de traduction. La routine d’utilisations de traduction utilise la routine de rappel InsertCodesProcedurepour retourner les codes d’analyse make à la boucle de traitement.
- Mettez à jour la liste d’utilisation précédente vers la liste d’utilisation actuelle.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows 2000 et versions ultérieures de Windows. |
Plateforme cible | Universal |
En-tête | hidpi.h (inclure Hidpi.h) |
Bibliothèque | Hidparse.lib |
IRQL | <= DISPATCH_LEVEL |