Aracılığıyla paylaş


Klavye Girişlerine Genel Bakış

Uygulamalar hem klavyeden hem de fareden kullanıcı girişini kabul etmelidir. Uygulama, pencerelerine gönderilen iletiler biçiminde klavye girişi alır.

Klavye Giriş Modeli

Sistem, geçerli klavyeye uygun bir klavye cihaz sürücüsü yükleyerek uygulamalar için cihazdan bağımsız klavye desteği sağlar. Sistem, kullanıcı veya uygulama tarafından seçilen dile özgü klavye düzenini kullanarak dilden bağımsız klavye desteği sağlar. Klavye cihaz sürücüsü, klavyeden aldığı tarama kodlarını klavye düzenine gönderir, burada bu kodlar iletilere dönüştürülerek uygulamanızdaki uygun pencerelere gönderilir.

Klavyedeki her tuşa atanan benzersiz bir değer olan tarama kodu, klavye üzerindeki tuşun cihaza özgü bir tanımlayıcısıdır. Bir klavye, kullanıcı bir tuş yazdığınızda iki tarama kodu oluşturur: biri tuşa bastığında, diğeri de tuşu serbest bıraktığında.

Klavye cihaz sürücüsü bir tarama kodunu işleyerek yorumlar ve bu kodu, sistem tarafından tanımlanan, anahtarın amacını belirleyen cihazdan bağımsız bir değer olan sanal anahtar kodu olarak çevirir (eşler). Bir tarama kodunu çevirdikten sonra, klavye düzeni tarama kodunu, sanal anahtar kodunu ve tuş vuruşu hakkındaki diğer bilgileri içeren bir ileti oluşturur ve ardından iletiyi sistem ileti kuyruğuna yerleştirir. Sistem, iletiyi sistem ileti kuyruğundan kaldırır ve uygun iş parçacığının ileti kuyruğuna gönderir. Sonunda, iş parçacığının mesaj döngüsü mesajı kaldırır ve işlemek için uygun pencere yordamına aktarır. Aşağıdaki şekilde klavye giriş modeli gösterilmektedir.

klavye giriş işleme modeli

Klavye Odağı ve Etkinleştirme

Sistem, klavye iletilerini, klavye odağıyla pencereyi oluşturan ön plan iş parçacığının ileti kuyruğuna gönderir. klavye odağı bir pencerenin geçici özelliğidir. Sistem, klavye odağını kullanıcının yönlendirmesine göre bir pencereden diğerine kaydırarak klavyeyi ekrandaki tüm pencereler arasında paylaşır. Klavye odağını içeren pencere, odak farklı bir pencereye değişene kadar tüm klavye iletilerini alır (bunu oluşturan yazışmanın ileti kuyruğundan).

İş parçacığı, şu anda klavye odağının hangi pencerelerde (varsa) olduğunu belirlemek için GetFocus işlevini çağırabilir. Bir iş parçacığı, SetFocus işlevini çağırarak klavye odağını pencerelerinden birine verebilir. Klavye odağı bir pencereden diğerine değiştiğinde, sistem odağı kaybeden pencereye bir WM_KILLFOCUS iletisi gönderir ve ardından odağı alan pencereye bir WM_SETFOCUS iletisi gönderir.

Klavye odağı kavramı, etkin pencereninkiyle ilgilidir. etkin penceresi kullanıcının şu anda üzerinde çalıştığı en üst düzey penceredir. Klavye odağı olan pencere etkin pencere veya etkin pencerenin alt penceresidir. Kullanıcının etkin pencereyi tanımlamasına yardımcı olmak için, sistem bunu Z sırasının en üstüne yerleştirir ve başlık çubuğunu (varsa) ve kenarlığını vurgular.

Kullanıcı bir üst düzey pencereyi tıklayarak, Alt+Sekme kullanarak veya Alt+Esc tuş bileşimini kullanarak veya Görev Listesi'nden seçerek etkinleştirebilir. İş parçacığı, SetActiveWindow işlevini kullanarak üst düzey bir pencereyi etkinleştirebilir. GetActiveWindow işlevini kullanarak, oluşturduğu en üst düzey pencerenin etkin olup olmadığını belirleyebilir.

Bir pencere devre dışı bırakıldığında ve başka bir pencere etkinleştirildiğinde sistem WM_ACTIVATE iletisini gönderir. Pencere devre dışı bırakılıyorsa wParam parametresinin düşük sıralı sözcüğü sıfırdır, etkinleştiriliyorsa sıfırdan farklıdır. Varsayılan pencere yordamı WM_ACTIVATE iletisini aldığında, klavye odağını etkin pencereye ayarlar.

Klavye ve fare giriş olaylarının uygulamalara ulaşmasını engellemek için BlockInputkullanın. BlockInput işlevinin zaman uyumsuz klavye giriş durumu tablosuyla karışmayacağını unutmayın. Bu, giriş engellenirken SendInput işlevini çağırmanın zaman uyumsuz klavye giriş durumu tablosunu değiştireceği anlamına gelir.

Tuş Vuruşu İletileri

Bir tuşa basıldığında, klavye odağına sahip pencereye bağlı iş parçacığı mesaj kuyruğuna bir WM_KEYDOWN veya WM_SYSKEYDOWN mesajı yerleştirilir. Anahtarın serbest bırakılması, WM_KEYUP veya WM_SYSKEYUP iletisinin kuyruğa yerleştirilmesine neden olur.

Yukarı ve aşağı tuşa basma iletileri genellikle çiftler halinde gerçekleşir, ancak kullanıcı klavyenin otomatik yineleme özelliğini başlatacak kadar uzun süre bir tuşu basılı tutarsa, sistem bir satırda bir dizi WM_KEYDOWN veya WM_SYSKEYDOWN iletisi oluşturur. Ardından kullanıcı anahtarı serbest bıraktığında tek bir WM_KEYUP veya WM_SYSKEYUP iletisi oluşturur.

Bu bölümde aşağıdaki konular ele alınır:

Sistem ve Sistem Dışı Tuş Vuruşları

Sistem, sistem tuş vuruşları ile sistem dışı tuş vuruşları arasında ayrım yapar. Sistem tuş vuruşları, WM_SYSKEYDOWN ve WM_SYSKEYUPsistem tuş vuruşu iletilerini üretir. Sistem dışı tuş vuruşları, WM_KEYDOWN ve WM_KEYUPmesajları oluşturur.

Pencere yordamınızın bir sistem tuş vuruşu iletisini işlemesi gerekiyorsa, iletiyi işledikten sonra yordamın bunu DefWindowProc işlevine geçirdiğinden emin olun. Aksi takdirde, pencere klavye odağına sahip olduğunda Alt tuşunu içeren tüm sistem işlemleri devre dışı bırakılır. Başka bir ifadeyle, kullanıcı pencerenin menülerine veya Sistem menüsüne erişemez veya farklı bir pencereyi etkinleştirmek için Alt+Esc veya Alt+Sekme tuş vuruşunu kullanamaz.

Sistem tuş vuruşu iletileri öncelikli olarak bir uygulama yerine sistem tarafından kullanılır. Sistem bunları menülere yerleşik klavye arabirimini sağlamak ve kullanıcının hangi pencerenin etkin olduğunu denetlemesine izin vermek için kullanır. Sistem tuş vuruşu iletileri, kullanıcı Alt tuşuyla birlikte bir tuşa bastığında veya hiçbir pencerede klavye odağı olmadığında (örneğin, etkin uygulama simge durumuna küçültüldüğünde) oluşturulur. Bu durumda, iletiler etkin pencereye eklenen ileti kuyruğuna postalanır.

Sistem dışı tuş vuruşu iletileri uygulama pencereleri tarafından kullanılır; DefWindowProc işlevi bunlarla hiçbir şey yapmaz. Bir pencere işlemi, ihtiyaç duymadığı sistem dışı tuş vuruşu iletilerini atabilir.

Virtual-Key Kodları Açıklandı

Bir tuş vuruşu iletisinin wParam parametresi, basılan veya yayımlanan anahtarın sanal anahtar kodu içerir. Pencere yordamı, sanal anahtar kodunun değerine bağlı olarak bir tuş vuruşu iletisini işler veya yoksayar.

Tipik bir pencere yordamı, aldığı tuş vuruşu iletilerinin yalnızca küçük bir alt kümesini işler ve gerisini yoksayar. Örneğin, bir pencere yordamı yalnızca WM_KEYDOWN tuş vuruşu iletilerini ve yalnızca imleç taşıma tuşları, shift tuşları (denetim tuşları olarak da adlandırılır) ve işlev tuşları için sanal anahtar kodları içerenleri işleyebilir. Tipik bir pencere yordamı, karakter anahtarlarından gelen tuş vuruşu iletilerini işlemez. Bunun yerine, TranslateMessage işlevini kullanarak iletiyi karakter iletilerine dönüştürür. TranslateMessage ve karakter iletileri hakkında daha fazla bilgi için bkz. Karakter İletileri.

Tuş Vuruşu Mesaj Bayrakları

Bir tuş vuruşu iletisinin lParam parametresi, iletiyi oluşturan tuş vuruşu hakkında ek bilgi içerir. Bu bilgiler, yineleme sayısı, tarama kodu, genişletilmiş anahtar bayrağı, bağlam kodu, önceki anahtar durumu bayrağıve geçiş durumu bayrağıiçerir. Aşağıdaki çizimde bu bayrakların ve değerlerin lParam parametresindeki konumları gösterilmektedir.

Bir tuş vuruşu iletisinin lparam parametresindeki bayrakların ve değerlerin konumlarını

Bir uygulama, lParam yüksek sıralı sözcüğünden tuş vuruşu bayraklarını almak için aşağıdaki değerleri kullanabilir.

Değer Açıklama
KF_EXTENDED
0x0100
genişletilmiş anahtar bayrağınımanipüle eder.
KF_DLGMODE
0x0800
İletişim kutusunun etkin olup olmadığını gösteren iletişim modu bayrağını işler.
KF_MENUMODE
0x1000
Bir menünün etkin olup olmadığını gösteren menü modu bayrağını işler.
KF_ALTDOWN
0x2000
bağlam kodu bayrağını manipüle eder.
KF_REPEAT
0x4000
önceki anahtar durumu bayrağını manipüle eder.
KF_UP
0x8000
geçiş durumu bayrağınımanipüle eder.

Örnek kod:

case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
{
    WORD vkCode = LOWORD(wParam);                                 // virtual-key code
    
    WORD keyFlags = HIWORD(lParam);

    WORD scanCode = LOBYTE(keyFlags);                             // scan code
    BOOL isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED; // extended-key flag, 1 if scancode has 0xE0 prefix
    
    if (isExtendedKey)
        scanCode = MAKEWORD(scanCode, 0xE0);

    BOOL wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT;        // previous key-state flag, 1 on autorepeat
    WORD repeatCount = LOWORD(lParam);                            // repeat count, > 0 if several keydown messages was combined into one message

    BOOL isKeyReleased = (keyFlags & KF_UP) == KF_UP;             // transition-state flag, 1 on keyup

    // if we want to distinguish these keys:
    switch (vkCode)
    {
    case VK_SHIFT:   // converts to VK_LSHIFT or VK_RSHIFT
    case VK_CONTROL: // converts to VK_LCONTROL or VK_RCONTROL
    case VK_MENU:    // converts to VK_LMENU or VK_RMENU
        vkCode = LOWORD(MapVirtualKeyW(scanCode, MAPVK_VSC_TO_VK_EX));
        break;
    }

    // ...
}
break;

Yineleme Sayısı

Tuş vuruşu iletisinin birden fazla tuş vuruşunu temsil edip etmediğini belirlemek için yineleme sayısını de kontrol edebilirsiniz. Sistem, klavye WM_KEYDOWN veya WM_SYSKEYDOWN iletileri bir uygulamanın işleyebileceğinden daha hızlı oluşturduğunda sayıyı artırır. Bu durum genellikle kullanıcı klavyenin otomatik yineleme özelliğini başlatacak kadar uzun süre basılı tuttuğunda oluşur. Sistem, sistem mesaj kuyruğunu sonuçta elde edilen tuşa basma iletileriyle doldurmak yerine, iletileri tek bir tuşa basma iletisi halinde birleştirir ve yineleme sayısını artırır. Anahtarın serbest bırakılması otomatik yineleme özelliğini başlatamadığından, WM_KEYUP ve WM_SYSKEYUP iletileri için yineleme sayısı her zaman 1 olarak ayarlanır.

Tarama Kodları

Her tuş için tuş konumlarını içeren Tür 4 klavye diyagramı.

Tarama kodu, kullanıcı bir tuşa bastığında sistemin oluşturduğu değerdir. aktifklavye düzeninden bağımsız olarak basılan tuşu tanımlayan bir değerdir, bu tuşun temsil ettiği karakterin aksine. Bir uygulama genellikle tarama kodlarını yoksayar. Bunun yerine, tuş vuruşu iletilerini yorumlamak için sanal anahtar kodlarını kullanır.

Modern klavyeler, bir bilgisayarla iletişim kurmak için İnsan Arabirim Cihazları (HID) belirtimini kullanıyor. Klavye sürücüsü, kodları taramak için klavyeden gönderilen bildirilen HID Kullanımı değerlerini dönüştürür ve bunları uygulamalara geçirir.

Not

Sanal anahtar kodları genellikle masaüstü uygulamaları için daha yararlı olsa da, geçerliklavye düzeninden bağımsız olarak hangi tuşa basıldığını bilmeniz gereken belirli durumlarda tarama kodları gerekebilir. Örneğin, US QWERTY veya Fransızca AZERTY klavye düzenleri arasında tutarlı bir tuş dizilimi sağlayan WASD (W yukarı, A sol, S aşağı ve D sağ) tuş atamaları.

Aşağıdaki tabloda, Windows tarafından şu anda tanındığı şekilde Tarama Kodları kümesi listelenmektedir. HID Kullanım Sayfası/HID Kullanım Kimliği/HID Kullanım Adı değerleri, HID Kullanım Tabloları belgesine başvurur. Tuş Konumu değerleri önceki klavye görüntüsüne başvurur.

Scan 1 Make kodu WM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUP ve WM_INPUT iletilerde teslim edilir.

HID Kullanım Sayfası Adı HID Kullanım Adı HID Kullanım Sayfası HID Kullanım Kimliği Tarama 1 Yap Anahtar Konumu
Genel Masaüstü Sistem Kapatma 0x0001 0x0081 0xE05E
Genel Masaüstü Sistem Uyku 0x0001 0x0082 0xE05F
Genel Masaüstü Sistem Uyandırma 0x0001 0x0083 0xE063
Klavye/Tuş Takımı ErrorRollOver 0x0007 0x0001 0x00FF
Klavye/Tuş Takımı Klavye A 0x0007 0x0004 0x001E 31
Klavye/Tuş Takımı Klavye B 0x0007 0x0005 0x0030 50
Klavye/Tuş Takımı Klavye C 0x0007 0x0006 0x002E 48
Klavye/Tuş Takımı Klavye D 0x0007 0x0007 0x0020 33
Klavye/Tuş Takımı Klavye E 0x0007 0x0008 0x0012 19
Klavye/Tuş Takımı Klavye F 0x0007 0x0009 0x0021 34
Klavye/Tuş Takımı Klavye G 0x0007 0x000A 0x0022 35
Klavye/Tuş Takımı Klavye H 0x0007 0x000B 0x0023 36
Klavye/Tuş Takımı Klavye I 0x0007 0x000C 0x0017 yirmi dört
Klavye/Tuş Takımı Klavye J 0x0007 0x000D 0x0024 37
Klavye/Tuş Takımı Klavye K 0x0007 0x000E 0x0025 38
Klavye/Tuş Takımı Klavye L 0x0007 0x000F 0x0026 39
Klavye/Tuş Takımı Klavye M 0x0007 0x0010 0x0032 52
Klavye/Tuş Takımı Klavye N 0x0007 0x0011 0x0031 51
Klavye/Tuş Takımı Klavye O 0x0007 0x0012 0x0018 Yirmi beş
Klavye/Tuş Takımı Klavye P 0x0007 0x0013 0x0019 26
Klavye/Tuş Takımı Klavye Q 0x0007 0x0014 0x0010 17
Klavye/Tuş Takımı Klavye R 0x0007 0x0015 0x0013 20
Klavye/Tuş Takımı Klavye S 0x0007 0x0016 0x001F 32
Klavye/Tuş Takımı Klavye T 0x0007 0x0017 0x0014 21
Klavye/Tuş Takımı Klavye U 0x0007 0x0018 0x0016 23
Klavye/Tuş Takımı Klavye V 0x0007 0x0019 0x002F 49
Klavye/Tuş Takımı Klavye W 0x0007 0x001A 0x0011 18
Klavye/Tuş Takımı Klavye X 0x0007 0x001B 0x002D 47
Klavye/Tuş Takımı Klavye Y 0x0007 0x001C 0x0015 22
Klavye/Tuş Takımı Klavye Z 0x0007 0x001D 0x002C 46
Klavye/Tuş Takımı Klavye 1 ve Bang 0x0007 0x001E 0x0002 2
Klavye/Tuş Takımı Klavye 2 ve At 0x0007 0x001F 0x0003 3
Klavye/Tuş Takımı Klavye 3 ve karma 0x0007 0x0020 0x0004 4
Klavye/Tuş Takımı Klavye 4 ve Dolar 0x0007 0x0021 0x0005 5
Klavye/Tuş Takımı Klavye 5 ve Yüzde 0x0007 0x0022 0x0006 6
Klavye/Tuş Takımı Klavye 6 ve Düzeltme İşareti 0x0007 0x0023 0x0007 7
Klavye/Tuş Takımı Klavye 7 ve Ampersand 0x0007 0x0024 0x0008 8
Klavye/Tuş Takımı Klavye 8 ve Yıldız 0x0007 0x0025 0x0009 9
Klavye/Tuş Takımı Klavye 9 ve Sol Köşeli Ayraç 0x0007 0x0026 0x000A 10
Klavye/Tuş Takımı Klavye 0 ve Sağ Köşeli Ayraç 0x0007 0x0027 0x000B 11
Klavye/Tuş Takımı Klavye Geri Enter 0x0007 0x0028 0x001C 43
Klavye/Tuş Takımı Klavye Çıkışı 0x0007 0x0029 0x0001 110
Klavye/Tuş Takımı Klavye Silme Tuşu 0x0007 0x002A 0x000E 15
Klavye/Tuş Takımı Klavye Sekmesi 0x0007 0x002B 0x000F 16
Klavye/Tuş Takımı Klavye Ara Çubuğu 0x0007 0x002C 0x0039 61
Klavye/Tuş Takımı Klavye Çizgi ve Alt Çizgi 0x0007 0x002D 0x000C 12
Klavye/Tuş Takımı Klavye'de Eşittir ve Artı Tuşu 0x0007 0x002E 0x000D 13 (on üç)
Klavye/Tuş Takımı Klavye Sol Ayracı 0x0007 0x002F 0x001A 27
Klavye/Tuş Takımı Klavye Sağ Ayracı 0x0007 0x0030 0x001B 28
Klavye/Tuş Takımı Klavye Ters Eğik Çizgi ve Kanal 0x0007 0x0031 0x002B 29
Klavye/Tuş Takımı Klavye ABD Dışı Karma ve Tilde 0x0007 0x0032 0x002B 42
Klavye/Tuş Takımı Klavye Noktalı Virgül ve İki Nokta 0x0007 0x0033 0x0027 40
Klavye/Tuş Takımı Klavye Kesme İşareti ve Çift Tırnak İşareti 0x0007 0x0034 0x0028 41
Klavye/Tuş Takımı Klavye Aksan ve Tilde 0x0007 0x0035 0x0029 1
Klavye/Tuş Takımı Klavye Virgül ve LessThan 0x0007 0x0036 0x0033 53
Klavye/Tuş Takımı Klavye Dönemi ve GreaterThan 0x0007 0x0037 0x0034 54
Klavye/Tuş Takımı Klavye ileri eğik çizgi ve soru işareti tuşları 0x0007 0x0038 0x0035 55
Klavye/Tuş Takımı Klavye Caps Lock tuşu 0x0007 0x0039 0x003A 30
Klavye/Tuş Takımı Klavye F1 0x0007 0x003A 0x003B 112
Klavye/Tuş Takımı Klavye F2 0x0007 0x003B 0x003C 113
Klavye/Tuş Takımı Klavye F3 0x0007 0x003C 0x003D 114
Klavye/Tuş Takımı Klavye F4 0x0007 0x003D 0x003E 115
Klavye/Tuş Takımı Klavye F5 0x0007 0x003E 0x003F 116
Klavye/Tuş Takımı Klavye F6 0x0007 0x003F 0x0040 117
Klavye/Tuş Takımı Klavye F7 0x0007 0x0040 0x0041 118
Klavye/Tuş Takımı Klavye F8 0x0007 0x0041 0x0042 119
Klavye/Tuş Takımı Klavye F9 0x0007 0x0042 0x0043 120
Klavye/Tuş Takımı Klavye F10 0x0007 0x0043 0x0044 121
Klavye/Tuş Takımı Klavye F11 0x0007 0x0044 0x0057 122
Klavye/Tuş Takımı Klavye F12 0x0007 0x0045 0x0058 123
Klavye/Tuş Takımı Klavye Ekran Görüntüsü Tuşu 0x0007 0x0046 0xE037
0x0054 *Dipnot 1
124
Klavye/Tuş Takımı Klavye Kaydırma Kilidi 0x0007 0x0047 0x0046 125
Klavye/Tuş Takımı Klavye Molası 0x0007 0x0048 0xE11D45
0xE046 *Not 2
0x0045 *Not 3
126
Klavye/Tuş Takımı Klavye Ekle 0x0007 0x0049 0xE052 75
Klavye/Tuş Takımı Klavye Giriş Sayfası 0x0007 0x004A 0xE047 80
Klavye/Tuş Takımı Klavye PageUp tuşu 0x0007 0x004B 0xE049 85
Klavye/Tuş Takımı Klavye İleri Sil 0x0007 0x004C 0xE053 76
Klavye/Tuş Takımı Klavye End Tuşu 0x0007 0x004D 0xE04F 81
Klavye/Tuş Takımı Klavye Sayfasıİndir 0x0007 0x004E 0xE051 86
Klavye/Tuş Takımı Klavye Sağ Ok 0x0007 0x004F 0xE04D 89
Klavye/Tuş Takımı Klavye LeftArrow 0x0007 0x0050 0xE04B 79
Klavye/Tuş Takımı Klavye Aşağı Ok 0x0007 0x0051 0xE050 84
Klavye/Tuş Takımı Klavye Yukarı Ok Tuşu 0x0007 0x0052 0xE048 83
Klavye/Tuş Takımı Tuş Takımı Num Lock ve Clear 0x0007 0x0053 0x0045
0xE045 *Not 3
90
Klavye/Tuş Takımı Tuş Takımı Eğik Çizgi 0x0007 0x0054 0xE035 95
Klavye/Tuş Takımı Tuş Takımı Yıldızı 0x0007 0x0055 0x0037 100
Klavye/Tuş Takımı Tuş Takımı Paneli 0x0007 0x0056 0x004A 105
Klavye/Tuş Takımı Tuş Takımı Artı 0x0007 0x0057 0x004E 106
Klavye/Tuş Takımı Tuş Takımı ENTER 0x0007 0x0058 0xE01C 108
Klavye/Tuş Takımı Tuş Takımı 1 ve Son 0x0007 0x0059 0x004F 93
Klavye/Tuş Takımı Tuş Takımı 2 ve Aşağı Ok 0x0007 0x005A 0x0050 98
Klavye/Tuş Takımı Tuş Takımı 3 ve PageDn 0x0007 0x005B 0x0051 103
Klavye/Tuş Takımı Tuş Takımı 4 ve Sol Ok 0x0007 0x005C 0x004B 92
Klavye/Tuş Takımı Tuş Takımı 5 0x0007 0x005D 0x004C 97
Klavye/Tuş Takımı Tuş Takımı 6 ve Sağ Ok 0x0007 0x005E 0x004D 102
Klavye/Tuş Takımı Tuş Takımı 7 ve Home 0x0007 0x005F 0x0047 91
Klavye/Tuş Takımı Tuş Takımı 8 ve Yukarı Ok 0x0007 0x0060 0x0048 96
Klavye/Tuş Takımı Tuş Takımı 9 ve PageUp 0x0007 0x0061 0x0049 101
Klavye/Tuş Takımı Tuş Takımı 0 ve Ekle 0x0007 0x0062 0x0052 99
Klavye/Tuş Takımı Tuş Takımı Dönemi ve Silme 0x0007 0x0063 0x0053 104
Klavye/Tuş Takımı Klavye ABD Dışı Ters Eğik Çizgi ve Boru 0x0007 0x0064 0x0056 45
Klavye/Tuş Takımı Klavye Uygulaması 0x0007 0x0065 0xE05D 129
Klavye/Tuş Takımı Klavye Gücü 0x0007 0x0066 0xE05E
Klavye/Tuş Takımı Tuş Takımı Eşittir 0x0007 0x0067 0x0059
Klavye/Tuş Takımı Klavye F13 0x0007 0x0068 0x0064
Klavye/Tuş Takımı Klavye F14 0x0007 0x0069 0x0065
Klavye/Tuş Takımı Klavye F15 0x0007 0x006A 0x0066
Klavye/Tuş Takımı Klavye F16 0x0007 0x006B 0x0067
Klavye/Tuş Takımı Klavye F17 0x0007 0x006C 0x0068
Klavye/Tuş Takımı Klavye F18 0x0007 0x006D 0x0069
Klavye/Tuş Takımı Klavye F19 0x0007 0x006E 0x006A
Klavye/Tuş Takımı Klavye F20 0x0007 0x006F 0x006B
Klavye/Tuş Takımı Klavye F21 0x0007 0x0070 0x006C
Klavye/Tuş Takımı Klavye F22 0x0007 0x0071 0x006D
Klavye/Tuş Takımı Klavye F23 0x0007 0x0072 0x006E
Klavye/Tuş Takımı Klavye F24 0x0007 0x0073 0x0076
Klavye/Tuş Takımı Tuş Takımı Virgül Butonu 0x0007 0x0085 0x007E 107 *Not 4
Klavye/Tuş Takımı Klavye Uluslararası1 0x0007 0x0087 0x0073 56 *Not 4, 5
Klavye/Tuş Takımı Klavye Uluslararası2 0x0007 0x0088 0x0070 133 *Nota 5
Klavye/Tuş Takımı Klavye Uluslararası3 0x0007 0x0089 0x007D 14 *Not 5
Klavye/Tuş Takımı Klavye Uluslararası4 0x0007 0x008A 0x0079 132 *Not 5
Klavye/Tuş Takımı Klavye Uluslararası5 0x0007 0x008B 0x007B 131 *Not 5
Klavye/Tuş Takımı Klavye Uluslararası6 0x0007 0x008C 0x005C
Klavye/Tuş Takımı Klavye LANG1 0x0007 0x0090 0x0072 *Dipnot 6
0x00F2 *Not 3, 6
Klavye/Tuş Takımı Klavye LANG2 0x0007 0x0091 0x0071 *Not 6
0x00F1 *Not 3, 6
Klavye/Tuş Takımı Klavye LANG3 0x0007 0x0092 0x0078
Klavye/Tuş Takımı Klavye LANG4 0x0007 0x0093 0x0077
Klavye/Tuş Takımı Klavye LANG5 0x0007 0x0094 0x0076
Klavye/Tuş Takımı Klavye LeftControl 0x0007 0x00E0 0x001D 58
Klavye/Tuş Takımı Klavye LeftShift 0x0007 0x00E1 0x002A 44
Klavye/Tuş Takımı Klavye LeftAlt 0x0007 0x00E2 0x0038 60
Klavye/Tuş Takımı Klavye Sol Arayüz Tuşu 0x0007 0x00E3 0xE05B 127
Klavye/Tuş Takımı Klavye Sağ Denetimi 0x0007 0x00E4 0xE01D 64
Klavye/Tuş Takımı Klavye RightShift 0x0007 0x00E5 0x0036 57
Klavye/Tuş Takımı Klavye RightAlt 0x0007 0x00E6 0xE038 62
Klavye/Tuş Takımı Klavye Sağ Tuş GUI 0x0007 0x00E7 0xE05C 128
Tüketici Sonraki Şarkıyı Tara 0x000C 0x00B5 0xE019
Tüketici Önceki Parçayı Tara 0x000C 0x00B6 0xE010
Tüketici Durmak 0x000C 0x00B7 0xE024
Tüketici Yürüt/Duraklat 0x000C 0x00CD 0xE022
Tüketici Sessiz 0x000C 0x00E2 0xE020
Tüketici Ses Arttırma 0x000C 0x00E9 0xE030
Tüketici Hacim Azaltma 0x000C 0x00EA 0xE02E
Tüketici AL Tüketici Denetimi Yapılandırması 0x000C 0x0183 0xE06D
Tüketici AL E-posta Okuyucusu 0x000C 0x018A 0xE06C
Tüketici AL Hesap Makinesi 0x000C 0x0192 0xE021
Tüketici AL Yerel Makine Tarayıcısı 0x000C 0x0194 0xE06B
Tüketici AC Araması 0x000C 0x0221 0xE065
Tüketici AC Giriş Sayfası 0x000C 0x0223 0xE032
Tüketici AC Geri Dön 0x000C 0x0224 0xE06A
Tüketici AC Yönlendirme 0x000C 0x0225 0xE069
Tüketici AC Durağı 0x000C 0x0226 0xE068
Tüketici Klima Yenileme 0x000C 0x0227 0xE067
Tüketici AC Yer İşaretleri 0x000C 0x022A 0xE066

Notlar:

  1. SysRq tuş tarama kodu, Alt+Print ekranı tuş kombinasyonu olarak veriliyor.
  2. Kesme tuş tarama kodu Ctrl+Duraklat bir tuşa basıldığında
  3. Eski klavye iletilerinde görüldüğü gibi
  4. Tuş Brezilya klavyelerinde bulunur
  5. Tuş Japonca klavyelerde bulunur
  6. Tarama kodu yalnızca anahtar bırakma olayında gönderilir

Extended-Key İşareti

Genişletilmiş tuş bayrağı, tuş vuruşu iletisinin Gelişmiş 101/102 tuşlu klavyedeki ek tuşlardan birinden kaynaklanıp kaynaklandığını gösterir. Genişletilmiş tuşlar, klavyenin sağ tarafındaki Alt ve Ctrl tuşlarından oluşur; Insert*, Delete*, Home, End, Page up, Page downve Ok tuşlarını sayısal tuş takımının solundaki kümelerde; Num lock anahtarı; Break (Ctrl+Pause) tuşu; Yazdırma ekranı tuşu; ve Böl (/) ve sayısal tuş takımında tuşlarını girin. Shift tuşunun sağ genişletilmiş anahtar olarak kabul edilmez, bunun yerine ayrı bir tarama kodu vardır.

Belirtilirse, tarama kodu iki baytlık bir diziden oluşur ve burada ilk bayt 0xE0 değerine sahiptir.

Bağlam Kodu

Bağlam kodu, tuş vuruşu iletisi oluşturulduğunda Alt tuşunun devre dışı olup olmadığını gösterir. Kod, Alt tuşu basılıysa 1, değilse 0'dır.

Önceki Key-State Bayrağı

Önceki anahtar durumu bayrağı, tuş vuruşu iletisini oluşturan anahtarın daha önce yukarı mı yoksa aşağı mı olduğunu gösterir. Anahtar daha önce çalışmıyorsa 1, anahtar daha önce çalışır durumdaysa 0'dır. Klavyenin otomatik yineleme özelliği tarafından oluşturulan tuş vuruşu iletilerini tanımlamak için bu bayrağı kullanabilirsiniz. Bu bayrak, otomatik yineleme özelliği tarafından oluşturulan WM_KEYDOWN ve WM_SYSKEYDOWN tuş vuruşu iletileri için 1 olarak ayarlanır. WM_KEYUP ve WM_SYSKEYUP iletileri için her zaman 1 olarak ayarlanır.

Geçiş Durumu Bayrağı

Geçiş durumu bayrağı, tuşa basıldığında mı yoksa bir tuş serbest bırakıldığında mı tuş vuruşu iletisinin oluşturulduğunu gösterir. Bu bayrak, WM_KEYDOWN ve WM_SYSKEYDOWN iletileri için her zaman 0 olarak ayarlanır; WM_KEYUP ve WM_SYSKEYUP iletileri için her zaman 1 olarak ayarlanır.

Karakter İletileri

Tuş vuruşu iletileri tuş vuruşları hakkında çok fazla bilgi sağlar, ancak karakter tuş vuruşları için karakter kodları sağlamaz. Karakter kodlarını almak için bir uygulamanın iş parçacığı ileti döngüsünde TranslateMessage işlevini içermesi gerekir. TranslateMessage, klavye düzenine bir WM_KEYDOWN veya WM_SYSKEYDOWN iletisi geçirir. Düzen, iletinin sanal anahtar kodunu inceler ve bir karakter anahtarına karşılık geliyorsa karakter kodu eşdeğerini sağlar (Shift ve Caps Lock tuşlarının durumunu dikkate alarak). Ardından karakter kodunu içeren bir karakter iletisi oluşturur ve iletiyi ileti kuyruğunun en üstüne yerleştirir. İleti döngüsünün sonraki yinelemesi, karakter iletisini kuyruktan kaldırır ve iletiyi uygun pencere yordamına gönderir.

Bu bölümde aşağıdaki konular ele alınır:

Sistem Dışı Karakter İletileri

Pencere yordamı şu karakter iletilerini alabilir: WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, WM_SYSDEADCHARve WM_UNICHAR. TranslateMessage işlevi, WM_KEYDOWN bir iletiyi işlerken bir WM_CHAR veya WM_DEADCHAR iletisi oluşturur. Benzer şekilde, WM_SYSKEYDOWN iletisi işlendiğinde, bir WM_SYSCHAR veya WM_SYSDEADCHAR iletisi oluşturur.

Klavye girişini işleyen bir uygulama genellikle WM_CHAR ve WM_UNICHAR iletileri dışındaki tüm iletileri yoksayar ve diğer iletileri DefWindowProc işlevine geçirir. WM_CHAR UTF-16 (16 bit Unicode Dönüştürme Biçimi) veya ANSI karakter kümesi kullanırken WM_UNICHAR her zaman UTF-32 (32 bit Unicode Dönüştürme Biçimi) kullandığını unutmayın. Sistem, menü anımsatıcılarını uygulamak için WM_SYSCHAR ve WM_SYSDEADCHAR iletilerini kullanır.

Tüm karakter iletilerinin wParam parametresi, basılan karakter tuşunun karakter kodunu içerir. Karakter kodunun değeri, iletiyi alan pencerenin pencere sınıfına bağlıdır. Pencere sınıfını kaydetmek için RegisterClass işlevinin Unicode sürümü kullanıldıysa, sistem bu sınıfın tüm pencerelerine Unicode karakterler sağlar. Aksi takdirde, sistem ANSI karakter kodları sağlar. Daha fazla bilgi için bkz. windows sınıflarını kaydetme ve Windows uygulamalarında UTF-8 kod sayfalarını kullanma.

Bir karakter iletisinin lParam parametresinin içeriği, karakter iletisini oluşturmak üzere çevrilen anahtar aşağı iletinin lParam parametresinin içeriğiyle aynıdır. Daha fazla bilgi için bkz. Tuş Vuruşu İleti Bayrakları.

Dead-Character Mesajlar

İngilizce olmayan bazı klavyeler, kendi başına karakter üretmesi beklenmeyen karakter tuşları içerir. Bunun yerine, bir sonraki tuş vuruşuyla üretilen karaktere diakritik işareti eklemek için kullanılır. Bu anahtarlar ölü anahtarlar olarak adlandırılır. Almanca klavyedeki circumflex tuşu, bir ölü tuş örneğidir. Bir "o" harfi ve sirkumflexten oluşan karakteri girmek için, bir Alman kullanıcı önce sirkumflex, ardından "o" tuşuna basar. Klavye odağına sahip pencere aşağıdaki ileti dizisini alır:

  1. WM_KEYDOWN
  2. WM_DEADCHAR
  3. WM_KEYUP
  4. WM_KEYDOWN
  5. WM_CHAR
  6. WM_KEYUP

TranslateMessage, WM_KEYDOWN iletisini geçersiz bir anahtardan işlerken WM_DEADCHAR iletisini oluşturur. WM_DEADCHAR iletisinin wParam parametresi ölü anahtar için aksan karakter kodunu içerse de, uygulama genellikle iletiyi yoksayar. Bunun yerine, sonraki tuş vuruşu tarafından oluşturulan WM_CHAR iletisini işler. WM_CHAR iletisinin wParam parametresi, harfin aksanlı karakter kodunu içerir. Sonraki tuş vuruşu aksan ile birleştirilemeyen bir karakter oluşturursa, sistem iki WM_CHAR iletisi oluşturur. İlkinin wParam parametresi aksan karakteri kodunu içerir; İkincinin wParam parametresi, sonraki karakter anahtarının karakter kodunu içerir.

TranslateMessage işlevi, bir sistem ölü anahtarından (Alt tuşuyla birlikte basılan) WM_SYSKEYDOWN iletisini işlediğinde, WM_SYSDEADCHAR iletisini oluşturur. Bir uygulama genellikle WM_SYSDEADCHAR iletisini yoksayar.

Önemli Durum

Bir klavye iletisi işlenirken, bir uygulamanın geçerli iletiyi oluşturan tuş dışında başka bir anahtarın durumunu belirlemesi gerekebilir. Örneğin, kullanıcının bir metin bloğu seçmek için Shift+End basmasını sağlayan bir sözcük işleme uygulaması, End tuşundan bir tuş vuruşu iletisi aldığında Shift tuşunun durumunu denetlemelidir. Uygulama, geçerli ileti oluşturulduğu sırada bir sanal anahtarın durumunu belirlemek için getkeystateişlevini kullanabilir; GetAsyncKeyState işlevini kullanarak bir sanal anahtarın geçerli durumunu alabilir.

Bazı tuşlar, klavye düzeninin durumunu değiştiren açma/kapama tuşları olarak kabul edilir. Geçiş tuşları genellikle Caps Lock (VK_CAPITAL), Num Lock (VK_NUMLOCK) ve Scroll Lock (VK_SCROLL) tuşlarını içerir. Çoğu klavyenin bu tuşlar için karşılık gelen LED göstergeleri vardır.

Klavye düzeni ad listesi tutar. Tek bir karakter üreten bir anahtarın adı, anahtar tarafından üretilen karakterle aynıdır. Karakter dışı bir tuşun adı, Sekme ve Enter gibi bir karakter dizesi olarak depolanır. Uygulama, GetKeyNameText işlevini çağırarak klavye düzeninden herhangi bir tuşun adını alabilir.

Tuş Vuruşu ve Karakter Çevirileri

Sistem, çeşitli tuş vuruşu iletileri tarafından sağlanan tarama kodlarını, karakter kodlarını ve sanal anahtar kodlarını çeviren çeşitli özel amaçlı işlevler içerir. Bu işlevler MapVirtualKey, ToAscii, ToUnicodeve VkKeyScaniçerir.

Buna ek olarak, Microsoft Rich Edit 3.0, kullanıcının kısayol tuşlarını kullanarak onaltılık ve Unicode karakterler arasında dönüştürme yapmasına olanak tanıyan HexToUnicode IMEdestekler. Bu, Microsoft Rich Edit 3.0 bir uygulamaya eklendiğinde uygulamanın HexToUnicode IME'nin özelliklerini devralacağı anlamına gelir.

Hot-Key Desteği

kısayol tuşu, bir WM_HOTKEY iletisi üreten bir tuş kombinasyonudur, bu iletiyi sistem bir iş parçacığının ileti kuyruğunun en üstüne yerleştirir ve böylece kuyruktaki mevcut iletileri atlar. Uygulamalar, kullanıcıdan yüksek öncelikli klavye girişi almak için kısayol tuşlarını kullanır. Örneğin, bir uygulama, Ctrl+C tuş vuruşunu içeren bir kısayol tuşu tanımlayarak kullanıcının uzun bir işlemi iptal etmesine izin verebilir.

Bir kısayol anahtarı tanımlamak için, uygulama RegisterHotKey işlevini çağırarak WM_HOTKEY iletisini oluşturan anahtarların birleşimini, iletiyi alacak pencerenin tutamacını ve kısayol tuşunun tanımlayıcısını belirtir. Kullanıcı kısayol tuşuna bastığında, pencereyi oluşturan iş parçacığının ileti kuyruğuna bir WM_HOTKEY iletisi yerleştirilir. İletinin wParam parametresi kısayol tuşunun tanımlayıcısını içerir. Uygulama bir iş parçacığı için birden çok kısayol tuşu tanımlayabilir, ancak iş parçacığındaki her kısayol tuşunun benzersiz bir tanımlayıcısı olmalıdır. Uygulama sonlandırılmadan önce, etkin anahtarı yok etmek için UnregisterHotKeyişlevinikullanmalıdır.

Uygulamalar, kullanıcının kısayol tuşu seçmesini kolaylaştırmak için bir kısayol tuşu denetimi kullanabilir. Kısayol tuşu denetimleri genellikle bir pencereyi etkinleştiren bir kısayol tuşu tanımlamak için kullanılır; RegisterHotKey ve UnregisterHotKey işlevlerini kullanmazlar. Bunun yerine, sık erişimli anahtar denetimi kullanan bir uygulama genellikle sık erişim anahtarını ayarlamak için WM_SETHOTKEY iletisini gönderir. Kullanıcı kısayol tuşuna her bastığında sistem, SC_HOTKEYbelirten bir WM_SYSCOMMAND iletisi gönderir. Sık erişimli anahtar denetimleri hakkında daha fazla bilgi için, Sık Erişimli Anahtar Denetimleri'ndeki "Sık Erişimli Anahtar Denetimlerini Kullanma" bölümüne bakın.

Gözatma ve Diğer İşlevler için Klavye Tuşları

Windows, tarayıcı işlevleri, medya işlevleri, uygulama başlatma ve güç yönetimi için özel tuşlara sahip klavyeler için destek sağlar. WM_APPCOMMAND ek klavye tuşlarını destekler. Ayrıca, ShellProc işlevi, ek klavye tuşlarını destekleyecek şekilde değiştirilir.

Bileşen uygulamasındaki bir alt pencerenin bu ek klavye tuşları için komutları doğrudan uygulayabilmesi olası değildir. Bu nedenle, bu tuşlardan birine basıldığında DefWindowProc pencereye WM_APPCOMMAND iletisi gönderir. DefWindowProc, WM_APPCOMMAND iletisini üst penceresine de iletir. Bu, bağlam menülerinin sağ fare düğmesiyle çağrılma şekline benzer. Bu, DefWindowProc sağ düğme tıklamasına WM_CONTEXTMENU iletisi gönderir ve bunu üst öğesine kabarcıklar. Ayrıca, DefWindowProc üst düzey bir pencere için WM_APPCOMMAND iletisi alırsa, HSHELL_APPCOMMANDkoduyla bir sistem kancası çağırır.

Windows, beş düğmeli bir fare olan Microsoft IntelliMouse Gezgini'ni de destekler. İki ek düğme, ileri ve geri tarayıcı gezintisini destekler. Daha fazla bilgi için bkz. XBUTTONs.

Giriş Simülasyonu

Kesintisiz bir kullanıcı giriş olayları serisinin simülasyonunu yapmak için sendInputişlevini kullanın. işlevi üç parametre kabul eder. cInputs ilk parametre, simülasyonu yapılacak giriş olaylarının sayısını gösterir. rgInputs ikinci parametre, her biri bir giriş olayı türünü ve bu olayla ilgili ek bilgileri açıklayan bir INPUT yapıları dizisidir. cbSize son parametre, INPUT yapısının boyutunu bayt cinsinden kabul eder.

SendInput işlevi, bir cihazın giriş akışına bir dizi sanal giriş olayı ekleyerek çalışır. Bu etki, sistemin sanal olaylarla başka hiçbir giriş olayının karışmamasını sağlaması dışında, keybd_event veya mouse_event işlevini tekrar tekrar çağırmak gibi benzer. Çağrı tamamlandığında, dönüş değeri başarıyla oynanan giriş olaylarının sayısını gösterir. Bu değer sıfırsa giriş engellenir.

SendInput işlevi klavyenin geçerli durumunu sıfırlamaz. Bu nedenle, bu işlevi çağırdığınızda kullanıcı herhangi bir tuşa basıyorsa, bu işlevin oluşturduğu olayları etkileyebilir. Eğer olası karışma konusunda endişeniz varsa, GetAsyncKeyState işlevini kullanarak klavyenin durumunu denetleyin ve gerektiği gibi düzeltin.

Diller, Yerel Ayarlar ve Klavye Düzenleri

dil İngilizce, Fransızca ve Japonca gibi doğal bir dildir. alt dil, Birleşik Krallık ve ABD'de konuşulan İngilizce alt bölgeler gibi belirli bir coğrafi bölgede konuşulan doğal bir dilin çeşitlemesidir. Uygulamalar, dilleri ve alt alanları benzersiz olarak tanımlamak için dil tanımlayıcıları olarak adlandırılan değerleri kullanır.

Uygulamalar genellikle giriş ve çıkışın işlendiği dili ayarlamak için yerel ayarları kullanır. Örneğin, klavyenin yerel ayarının ayarlanması, klavye tarafından oluşturulan karakter değerlerini etkiler. Ekran veya yazıcının yerel ayarının ayarlanması, görüntülenen veya yazdırılan glifleri etkiler. Uygulamalar, klavye düzenlerini yükleyip kullanarak klavyenin yerel ayarını ayarlar. Belirtilen yerel ayarı destekleyen bir yazı tipi seçerek bir ekran veya yazıcı için yerel ayarı ayarlar.

Klavye düzeni, tuşların klavyedeki fiziksel konumunu belirtmenin yanında, bu tuşlara basılarak oluşturulan karakter değerlerini de belirler. Her düzen geçerli giriş dilini tanımlar ve hangi karakter değerlerinin hangi tuşlar ve tuş bileşimleri tarafından oluşturulduğunu belirler.

Her klavye düzeninin, düzeni ve dili tanımlayan karşılık gelen bir tutamacı vardır. Tutamacın düşük kelimesi bir dil tanımlayıcısıdır. Yüksek kelime, fiziksel düzeni belirten bir aygıt tanıtıcısıdır ya da varsayılan fiziksel düzeni belirten sıfırdır. Kullanıcı herhangi bir giriş dilini fiziksel bir düzen ile ilişkilendirebilir. Örneğin, bazen Fransızca çalışan İngilizce konuşan bir kullanıcı, klavyenin fiziksel düzenini değiştirmeden klavyenin giriş dilini Fransızca olarak ayarlayabilir. Bu, kullanıcının tanıdık İngilizce düzenini kullanarak Fransızca metin girebileceği anlamına gelir.

Uygulamaların giriş dillerini doğrudan işlemesi genellikle beklenmez. Bunun yerine, kullanıcı dil ve düzen birleşimlerini ayarlar, ardından bunlar arasında geçiş yapar. Kullanıcı farklı bir dille işaretlenmiş metne tıkladığında uygulama, kullanıcının bu dil için varsayılan düzenini etkinleştirmek üzere ActivateKeyboardLayoutişleviniçağırır. Kullanıcı etkin listede yer almayan bir dilde metin düzenlerse, uygulama LoadKeyboardLayout işlevini çağırarak bu dile dayalı bir düzen elde edebilir.

ActivateKeyboardLayout işlevi geçerli görevin giriş dilini ayarlar. hkl parametresi, klavye düzeninin tutamacı veya sıfır genişletilmiş dil tanımlayıcısı olabilir. Klavye düzeni tanıtıcıları LoadKeyboardLayout veya GetKeyboardLayoutList işlevinden elde edilebilir. sonraki veya önceki klavyeyi seçmek için HKL_NEXT ve HKL_PREV değerleri de kullanılabilir.

GetKeyboardLayoutName fonksiyonu, çağıran iş parçacığı için etkin klavye düzeninin adını alır. Bir uygulama LoadKeyboardLayout işlevini kullanarak etkin düzeni oluşturursa, GetKeyboardLayoutName düzeni oluşturmak için kullanılan dizeyi alır. Aksi takdirde, dize etkin düzenin yerel ayarına karşılık gelen birincil dil tanımlayıcısı olur. Bu, işlevin aynı birincil dile sahip farklı düzenler arasında ayrım yapmayabileceği anlamına gelir, bu nedenle giriş diliyle ilgili belirli bilgileri döndüremez. Ancak GetKeyboardLayout işlevi, giriş dilini belirlemek için kullanılabilir.

LoadKeyboardLayout işlevi bir klavye düzeni yükler ve düzeni kullanıcının kullanımına açar. Uygulamalar, KLF_ACTIVATE değerini kullanarak geçerli iş parçacığı için düzeni hemen etkinleştirebilir. Bir uygulama, KLF_ACTIVATE değerini belirtmeden düzenleri yeniden sıralamak için KLF_REORDER değerini kullanabilir. Uygulamalar, varsa kullanıcının tercihinin seçildiğinden emin olmak için klavye düzenlerini yüklerken her zaman KLF_SUBSTITUTE_OK değerini kullanmalıdır.

Çok dilli destek için LoadKeyboardLayout işlevi KLF_REPLACELANG ve KLF_NOTELLSHELL bayrakları sağlar. KLF_REPLACELANG bayrağı, işlevi dili değiştirmeden mevcut bir klavye düzenini değiştirmeye yönlendirir. Aynı dil tanımlayıcısını kullanarak ancak KLF_REPLACELANG belirtmeden var olan bir düzeni değiştirme girişimi bir hatadır. KLF_NOTELLSHELL bayrağı, klavye düzeni eklendiğinde veya değiştirildiğinde işlevin kabuğa bildirim vermesini engeller. Bu, ardışık bir çağrı serisinde birden çok düzen ekleyen uygulamalar için kullanışlıdır. Bu bayrak, son çağrı dışında tümünde kullanılmalıdır.

UnloadKeyboardLayout işlevi, sistem varsayılan giriş dilini kaldıramadığı için kısıtlanmıştır. Bu, kullanıcının kabuk ve dosya sistemi tarafından kullanılan karakter kümesini kullanarak metin girmek için her zaman bir düzen olmasını sağlar.