Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Текущая раскладка клавиатуры [D1, D2, D3, D4, D5, D6, Win95/98, WinME, NT4, Win2k, WinXP]


ASGroup ©   (2002-06-22 23:10:00) 

Как получить текущую раскладку клавиатуры
А потом из неё получить её имя (например "Английский США" ) или Название в системе (типа "00000409")


Игорь Шевченко   (2002-06-24 09:55:00) [1]

Или так :

{
HSGetLocaleLanguageName - Определение названия языка Locale, аналогичного тому, который появляется в окне индикатора клавиатуры.
}

{ Для определения языка в NT-системах предпочтительней вызывать Unicode-версию
GetLocaleInfo }
function HSGetLocaleLanguageName (Locale : Cardinal) : String;
var
tmp : array[0..255] of char;
tmpW : array[0..255] of WideChar;
begin
if HSQuerySystemInfo(hsiNTPlatform) then begin
GetLocaleInfoW(Locale, LOCALE_SLANGUAGE, tmpW, SizeOf(tmpW));
Result := WideCharToString(tmpW);
end else begin
GetLocaleInfo(Locale, LOCALE_SLANGUAGE, tmp, SizeOf(tmp));
Result := tmp;
end;
end;

Имя текущей раскладки:

HSGetLocaleLanguageName(LOWORD(GetKeyboardLayout(0)));

С уважением,


Юрий Зотов   (2002-06-23 08:10:00) [2]

Примерно так:


var
S: string;
...
SetLength(S, KL_NAMELENGTH + 1);
if GetKeyboardLayoutName(@S[1]) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKeyReadOnly("\System\CurrentControlSet\Control\Nls\Locale")
then S := ReadString(S)
else S := ""
finally
Free
end
else S := "";


Proton   (2002-06-23 04:05:00) [3]

Вообще текушая берется вот так.
const Lang_RU = $4190419;//68748313
Lang_ENG = $4090409;//67699721
begin
RxSwitch_lang.StateOn := GetKeyboardLayout(GetCurrentThreadId)=LANG_RU;
RxSwitch_caps_lock.StateOn := not GetKeyState(VK_CAPITAL) and 1 = 0;
end;

ну а имя ее вот так (только не ее а текущей)
GetKeyboardLayoutName(
Ну а вообще RTFM


Наверх

Титульная страница Поиск, карта сайта Написать письмо