Fungsi GetAsyncKeyState (winuser.h)

Menentukan apakah kunci naik atau turun pada saat fungsi dipanggil, dan apakah tombol telah ditekan sejak panggilan sebelumnya ke GetAsyncKeyState.

Syntax

SHORT GetAsyncKeyState(
  [in] int vKey
);

Parameter-parameternya

[in] vKey

Jenis: int

Kode kunci virtual. Untuk informasi selengkapnya, lihat Kode Kunci Virtual.

Anda dapat menggunakan konstanta pembeda kiri dan kanan untuk menentukan kunci tertentu. Lihat bagian Keterangan untuk informasi lebih lanjut.

Mengembalikan nilai

Jenis: PENDEK

Bit yang paling signifikan dari nilai pengembalian diatur jika kunci yang ditentukan saat ini tidak berfungsi. Karena bit yang paling signifikan adalah bit tanda, nilai negatif menunjukkan bahwa kunci saat ini tidak berfungsi.

Untuk kompatibilitas mundur, bit paling tidak signifikan diatur jika tombol yang ditentukan telah ditekan sejak panggilan sebelumnya terbaru dalam sesi ke GetAsyncKeyState untuk kunci tersebut, tetapi nilainya tidak dapat diandalkan. (Lihat Komentar.)

Semua bit hasil lainnya dicadangkan dan harus diabaikan.

Nilai yang dikembalikan adalah nol jika panggilan gagal. Alasan kegagalan termasuk

  • Desktop saat ini bukan desktop aktif.
  • Isolasi Hak Istimewa UI (UIPI) mencegah utas panggilan mengakses utas latar depan.
  • Utas latar depan milik proses lain dan utas panggilan tidak memiliki akses DESKTOP_HOOKCONTROL atau DESKTOP_JOURNALRECORD ke desktopnya.

Komentar

Fungsi GetAsyncKeyState berfungsi dengan tombol mouse. Namun, ini memeriksa status tombol mouse fisik, bukan pada tombol mouse logis yang dipetakan oleh tombol fisik. Misalnya, panggilan GetAsyncKeyState(VK_LBUTTON) selalu mengembalikan status tombol mouse fisik kiri, terlepas dari apakah itu dipetakan ke tombol mouse logis kiri atau kanan. Anda dapat menentukan pemetaan tombol mouse fisik sistem saat ini ke tombol mouse logis dengan memanggil GetSystemMetrics(SM_SWAPBUTTON), yang mengembalikan TRUE jika tombol mouse telah ditukar.

Meskipun bit nilai pengembalian yang paling tidak signifikan menunjukkan apakah kunci telah ditekan sejak kueri terakhir, karena sifat multitugas Windows yang lebih awal, aplikasi lain dapat memanggil GetAsyncKeyState dan menerima bit "baru-baru ini ditekan" alih-alih aplikasi Anda. Perilaku bit yang paling tidak signifikan dari nilai pengembalian dipertahankan untuk kompatibilitas dengan aplikasi Windows 16-bit (yang non-preemptive) dan tidak boleh diandalkan karena dapat melaporkan negatif palsu.

Anda dapat menggunakan konstanta kode kunci virtual VK_SHIFT, VK_CONTROL, dan VK_MENU sebagai nilai untuk parameter vKey . Ini memberikan status tombol SHIFT, CTRL, atau ALT tanpa membedakan antara kiri dan kanan.

Anda dapat menggunakan konstanta kode kunci virtual berikut sebagai nilai untuk vKey untuk membedakan antara instans kiri dan kanan kunci tersebut.

Kode Meaning
VK_LSHIFT Tombol shift kiri.
VK_RSHIFT Tombol shift kanan.
VK_LCONTROL Kunci kontrol kiri.
VK_RCONTROL Kunci kontrol kanan.
VK_LMENU Tombol menu kiri.
VK_RMENU Tombol menu kanan.
 

Konstanta pembeda kiri dan kanan ini hanya tersedia saat Anda memanggil fungsi GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, dan MapVirtualKey .

Example

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
    BOOL considerSafeMode = FALSE;

    // If the user holds the CTRL key while the app is launching,
    // then offer to enter Safe Mode.
    if (GetAsyncKeyState(VK_CONTROL) < 0)
    {
        considerSafeMode = TRUE;
    }

    ...
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Platform Target Windows
Header winuser.h (termasuk Windows.h)
Library User32.lib
DLL User32.dll

Lihat juga