HidP_TranslateUsagesToI8042ScanCodes (hidpi.h)

HidP_TranslateUsagesToI8042ScanCodes rutin memetakan daftar penggunaan HID di halaman penggunaan HID_USAGE_PAGE_KEYBOARD ke kode pemindaian PS/2 masing-masing (Set Kode Pemindaian 1).

Sintaks

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
);

Parameter

[in] ChangedUsageList

Penunjuk ke daftar penggunaan keyboard (tombol). Rutinitas menerjemahkan penggunaan menginterpretasikan nol sebagai pemisah yang mengakhiri daftar penggunaan.

[in] UsageListLength

Menentukan jumlah penggunaan maksimum yang mungkin dalam daftar penggunaan yang diubah.

[in] KeyAction

Mengidentifikasi arah kunci untuk daftar penggunaan perubahan yang ditentukan.

typedef enum _HIDP_KEYBOARD_DIRECTION {
    HidP_Keyboard_Break,
    HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;

HidP_Keyboard_Break

Menentukan arah jeda (kunci ke atas). Daftar penggunaan yang diubah berisi penggunaan yang diatur ke NONAKTIF yang sebelumnya diatur ke AKTIF (yang sesuai dengan kunci yang sebelumnya tidak berfungsi, tetapi sekarang sudah habis).

HidPKeyboard_Make

Menentukan arah buat (kunci ke bawah). Daftar penggunaan yang diubah berisi penggunaan yang diatur ke AKTIF yang sebelumnya diatur ke NONAKTIF (yang sesuai dengan kunci yang sebelumnya naik, tetapi sekarang tidak berfungsi).

[in, out] ModifierState

Arahkan ke struktur _HIDP_KEYBOARD_MODIFIER_STATE yang dipertahankan pemanggil untuk digunakan oleh rutinitas penggunaan terjemahan. Struktur status pengubah mengidentifikasi status tombol pengubah keyboard.

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;
};

Setiap anggota struktur status pengubah mengidentifikasi apakah penggunaan yang sesuai diatur ke AKTIF (1) atau NONAKTIF (nol).

Lihat bagian Keterangan untuk informasi selengkapnya tentang bagaimana struktur status pengubah digunakan dengan rutinitas penggunaan terjemahan.

[in] InsertCodesProcedure

Arahkan ke rutinitas panggilan balik yang disediakan penelepon PHIDP_INSERT_SCANCODES yang digunakan rutinitas penggunaan terjemahan untuk mengembalikan kode pemindaian yang dipetakan ke pemanggil rutinitas penggunaan terjemahan.

typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
    IN PVOID  Context,
    IN PCHAR  NewScanCodes,
    IN ULONG  Length
    );

Konteks

Arahkan ke konteks pemanggil rutinitas penggunaan terjemahkan. Rutinitas penggunaan terjemahkan meneruskan penunjuk InsertCodesContext ke rutinitas InsertCodesProcedure .

NewScanCodes

Arahkan ke byte pertama dari kode pemindaian yang rutin diterjemahkan penggunaan kembali ke pemanggil rutinitas penggunaan terjemahan.

Panjang

Menentukan panjang, dalam byte, dari kode pemindaian. Kode pemindaian tidak boleh melebihi empat byte.

[in, optional] InsertCodesContext

Arahkan ke konteks yang ditentukan pemanggil bahwa rutinitas penggunaan terjemahkan diterjemahkan ke rutinitas InsertCodesProcedure .

Mengembalikan nilai

HidP_TranslateUsagesToI8042ScanCodes mengembalikan salah satu nilai status berikut:

Menampilkan kode Deskripsi
HIDP_STATUS_SUCCESS
Rutinitas penggunaan terjemahan berhasil memetakan semua penggunaan yang valid dalam daftar penggunaan yang diubah.
HIDP_STATUS_I8042_TRANS_UNKNOWN
Penggunaan dalam daftar penggunaan yang diubah dipetakan ke kode pemindaian keyboard yang tidak valid.

Keterangan

HidP_TranslateUsagesToI8042ScanCodes secara berurutan memetakan penggunaan tombol keyboard dalam daftar penggunaan yang diubah dalam urutan terjadinya dalam daftar, dimulai dengan nilai di ChangedUsageList. Setelah rutinitas penggunaan terjemahan berhasil memetakan penggunaan, ia menggunakan rutinitas InsertCodesProcedure penelepon untuk mengembalikan kode pemindaian yang sesuai ke pemanggil. Rutinitas penggunaan terjemahan terus memetakan penggunaan dalam daftar hingga salah satu hal berikut terjadi: nilai penggunaan dalam daftar adalah nol; ini memetakan jumlah penggunaan yang ditentukan oleh UsageListLength; penggunaan memetakan ke kode pemindaian keyboard yang tidak valid.

HidP_TranslateUsagesToI8042ScanCodes dirancang terutama untuk digunakan dalam perulangan pemrosesan yang berulang kali menentukan daftar penggunaan saat ini (penggunaan yang saat ini diatur ke AKTIF), membandingkannya dengan daftar penggunaan sebelumnya (penggunaan yang sebelumnya diatur ke AKTIF), dan memetakan perbedaan antara daftar penggunaan saat ini dan sebelumnya untuk membuat kode pemindaian dan memutuskan kode pemindaian. Operasi berikut menggambarkan cara menggunakan rutinitas terjemahkan penggunaan.

Sebelum memulai perulangan pemrosesan, kode pemrosesan biasanya mengalokasikan dan menginisialisasi data berikut:

  • Daftar penggunaan sebelumnya, daftar penggunaan saat ini, daftar penggunaan pemutusan, dan daftar penggunaan buat.

    Setiap daftar adalah array penggunaan yang diinisialisasi nol. Untuk memastikan bahwa kode pemrosesan memetakan semua penggunaan yang dapat berubah antara laporan input HID berturut-turut, kode pemrosesan harus mengatur jumlah elemen di setiap daftar ke jumlah maksimum penggunaan yang dapat dikembalikan HidP_GetUsages untuk halaman penggunaan HID_USAGE_PAGE_KEYBOARD. Jumlah ini diperoleh menggunakan HidP_MaxUsageListLength.

  • Struktur _HIDP_KEYBOARD_MODIFIER_STATE yang diinisialisasi nol untuk digunakan oleh rutinitas penggunaan terjemahan.

    Dalam perulangan pemrosesan, kode harus mempertahankan struktur ini untuk digunakan oleh rutinitas penggunaan terjemahan. Kode pemrosesan dapat membaca status kunci pengubah, tetapi kode tidak boleh mengubah struktur. Rutinitas penggunaan terjemahkan menggunakan struktur ini untuk mempertahankan informasi internal tentang status kunci pengubah.

Setelah menginisialisasi struktur yang diperlukan, setiap iterasi perulangan pemrosesan biasanya mencakup urutan operasi berikut:
  1. Panggil HidP_GetUsages untuk mendapatkan daftar penggunaan penggunaan saat ini yang diatur ke AKTIF. Atur parameter input UsagePage dari rutinitas dapatkan penggunaan ke HID_USAGE_PAGE_KEYBOARD.
  2. Panggil HidP_UsageListDifference untuk membandingkan daftar penggunaan saat ini dengan daftar penggunaan sebelumnya. Rutinitas perbedaan daftar penggunaan mengembalikan daftar penggunaan jeda dan daftar penggunaan buat.
  3. Panggil rutinitas penggunaan terjemahan, atur ChangedUsageList ke daftar penggunaan jeda, KeyAction ke HidP_KeyboardBreak, dan ModifierState ke struktur yang dipertahankan kode pemrosesan untuk rutinitas penggunaan terjemahan. Rutinitas penggunaan terjemahan menggunakan rutinitas panggilan balik InsertCodesProcedureuntuk mengembalikan kode pemindaian pemutusan ke perulangan pemrosesan.
  4. Panggil rutinitas penggunaan terjemahan, atur ChangedUsageList ke buat daftar penggunaan, KeyAction ke HidP_KeyboardMake, dan ModifierState ke struktur yang dipertahankan kode pemrosesan untuk rutinitas penggunaan terjemahan. Rutinitas penggunaan terjemahan menggunakan rutinitas panggilan balik InsertCodesProcedureuntuk mengembalikan kode pemindaian buat ke perulangan pemrosesan.
  5. Perbarui daftar penggunaan sebelumnya ke daftar penggunaan saat ini.
Untuk informasi tentang pemetaan antara penggunaan HID dan kode pemindaian keyboard PS/2, lihat situs web dukungan utama dan kode pemindaian .

Persyaratan

   
Klien minimum yang didukung Tersedia di Windows 2000 dan versi Windows yang lebih baru.
Target Platform Universal
Header hidpi.h (termasuk Hidpi.h)
Pustaka Hidparse.lib
IRQL <= DISPATCH_LEVEL

Lihat juga

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference