Bagikan melalui


pesan WM_INPUTLANGCHANGE

Dikirim ke jendela paling terdampak teratas setelah bahasa input aplikasi diubah. Anda harus membuat pengaturan khusus aplikasi dan meneruskan pesan ke fungsi DefWindowProc , yang meneruskan pesan ke semua jendela anak tingkat pertama. Jendela anak ini dapat meneruskan pesan ke DefWindowProc untuk meneruskan pesan ke jendela anak mereka, dan sebagainya.

Jendela menerima pesan ini melalui fungsi WindowProc-nya.

#define WM_INPUTLANGCHANGE              0x0051

Parameter

wParam

Jenis: **WPARAM**

Karakter font BYTE diatur untuk bahasa input.

Jika Anda mendaftarkan kelas jendela menggunakan versi Unicode RegisterClassEx (RegisterClassExW), Anda biasanya tidak perlu menggunakan nilai ini. Jika Anda mendaftarkan kelas jendela menggunakan versi ANSI dari RegisterClassEx (RegisterClassExA), nilai ini dapat digunakan untuk membuat font yang dapat menampilkan kumpulan karakter dengan benar. Lihat parameter iCharSet dari fungsi CreateFont untuk daftar nilai yang mungkin.

lParam

Jenis: **LPARAM**

Pengidentifikasi lokal input HKL .

Kata rendah berisi Pengidentifikasi Bahasa untuk bahasa input. Kata tinggi berisi handel perangkat.

Nilai hasil

Jenis: LRESULT

Aplikasi harus mengembalikan nonzero jika memproses pesan ini.

Keterangan

Anda dapat mengambil nama lokal BCP 47dari pengidentifikasi bahasa dengan memanggil fungsi LCIDToLocaleName. Setelah Anda memiliki nama lokal, Anda kemudian dapat menggunakan fungsi lokal modern untuk mengekstrak informasi lokal tambahan.

case WM_INPUTLANGCHANGE:
{
    HKL hkl = (HKL)lParam;
    // LANGIDs are deprecated. Use BCP 47 locale names where possible.
    LANGID langId = LOWORD(HandleToUlong(hkl));

    WCHAR localeName[LOCALE_NAME_MAX_LENGTH];
    LCIDToLocaleName(MAKELCID(langId, SORT_DEFAULT), localeName, LOCALE_NAME_MAX_LENGTH, 0);

    // Get the ISO abbreviated language name (for example, "eng").
    WCHAR lang[9];
    GetLocaleInfoEx(localeName, LOCALE_SISO639LANGNAME2, lang, 9);
    
    // Get the keyboard layout identifier (for example, "00020409" for United States-International keyboard layout)
    WCHAR keyboardLayoutId[KL_NAMELENGTH];
    GetKeyboardLayoutNameW(keyboardLayoutId);
}

Untuk mendapatkan nama tata letak keyboard yang saat ini aktif, panggil GetKeyboardLayoutName. Untuk informasi selengkapnya, lihat Bahasa, Lokal, dan Tata Letak Keyboard.

Untuk daftar tata letak input yang disediakan dengan Windows, lihat Pengidentifikasi Keyboard dan Editor Metode Input untuk Windows.

Perubahan profil Editor Metode Input (IME) mungkin tidak diberi tahu dengan WM_INPUTLANGCHANGE. Anda dapat menggunakan ITfActiveLanguageProfileNotifySink dari Kerangka Kerja Layanan Teks untuk menangani perubahan layanan bahasa atau teks aktif.

Dimulai dengan Windows 8

Beberapa tata letak input mungkin tidak memiliki pengidentifikasi bahasa yang ditetapkan dan dapat dilaporkan sebagai pengidentifikasi bahasa sementara, seperti LOCALE_TRANSIENT_KEYBOARD1 (0x2000) atau LOCALE_TRANSIENT_KEYBOARD2 (0x2400), dalam kata rendah LPARAM.

Karena pengidentifikasi bahasa sementara ini dapat ditetapkan kembali oleh sistem kapan saja (seperti ketika pengguna mengubah Profil Bahasa mereka), dan dapat mengidentifikasi lokal yang berbeda berdasarkan pengguna dan/atau sistem, mereka tidak dapat dianggap sebagai pengidentifikasi yang tahan lama. Lihat Penghentian LCID untuk informasi selengkapnya.

Ambil bahasa yang terkait dengan tata letak keyboard saat ini atau metode input dengan memanggil Windows.Globalization.Language.CurrentInputMethodLanguageTag. Jika aplikasi Anda meneruskan tag bahasa dari CurrentInputMethodLanguageTag ke fungsi Dukungan Bahasa Nasional apa pun, aplikasi harus terlebih dahulu mengonversi tag dengan ResolveLocaleName. Jika Anda ingin diberi tahu tentang perubahan bahasa di aplikasi UWP, tangani peristiwa Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged .

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung
Windows 2000 Server [hanya aplikasi desktop]
Header
Winuser.h (termasuk Windows.h)

Baca juga

Referensi

Konseptual