Здравствуйте, SergH, Вы писали:
SH>Из MSDN про GetKeyboardLayout :
SH>The return value is the input locale identifier for the thread. The low word contains a language identifier for the input language and the high word contains a device handle for the physical layout of the keyboard.
GetKeyboardLayout действительно отслеживает изменения языка. Но GetLocaleInfo с его результатом работать отказывается. Вот, что я делаю для проверки:
function GetLocaleChar(Locale, LocaleType: Integer; Default: Char): Char;
var
Buffer: array[0..1] of Char;
begin
if GetLocaleInfo(Locale, LocaleType, Buffer, 2) > 0 then
Result := Buffer[0] else
Result := Default;
end;
Application.MessageBox(PChar(format(
'Lo=%4x; Hi=%4x; Char=[%s]',
[LoWord(GetKeyboardLayout(0)), HiWord(GetKeyboardLayout(0)),
GetLocaleChar(GetKeyboardLayout(0), LOCALE_SDECIMAL, 'D')])),
'Info', mb_Ok or mb_IconInformation);
Результат работы GetLocaleChar всегда равен "D". А если ему дать результат чего-нибудь типа GetThreadLocale — все нормально, но результат не тот, что хотелось — постоянно то, что прописано в панели управления. Мне же нужен
конкретно тот разделитель, который действует непосредственно сейчас, для текущего языка ввода.
Есть соображения?