Bagikan melalui


Fungsi LowLevelKeyboardProc

Deskripsi

Fungsi panggilan balik yang ditentukan aplikasi atau yang ditentukan pustaka yang digunakan dengan fungsi SetWindowsHookExA/SetWindowsHookExW . Sistem memanggil fungsi ini setiap kali peristiwa input keyboard baru akan diposting ke dalam antrean input utas.

Catatan

Ketika fungsi panggilan balik ini dipanggil sebagai respons terhadap perubahan status kunci, fungsi panggilan balik dipanggil sebelum status asinkron kunci diperbarui. Akibatnya, status asinkron kunci tidak dapat ditentukan dengan memanggil GetAsyncKeyState dari dalam fungsi panggilan balik.

Jenis HOOKPROC menentukan penunjuk ke fungsi panggilan balik ini. LowLevelKeyboardProc adalah tempat penampung untuk nama fungsi yang ditentukan aplikasi atau yang ditentukan pustaka.

LRESULT CALLBACK LowLevelKeyboardProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

Parameter

code [in]

Jenis: int

Kode yang digunakan prosedur kait untuk menentukan cara memproses pesan.

Jika nCode kurang dari nol, prosedur hook harus meneruskan pesan ke fungsi CallNextHookEx tanpa pemrosesan lebih lanjut dan harus mengembalikan nilai yang dikembalikan oleh CallNextHookEx.

Parameter ini bisa menjadi salah satu nilai berikut.

Nilai Makna
HC_ACTION 0 Parameter wParam dan lParam berisi informasi tentang pesan keyboard.

wParam [in]

Jenis: WPARAM

Pengidentifikasi pesan keyboard.

Parameter ini bisa menjadi salah satu pesan berikut: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, atau WM_SYSKEYUP.

lParam [in]

Jenis: LPARAM

Penunjuk ke struktur KBDLLHOOKSTRUCT .

Mengembalikan

Jenis: LRESULT

Jika nCode kurang dari nol, prosedur hook harus mengembalikan nilai yang dikembalikan oleh CallNextHookEx.

Jika nCode lebih besar dari atau sama dengan nol, dan prosedur kait tidak memproses pesan, sangat disarankan agar Anda memanggil CallNextHookEx dan mengembalikan nilai yang dikembalikannya; jika tidak, aplikasi lain yang telah diinstal WH_KEYBOARD_LL kait tidak akan menerima pemberitahuan kait dan mungkin bertingkah tidak benar sebagai akibatnya.

Jika prosedur kait memproses pesan, itu dapat mengembalikan nilai bukan nol untuk mencegah sistem meneruskan pesan ke rantai kait lainnya atau prosedur jendela target.

Keterangan

Aplikasi menginstal prosedur kait dengan menentukan jenis hook WH_KEYBOARD_LL dan penunjuk ke prosedur hook dalam panggilan ke fungsi SetWindowsHookExA/SetWindowsHookExW .

Hook ini dipanggil dalam konteks utas yang memasangnya. Panggilan dilakukan dengan mengirim pesan ke utas yang menginstal hook. Oleh karena itu, utas yang memasang hook harus memiliki perulangan pesan.

Input keyboard dapat berasal dari driver keyboard lokal atau dari panggilan ke fungsi keybd_event . Jika input berasal dari panggilan ke keybd_event, input "disuntikkan". Namun, kait WH_KEYBOARD_LL tidak disuntikkan ke dalam proses lain. Sebaliknya, konteks beralih kembali ke proses yang menginstal kait dan dipanggil dalam konteks aslinya. Kemudian konteks beralih kembali ke aplikasi yang menghasilkan peristiwa.

Prosedur kait harus memproses pesan dalam waktu yang lebih singkat daripada entri data yang ditentukan dalam nilai LowLevelHooksTimeout dalam kunci registri berikut:

HKEY_CURRENT_USER**\**Control Panel**\**Desktop

Nilainya dalam milidetik. Jika prosedur kait kehabisan waktu, sistem meneruskan pesan ke hook berikutnya. Namun, pada Windows 7 dan yang lebih baru, kait dihapus secara diam-diam tanpa dipanggil. Tidak ada cara bagi aplikasi untuk mengetahui apakah kait dihapus.

Windows 10 versi 1709 dan yang lebih baru Nilai batas waktu maksimum yang diizinkan sistem adalah 1000 milidetik (1 detik). Sistem akan default menggunakan batas waktu 1000 milidetik jika nilai LowLevelHooksTimeout diatur ke nilai yang lebih besar dari 1000.

Catatan

Kait debug tidak dapat melacak jenis kait keyboard tingkat rendah ini. Jika aplikasi harus menggunakan kait tingkat rendah, aplikasi harus menjalankan kait pada utas khusus yang meneruskan pekerjaan ke utas pekerja dan kemudian segera kembali. Dalam kebanyakan kasus di mana aplikasi perlu menggunakan kait tingkat rendah, aplikasi harus memantau input mentah sebagai gantinya. Ini karena input mentah dapat secara asinkron memantau pesan mouse dan keyboard yang ditargetkan untuk utas lain lebih efektif daripada kait tingkat rendah. Untuk informasi selengkapnya tentang input mentah, lihat Input Mentah.

Lihat juga

CallNextHookEx

KBDLLHOOKSTRUCT

keybd_event

SetWindowsHookEx

WM_KEYDOWN

WM_KEYUP

WM_SYSKEYDOWN

WM_SYSKEYUP

Hook

Tentang Hooks