![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Текущая раскладка клавиатуры [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