Программирование для Windows NT (том 2)

       

Получение списка установленных раскладок


При установке операционной системы Microsoft Windows NT или Microsoft Windows 95 пользователь может выбрать для работы одну или несколько раскладок клавиатуры. Для определения списка установленных раскладок вы можете использовать функцию GetKeyboardLayoutList:

UINT GetKeyboardLayoutList(

  int nBuff,    // количество элементов в буфере

  HKL *lpList); // указатель на буфер

Функция GetKeyboardLayoutList записывает в буфер, адрес которого задан параметром lpList, массив идентификаторов установленных раскладок клавиатуры, имеющих тип HKL. Через параметр nBuff вы должны передать функции размер буфера, указанный в количестве идентификаторов типа HKL.

Как определить этот размер?

Для этого достаточно указать функции GetKeyboardLayoutList параметр nBuff, имеющий нулевое значение. При этом функция вернет размер массива, необходимый для записи в него всех идентификаторов.

Вот фрагмент кода, в котором приложение заказывает динамически память для идентификаторов установленных раскладок клавиатуры, а затем заполняет полученный буфер с помощью функции GetKeyboardLayoutList:

UINT uLayouts;

HKL  *lpList;

uLayouts = GetKeyboardLayoutList(0, NULL);

lpList   = malloc(uLayouts * sizeof(HKL));

uLayouts = GetKeyboardLayoutList(uLayouts, lpList);

Заметим, что младшее слово идентификатора раскладки клавиатуры содержит идентификатор набора национальных параметров. Этот факт можно использовать для определения названия национального языка или страны, соответствующего данной раскладке клавиатуры.

Операция определения названия национального языка выполняется в приведенном ниже фрагменте кода:

GetLocaleInfo(MAKELCID(((UINT)hklCurrent & 0xffffffff),

  SORT_DEFAULT), LOCALE_SLANGUAGE, szBuf, 512);



Содержание раздела