Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 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ı
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:
- SysRq tuş tarama kodu, Alt+Print ekranı tuş kombinasyonu olarak veriliyor.
- Kesme tuş tarama kodu Ctrl+Duraklat bir tuşa basıldığında
- Eski klavye iletilerinde görüldüğü gibi
- Tuş Brezilya klavyelerinde bulunur
- Tuş Japonca klavyelerde bulunur
- 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:
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.